멋진 체스 게임은 어떻습니까?

코드 출현 2016 5일차



1 부


  • 거꾸로 가는 것이 도움이 됨
  • 기다리는 게임을...다시

  • 거꾸로 가는 것이 도움이 되었다



    지금까지 MD5 해싱에 대해 잘 알고 있습니다.
  • Day 17: Two Steps Forward
  • Day 14: One-Time Pad
  • 그리고 이제 5일차는 올해 첫 번째MD5 테마 퍼즐이라고 생각합니다. 하지만 제가 틀릴 수도 있습니다
  • .

    기다림의 게임...다시


  • 해시 생성
  • 해시
  • 의 처음 5개 문자가 00000와 일치하는지 확인합니다.
  • 8개의 일치 항목을 찾을 때까지 반복합니다
  • .

    자바스크립트 내 알고리즘:

    let index = 0, password = "", doorID = 'abc'
    while (password.length < 8) {
      let hash = MD5(doorID + index).toString()
      if (hash.slice(0,5) == '00000') {
        password += hash[5]
      }
      index++
    }
    return password
    


    이 작업은 시간이 걸릴 수 있습니다... 특히 경기가 연속으로 50초이기 때문에 더욱 그렇습니다!

    ...

    매 반복마다 2017 해시를 생성해야 했던 14일차만큼 오래 걸리지 않았습니다!

    그러나 여전히 실행하는 데 몇 분이 걸렸습니다.

    고맙게도 내 도어 ID에 대한 정답을 생성했습니다!

    2 부



    멋진 트위스트와 더 긴 대기 게임


  • 배열, 위치 및 값을 설명하도록 알고리즘을 업데이트했습니다
  • .

    그러나 나는 처음에 지침의 이 부분을 설명하는 것을 무시했습니다.

    Use only the first result for each position


  • 그게 무슨 뜻인지 잘 모르겠습니다.
  • 예제 입력에서 내 알고리즘을 실행하기 전까지
  • 예상과 다른 답변을 생성했습니다
  • .
  • 이미 설정된 값 중 일부를 수정했기 때문에

  • 이를 설명하기 위해 내 코드를 업데이트한 후:

    password[hash[5]] = password[hash[5]] || hash[6]
    


    내 알고리즘은 예제 도어 ID와 내 도어 ID에 대한 정답을 생성했습니다!

    JavaScript에서 내 업데이트된 알고리즘:

    let index = 0, doorID = 'abc'
    let password = new Array(8).fill(null)
    while (password.includes(null)) {
      let hash = MD5(doorID + index).toString()
      if (hash.slice(0,5) == '00000' && hash[5] < 8) {
        password[hash[5]] = password[hash[5]] || hash[6]
      }
      index++
    }
    return password.join('')
    


    해냈어!!


  • 두 부분 모두 해결했습니다!
  • 짧은 시간의 글과 오랜 기다림 끝에!
  • 그리고 내 알고리즘에서 한 가지 중요한 사용 사례를 수용합니다!
  • 좋은 웹페이지 즐겨찾기