배경
많은 코드 골프를한다면, 비트 XOR 연산을 알고있을 것 입니다. 두 개의 정수가 주어지면 두 1입력이 다른 비트에서 s를 갖는 또 다른 정수를 제공합니다 . 예를 들어 1010 XOR 0011 = 1001.
그것은 "nim sum"으로 더 잘 알려진 게임 이론에서 매우 유용한 것으로 판명되었습니다. 당신이 (즉, 당신이 한 번에 하나의 게임에서 이동을 만들고 있어요)이 개 게임의 합이있는 경우 값 위치의 각 개별 게임에서 위치 값의 NIM 합계입니다.
그러나 우리는 이것을 한 단계 더 발전시킬 수 있습니다. nim 추가와 nim 곱셈 의 적절한 정의 를 사용하면 음이 아닌 정수에서 필드를 형성 할 수 있습니다. 따라서 도전은 골프 nim 곱셈입니다.
정의
Nim 곱셈은 다음 규칙을
따릅니다. 숫자가 더 작은 Fermat 2-power n = (2 ^ (2 ^ k))의 nim 곱은 일반 곱입니다.
Fermat 2-power n 자체의 nim 곱은 3n / 2입니다.
님 곱셈은 님 추가에 분포합니다.
님 곱셈은 계산적이고 연관성이 있습니다 (nim 추가와 동일).
곱셈 항등은 1입니다 (첨가 항등도는 0).
음이 아닌 정수는 2의 고유 거듭 제곱의 nim sum으로 쓸 수 있고, 2의 거듭 제곱은 다른 Fermat 수의 곱으로 쓸 수 있으므로 모든 음이 아닌 정수에 대한 nim 곱셈을 정의하기에 충분합니다.
예
그것은 모두 추상적 인 내용이므로 예제를 통해 살펴 보겠습니다. +nim 추가 (XOR) 및 *nim 곱셈 을 나타내는 데 사용하겠습니다 .
6 * 13
= (4 + 2) * (8 + 4 + 1)
= (4 + 2) * ((4 * 2) + 4 + 1)
= (4 * 4 * 2) + (4 * 2 * 2) + (4 * 4) + (4 * 2) + (4 * 1) + (2 * 1)
= (6 * 2) + (4 * 3) + 6 + 8 + 4 + 2
= ((4 + 2) * 2) + 12 + 6 + 8 + 4 + 2
= (4 * 2) + (2 * 2) + 12 + 6 + 8 + 4 + 2
= 8 + 3 + 12 + 6 + 8 + 4 + 2
= 15
추가 테스트 사례
4, 4 -> 6
4, 3 -> 12
4, 7 -> 10
2, 4 -> 8
2, 3 -> 1
1, 42 -> 42
도전
편리한 형태의 두 개의 음이 아닌 정수가 주어지면 자신의 nim product를 계산하는 프로그램이나 함수를 작성하십시오.
이것은 code-golf 이므로 가장 짧은 제출이 이깁니다.