Contexte
Dans le jeu de Nim , les joueurs alternent en retirant les "pierres" des "piles": à chaque tour, un joueur doit retirer entre une et toutes les pierres d'une seule pile. Le but de Nim est de prendre la dernière pierre ou, dans la variante misere, de forcer votre adversaire à le faire - cependant, il s'avère que les stratégies sont presque identiques.
Nim fait un jeu de bar amusant. Vous pouvez utiliser des allumettes ou des pièces pour les "pierres" et les "piles" sont généralement disposées en ligne. Vous trouverez ci-dessous une configuration classique avec des piles de 1, 3, 5 et 7:
Si vous n'avez jamais joué à Nim auparavant, vous pouvez vous y essayer avant de tenter ce défi. Voici une version appelée "Pearls Before Swine" .
Stratégie
La stratégie optimale dans Nim est suffisamment délicate pour que la plupart des profanes perdent systématiquement face à un expert, mais simple à décrire avec l' arithmétique binaire .
Cependant, effectuer des opérations XOR binaires mentales est difficile, donc heureusement, il existe un moyen équivalent de visualiser la bonne stratégie qui est plus facile à mettre en œuvre en temps réel, même lorsqu'il est ivre.
Il n'y a que trois étapes:
- Regroupez mentalement les "pierres" de chaque ligne en sous-groupes dont les tailles sont des puissances de 2, en commençant par la plus grande taille possible: 8, 4, 2 et 1 suffisent pour la plupart des jeux.
- Essayez de faire correspondre chaque groupe avec un jumeau d'une autre ligne, afin que chaque groupe ait une paire.
- Si ce n'est pas possible, supprimez les "pierres" non appariées d'une seule ligne (ce sera toujours possible - voir le lien Wikipedia pour savoir pourquoi) afin que l'étape 2. devienne possible.
Ou, a dit une autre façon: "Retirez des pierres d'une seule pile de sorte que si vous regroupez ensuite les piles en pouvoirs de 2, tous les groupes peuvent être associés à un groupe dans une autre pile." Avec la mise en garde que vous ne pouvez pas diviser des pouvoirs plus grands de 2 en plus petits - par exemple, vous ne pouvez pas grouper une ligne avec 8 pierres en deux groupes de 4.
Par exemple, voici comment vous visualisez le tableau ci-dessus:
Ce plateau est parfaitement équilibré, vous voudrez donc que votre adversaire bouge en premier.
Le défi
Étant donné une liste d'entiers positifs représentant la taille des "piles" Nim, renvoyez une visualisation en texte brut de la carte Nim vue par un expert.
Ce qui constitue une visualisation valide est mieux expliqué par l'exemple, mais vous devez:
- Attribuez un caractère distinct à chaque "sous-groupe power-of-2" et à sa paire (les sous-groupes non appariés ne sont pas qualifiés), et utilisez ce caractère pour représenter les "pierres" du sous-groupe et de la paire.
- Représenter les « pierres » non appariés (c. -à ceux d' un expert supprimerait lors de la lecture normale - pas misere - Nim) à l' aide d' un trait d' union:
-.
Il y aura plusieurs façons d'obtenir une visualisation valide, et toutes sont valides. Passons en revue quelques cas de test:
Cas de test
Entrée: 1, 3, 5, 7
Résultat possible 1:
A
BBA
CCCCD
CCCCBBD
Vous pouvez éventuellement inclure des espaces entre les caractères, ainsi que des lignes vides entre les lignes:
Résultat possible 2:
A
B B A
C C C C D
C C C C B B D
Entrée: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
L'ordre et le choix des personnages peuvent être ceux que vous aimez:
Résultat possible 1:
G
E E
E E G
C C C C
C C C C F
B B B B D D
B B B B D D F
H H I - - - - -
A A A A A A A A I
A A A A A A A A H H
Les symboles Unicode sont également corrects:
Résultat possible 2:
◎
◈ ◈
◈ ◈ ◎
△ △ △ △
△ △ △ △ ◉
◐ ◐ ◐ ◐ ◀ ◀
◐ ◐ ◐ ◐ ◀ ◀ ◉
▽ ▽ ◒ - - - - -
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ◒
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ▽ ▽
Entrée: 7
Il résulte des règles que toute "pile unique" doit être complètement supprimée.
Résultat possible 1:
-------
Résultat possible 2:
- - - - - - -
Entrée: 5, 5
Sortie possible:
A A A A B
A A A A B
Règles supplémentaires
- C'est du golf de code avec des règles standard. Le code le plus court gagne.
- La saisie est flexible et peut être effectuée sous la forme de liste qui vous convient.
- La sortie est également flexible, comme l'illustrent les exemples ci-dessus. Les variations les plus raisonnables seront autorisées. Demandez si vous n'êtes pas sûr de quelque chose.
["H","EE","EEH","CCCC","CCCCI","DDDDFF","DDDDFFI","AAAAAAAA","AAAAAAAA-","----------"]
AAAABBBB, il ABBn'est pas valide et ne l'est pas - mais cela rend la sortie moins lisible, donc je pense que faire une décroissance dans une ligne est une règle explicite.

