fundo
Se você pratica muito código de golfe, provavelmente conhece a operação XOR bit a bit . Dados dois números inteiros, ele fornece outro número inteiro com 1
s nos bits, onde as duas entradas diferem. Então, por exemplo 1010 XOR 0011 = 1001
,.
Isso acaba sendo muito útil na teoria dos jogos, onde é mais conhecida como "nim sum". Se você tiver a soma de dois jogos (ou seja, você está fazendo movimentos em um jogo de cada vez), o valor da posição é a soma nim dos valores das posições em cada jogo individual.
Mas podemos dar um passo adiante. Com a adição de nim e uma definição apropriada de multiplicação de nim , podemos formar um campo a partir de números inteiros não negativos. Portanto, o desafio é multiplicar o golfe.
Definição
A multiplicação de nim obedece às seguintes regras:
O produto nim de uma Fermat 2-potência n = (2 ^ (2 ^ k)) com qualquer número menor é o produto comum.
O produto nim de um Fermat 2-power n é 3n / 2.
A multiplicação de nim distribui sobre a adição de nim.
A multiplicação de nim é comutativa e associativa (como é a adição de nim).
A identidade multiplicativa é 1 (e a identidade aditiva é 0).
Qualquer número inteiro não negativo pode ser escrito como a soma nim de potências distintas de dois e qualquer potência de dois pode ser escrito como o produto de números Fermat distintos, portanto, isso é suficiente para definir a multiplicação de nim para todos os números inteiros não negativos.
Exemplo
Isso foi tudo bastante abstrato, então vamos trabalhar com um exemplo. Vou usar +
para denotar disso nim (XOR) e *
para a multiplicação 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
Casos de teste adicionais
4, 4 -> 6
4, 3 -> 12
4, 7 -> 10
2, 4 -> 8
2, 3 -> 1
1, 42 -> 42
Desafio
Escreva um programa ou função que, dados dois inteiros não negativos em qualquer forma conveniente, calcule seu produto nim.
Este é o código-golfe , pelo que o envio mais curto vence.