Créez une fonction qui prendra deux chaînes en entrée et renverra une seule sortie pour le résultat. La réponse la plus populaire l'emporte.
Les règles de Rock-paper-scissors-lizard-Spock sont:
- Ciseaux papier découpé
- Papier couvre rock
- Lézard écrase la roche
- Lézard empoisonne Spock
- Spock fracasse les ciseaux
- Des ciseaux décapitent le lézard
- Lézard mange du papier
- Le papier réfute Spock
- Spock vaporise la roche
- Rock brise des ciseaux
La sortie pour chaque cas d'entrée possible est:
winner('Scissors', 'Paper') -> 'Scissors cut Paper'
winner('Scissors', 'Rock') -> 'Rock breaks Scissors'
winner('Scissors', 'Spock') -> 'Spock smashes Scissors'
winner('Scissors', 'Lizard') -> 'Scissors decapitate Lizard'
winner('Scissors', 'Scissors') -> 'Scissors tie Scissors'
winner('Paper', 'Rock') -> 'Paper covers Rock'
winner('Paper', 'Spock') -> 'Paper disproves Spock'
winner('Paper', 'Lizard') -> 'Lizard eats Paper'
winner('Paper', 'Scissors') -> 'Scissors cut Paper'
winner('Paper', 'Paper') -> 'Paper ties Paper'
winner('Rock', 'Spock') -> 'Spock vaporizes Rock'
winner('Rock', 'Lizard') -> 'Rock crushes Lizard'
winner('Rock', 'Scissors') -> 'Rock breaks Scissors'
winner('Rock', 'Paper') -> 'Paper covers Rock'
winner('Rock', 'Rock') -> 'Rock ties Rock'
winner('Lizard', 'Rock') -> 'Rock crushes Lizard'
winner('Lizard', 'Spock') -> 'Lizard poisons Spock'
winner('Lizard', 'Scissors') -> 'Scissors decapitate Lizard'
winner('Lizard', 'Paper') -> 'Lizard eats Paper'
winner('Lizard', 'Lizard') -> 'Lizard ties Lizard'
winner('Spock', 'Rock') -> 'Spock vaporizes Rock'
winner('Spock', 'Lizard') -> 'Lizard poisons Spock'
winner('Spock', 'Scissors') -> 'Spock smashes Scissors'
winner('Spock', 'Paper') -> 'Paper disproves Spock'
winner('Spock', 'Spock') -> 'Spock ties Spock'
Défi supplémentaire suggéré par @Sean Cheshire: Autoriser les listes personnalisées, telles que celles de ce site. Avec la liste des n éléments, l'élément perd au (n-1) / 2 précédent et gagne le (n-1) / 2 suivant
popularity-contest
dansalmo
la source
la source
Réponses:
APL
Sortie exactement comme requis dans tous les cas, y compris les cravates / cravates. Aucune table de recherche, sauf pour les mots réels.
Vous pouvez l'essayer sur http://ngn.github.io/apl/web/
APL sait juste!
la source
SED
la source
Voici une solution générale basée sur une chaîne de règles de n'importe quelle taille. Il effectue une mise en majuscules correcte pour le nom propre "Spock" et permet également des règles pour spécifier "cravate" au lieu de "cravates" pour plusieurs objets.
Résultats:
la source
rules
vous pouvez utiliser une chaîne multiligne au lieu d'une concaténation littérale. Cela vous permet de supprimer les parenthèses redondantes.Python
la source
Python
la source
Ruby, approche arithmétique
Les acteurs peuvent être disposés dans un tableau de telle manière que chaque acteur
a[i]
gagne contre les acteursa[i+1]
eta[i+2]
, modulo 5, par exemple:Ensuite, pour un acteur
A
avec index,i
nous pouvons voir comment il correspond à un acteurB
avec indexj
en faisantresult = (j-i)%5
: Résultat1
et2
signifie que l'acteur A a gagné contre un acteur 1 ou 2 places respectivement devant lui;3
et4
signifie également qu'il a perdu contre un acteur derrière lui dans le tableau.0
signifie une cravate. (Notez que cela peut dépendre de la langue; dans Ruby(j-i)%5 == (5+j-i)%5
aussi quandj>i
.)La partie la plus intéressante de mon code est l'utilisation de cette propriété pour trouver une fonction de tri des indices de deux acteurs. La valeur de retour sera -1, 0 ou 1 comme il se doit :
Voici le tout:
la source
Python
Utilisation d'un dictionnaire délicat.
la source
return(' '.join([p,'tie' + 's'*(p[1]!='c'),q]))
obtiendra le verbe au temps correct.C #
Hypothèses
Les adversaires sont disposés dans un tableau de n éléments où les joueurs battent les (n-1) / 2 joueurs devant eux et perdent face aux (n-1) / 2 joueurs derrière eux. (Avec des listes de longueurs égales, le joueur perd face aux ((n-1) / 2 + 1) joueurs derrière eux)
Les actions des joueurs sont organisées dans un tableau où les actions dans la plage de [(indexOfPlayer * (n-1) / 2)] à [(indexOfPlayer * (n-1) / 2)) + (n-2) / 2 - 1 ].
Information additionnelle
CircularBuffer<T>
est un wrapper autour d'un tableau pour créer un tableau adressable "à l'infini". LaIndexOf
fonction renvoie l'index d'un élément dans les limites réelles du tableau.La classe
Exemple
la source
Python, une ligne
la source
.split(', ')
et ne devez pas brouiller les règles ensemble.Juste une petite chose que j'ai trouvée:
Ici, les règles est le fichier contenant toutes les règles qui ont été données.
la source
Python
Inspiré du code APL de @ Tobia.
Résultats:
la source
C ++
Un peu de test
la source
Javascript
la source
Javascript
Je vois que ce n'est pas un concours de golf, mais je jouais avec ce puzzle depuis un certain temps avant de trouver ce fil, alors voilà.
Voici une version js (standard) en 278 caractères:
Ou un utilisant les fonctionnalités E6 (ne fonctionne probablement que dans Firefox) en 259 caractères:
la source