sfondo
Se fai molto golf a codice, probabilmente sei a conoscenza dell'operazione XOR bit a bit . Dati due numeri interi, fornisce un altro numero intero con 1s nei bit in cui i due ingressi differiscono. Quindi, per esempio 1010 XOR 0011 = 1001,.
Risulta essere molto utile nella teoria dei giochi, dove è meglio conosciuto come "nim sum". Se hai la somma di due partite (ovvero fai mosse in una partita alla volta), il valore della posizione è la somma nim dei valori delle posizioni in ogni singola partita.
Ma possiamo fare un ulteriore passo avanti. Con l'aggiunta di nim e una definizione appropriata della moltiplicazione di nim , possiamo formare un campo dagli interi non negativi. Quindi la sfida è la moltiplicazione del golf nim.
Definizione
La moltiplicazione Nim obbedisce alle seguenti regole:
Il prodotto nim di un Fermat 2-power n = (2 ^ (2 ^ k)) con un numero inferiore è il prodotto ordinario.
Il prodotto nim di un Fermat 2-power n con se stesso è 3n / 2.
La moltiplicazione Nim si distribuisce sull'aggiunta NIM.
La moltiplicazione Nim è commutativa e associativa (come lo è aggiunta nim).
L'identità moltiplicativa è 1 (e l'identità additiva è 0).
Qualsiasi numero intero non negativo può essere scritto come la somma nim di poteri distinti di due, e qualsiasi potere di due può essere scritto come il prodotto di numeri Fermat distinti, quindi questo è sufficiente per definire la moltiplicazione nim per tutti i numeri interi non negativi.
Esempio
Era tutto piuttosto astratto, quindi esaminiamo un esempio. Userò +per indicare l'addizione nim (XOR) e *per la moltiplicazione 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
Casi di prova aggiuntivi
4, 4 -> 6
4, 3 -> 12
4, 7 -> 10
2, 4 -> 8
2, 3 -> 1
1, 42 -> 42
Sfida
Scrivi un programma o una funzione che, dati due numeri interi non negativi in qualsiasi forma conveniente, calcola il loro prodotto nim.
Si tratta di code-golf , quindi vince l'invio più breve.