디락 주사위
코드 출현 2021 21일차
1부에서 X가 같음을 나타내는 X를 구합니다.
의미 X는 다음과 같아야 합니다.
그것이 우리의 결과물입니다. 우리의 입력은 무엇입니까?
Player X starting position: N
우리의 입력은 무엇을 나타냅니까?
선수들 말입니까? 게임은 어떻게 진행되나요?
파트 1을 해결하기 위한 나의 작업 알고리즘
Use String mutation methods to extract each player's starting position
Initialize both player's scores to 0
Create an array of three values to keep a running tracker of the next three die rolls
Create a tracker for the number of rolls
Declare a win condition at 1000
While both players' scores are less than 1000
If the rolls tracker is odd
Then update player 1's position
Calculate the sum of: the current position and the sum of each value in tracker of upcoming die rolls...
Calculate the remainder of that sum when divided by 10
Update player 1's score to the sum of the current score and the new position
Else do the same but for player 2
Increment the number of rolls by 3
Increment each value in the die roll tracker by 3
Return the product of the lesser of both scores and the rolls tracker value minus 1 (it was initialized to 1 only to make the odd-even condition work correctly above)
이것은 정답을 생성했습니다.
그러나 그것은 어떤 면에서 웅변적이거나 효율적이지 않습니다.
다음은 Python 솔버 Topaz의 훌륭한 프로그래밍 기술을 가르쳐준 두 부분에 대한 웅변적인 솔루션입니다.
솔루션의 파트 1은 아래에 설명되어 있습니다. 놀랍도록 이해하기 쉽고 효율적인 10줄의 코드에 해당합니다.
Setup four variables:
1. Array: Forego parsing the input, just store both positions - minus 1 each to account for zero-based positioning - as two values in an array
2. Array: Store both players' initial scores as two values in an array
3. Integer: Track the number of rolls, starting from 1
4. Integer: Track the currently moving player as a number that will toggle between 0 and 1. It should start at 1 so that the first moving player is player 1, represented as 0.
While the score of the player who moved last is less than 1000
Switch players by updating the current player tracker to equal the difference of 1 and its current value, effectively toggling between 0 and 1
Update the current player's position by calculating the sum of their current position, and the outcome of this equation: multiply the rolls tracker's current value by 3, and add 3; lastly, calculate the remainder after dividing the sum by 10
Update the current player's score by adding to it their new position, plus 1 (accounting for minus 1 done to account for zero-indexed positioning)
Increment the rolls tracker by 3
Return the product of the lesser of both values in the scores array and the value in the rolls tracker, minus 1 (representing the prior roll)
토파즈의 유창한 코드에서 배운 것
n*x+x
: 1 + 2 + 3 == 1 * 3 + 3
및 4 + 5 + 6 == 4 * 3 + 3
p = 1; p = 1 - p
의 트릭 : p is 1, 0, 1, 0...
Topaz의 코드를 이해하고 JavaScript 코드로 번역하고 실행하여 내 열등한 코드에서 생성한 것과 동일한 정답을 공개하는 것은 보람 있는 일이었습니다.
파트 1의 솔루션 시각화
게임을 플레이하고 파트 1의 알고리즘을 더 잘 이해할 수 있는 웹사이트를 만들었습니다.
Visit this repl.it to try the demo and explore the website's code
파트 2는 완전히 다른 볼 게임이었습니다.
X가 같은 곳에서 X를 구합니다...
와. 우주에 대해 이것은 무엇입니까?
프로그래머의 딜레마
어디서부터 시작해야 할지 감이 잡히지 않았습니다. 하지만 파트 2에는 토파즈 알고리즘이 있었습니다.
Reference
이 문제에 관하여(디락 주사위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/dirac-dice-4b3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)