tło
Jeśli dużo grasz w golfa, prawdopodobnie znasz bitową operację XOR . Biorąc pod uwagę dwie liczby całkowite, daje kolejną liczbę całkowitą 1
s w bitach, w których dwa wejścia różnią się. Na przykład 1010 XOR 0011 = 1001
.
Okazuje się, że jest bardzo przydatny w teorii gier, gdzie jest lepiej znany jako „nim sum”. Jeśli masz sumę dwóch gier (to znaczy wykonujesz ruchy w jednej grze na raz), wartość pozycji jest nim sumą wartości pozycji w każdej grze.
Ale możemy pójść o krok dalej. Dzięki dodaniu nim i odpowiedniej definicji mnożenia nim możemy utworzyć pole z nieujemnych liczb całkowitych. Tak więc wyzwanie polega na pomnożeniu golfa nim.
Definicja
Mnożenie Nim podlega następującym zasadom:
iloczyn nim Fermata 2-power n = (2 ^ (2 ^ k)) z dowolną mniejszą liczbą jest produktem zwykłym.
Produkt nim Fermata 2-power n z samym sobą wynosi 3n / 2.
Mnożenie Nim rozkłada się na dodawanie NIM.
Mnożenie Nim jest przemienne i asocjacyjne (podobnie jak dodawanie NIM).
Tożsamość multiplikatywna wynosi 1 (a tożsamość addytywna to 0).
Dowolną nieujemną liczbę całkowitą można zapisać jako sumę nim dwóch odrębnych potęg dwóch, a każdą potęgę dwóch można zapisać jako iloczyn różnych liczb Fermata, więc to wystarczy, aby zdefiniować mnożenie nim dla wszystkich nieujemnych liczb całkowitych.
Przykład
To wszystko było dość abstrakcyjne, więc przeanalizujmy przykład. Użyję +
do oznaczenia NIM Dodatkowo (XOR) i *
za Nim mnożenia.
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
Dodatkowe przypadki testowe
4, 4 -> 6
4, 3 -> 12
4, 7 -> 10
2, 4 -> 8
2, 3 -> 1
1, 42 -> 42
Wyzwanie
Napisz program lub funkcję, która przy dwóch nieujemnych liczbach całkowitych w dowolnej dogodnej formie oblicza ich produkt nim.
To jest golf golfowy , więc wygrywa najkrótsze zgłoszenie.