Quand j'étais enfant, je jouais beaucoup à ce jeu.
Règles
Il y a deux joueurs (appelons-les A et B), et chaque joueur utilise ses mains comme des fusils. Il y a trois mouvements possibles:
Levez la main pour charger des munitions dans votre arme.
Chaque pistolet démarre vide. Le chargement augmente les munitions d'une unité.
Mains pointant vers l'autre joueur pour tirer.
Cela diminue les munitions d'une unité. Vous devez avoir au moins une unité de munitions pour tirer.
Bras croisés pour vous protéger d'un coup de feu.
Les deux joueurs se déplacent simultanément. Si les deux joueurs tirent en même temps, les balles se touchent et le jeu continue. Le jeu se termine lorsqu'un joueur tire pendant que l'autre charge des munitions.
Le tir et l'arme vide sont considérés comme de la tricherie . Si un joueur triche alors que l'autre exécute une action en justice, le tricheur perd immédiatement. Si les deux joueurs trichent en même temps, le jeu continue.
Les tentatives de tricherie ne diminuent pas les munitions, elles ne peuvent donc jamais être négatives.
Défi
Compte tenu des mouvements effectués par les joueurs A et B, sortez quel joueur a gagné la partie: 1
pour le joueur A, -1
pour le joueur B et 0
pour un match nul. Vous pouvez utiliser tout autre triple de valeur de retour, mais vous devez indiquer dans votre réponse celles que vous utilisez.
Le jeu peut:
- terminer sans avoir à traiter tous les mouvements;
- ne se termine pas avec les mouvements donnés, et il est donc considéré comme un match nul.
L'entrée peut être prise:
- sous forme de chaînes
- sous forme de tableaux / listes d'entiers
- de toute autre manière qui ne pré-traite pas l'entrée
Programme complet ou fonctions autorisées. Puisqu'il s'agit de code-golf , la réponse la plus courte en octets gagne!
Cas de test
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Réponses:
Gelée,
333224 octetsCela imprime 5 au lieu de -1 et 7 au lieu de 1 . Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
Pyth,
48464947 octetsEssayez-le ici!
Merci à @isaacg pour avoir économisé
24 octets!Prend l'entrée en 2-tuple avec la liste des mouvements du joueur A en premier et les mouvements du joueur B en second. La sortie est la même que dans le défi.
Explication
Bref aperçu
[cheating win, fair win]
avec les valeurs possibles-1, 0, 1
pour chacun d'eux, pour indiquer si un joueur a gagné à ce point (-1, 1
) ou si le jeu continue (0
)[0,0]
, et de prendre le premier élément non nul qui indique le gagnantRépartition du code
la source
m|Fd
est le même que|M
.M
ça éclabousse aussi. Btw: Le problème des variables lambda conflictuelles dont nous avons discuté dans le chat me coûte plusieurs octets ici: P,1 2
est le même queS2
Python, 217 octets
Explication : prend A et B comme listes d'entiers. Exécute simplement chaque paire de mouvements, ajoute ou soustrait 1 si nécessaire et revient lorsque quelqu'un triche ou gagne. Fait la même chose deux fois en utilisant une autre pour la boucle, une fois pour le mouvement de A et une fois pour le mouvement de B. Ajoute 1 si x passe en dessous de 0 à -1.
la source
Java,
226212200196194 octets-14 octets par logique de réorganisation
-12 octets grâce à Mr Public expliquant comment utiliser une opération ternaire pour la logique de prise de vue
-4 octets en entassant la logique de charge en un court-circuit si
-2 octets car
==1
===<2
lorsque l' entrée ne peut être1
,2
,3
Utilisation et version en retrait:
La mise en œuvre des règles du jeu n'est plus aussi simple, mais simple. A chaque cycle, ces opérations:
r
pour perdrer
n'est pas le cas0
, renvoyez la valeur car quelqu'un a trichéx
est une variable fictive utilisée pour que le compilateur me permette d'utiliser une expression ternaire.Attendez, Java est plus court que Python?
la source
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
continuez à utiliser le x (car ce n'est qu'une variable fictive pour faire fonctionner le ternaire) commex=v==2?n<1?r++:r:n--;