C'est un jeu à trois joueurs, jouez d'une seule main.
En même temps, chaque joueur montre sa main avec 0 à 5 doigts tendus.
Si tous les joueurs affichent le même type de nombre (pair ou impair), il n'y a pas de gagnant. Mais sinon, le joueur montrant un autre type gagne les deux autres.
P l a y e r s
A B C Winner
Even Even Even No winner
Odd Odd Odd No winner
Even Odd Odd Player A
Odd Even Even Player A
Even Odd Even Player B
Odd Even Odd Player B
Odd Odd Even Player C
Even Even Odd Player C
L'outil demandé pourrait utiliser des arguments (3 arguments sous forme numérique entre 0 et 5) ou STDIN (3 valeurs par ligne, séparées par des espaces).
Il n'est pas nécessaire de vérifier l'entrée: une entrée irrégulière peut produire une sortie inattendue.
Les arguments ou les valeurs en ligne est donnée de gauche à droite, du joueur A à joueur C .
La sortie ne doit contenir que A
, B
ou C
(en majuscule) ou la chaîne no one
(en minuscules, avec un espace régulier).
L'outil ne peut fonctionner qu'une seule fois ou comme filtre sur toutes les lignes d'entrée.
Victoire de code la plus courte.
Réponses:
APL (
3430)Explication:
2|⎕
: lire une ligne d'entrée, prendre le mod-2 de chaque nombre (donner une liste, ie1 0 1
)∘.=⍨
: comparer chaque élément du vecteur à chaque élément du vecteur, donnant une matrice+/
: additionne les lignes de la matrice, donnant pour chaque élément le nombre d'éléments auquel il était égal. S'il y en avait deux identiques et un différent, nous avons maintenant un vecteur comme2 1 2
où le1
dénote qui était différent. S'ils étaient tous les mêmes, nous obtenons3 3 3
.1⍳⍨
: trouver la position du1
. S'il n'y en a pas1
, cela renvoie un de plus que la longueur du vecteur, dans ce cas4
.⊃'ABC',⊂'no one'
: affiche la chaîne à l'index donné.la source
Mathematica,
45 43 4241 caractèresExemple:
Une autre solution avec
4342 caractères:la source
Powershell, 65
la source
Befunge-98,
61 5045 caractèresUtilise l'expression intelligente de Fors pour raser encore quelques personnages. Désormais monoligne (c'est-à-dire compatible avec Unfunge)! Lit jusqu'à ce qu'une partie soit gagnée; ajouter
@
à la fin pour un programme unique.Traite le mod d'entrée 2 comme un nombre binaire, comme avec ma réponse JS, puis s'appuie sur la recherche de AC et revient à `` personne '' si hors des limites (en testant si le caractère est ≥'A ', ce qui me permet pour utiliser le code à proximité comme données: D).Variation qui lit une ligne d'entrée, produit une sortie, lit une nouvelle ligne d'entrée, etc. jusqu'à ce qu'un jeu soit décidé (c'est-à-dire pas «personne»):
la source
APL, 30
Si je suis autorisé à modifier les variables système par configuration, 2 caractères peuvent être supprimés. (Plus précisément, modification de l'origine de l'index
⎕IO
à 0)Le bit crucial
Si nous représentons toutes les cotes de la même manière et que tous les événements sont identiques, alors une opération d'égalité par paire peut distinguer les 4 cas:
0 0
pour B gagne,0 1
pour les victoires A, etc.Explication
2|⎕
Prend entrée et mod 22=/
égalité par paire1+
Ajoutez 1 pour l'indexation (les tableaux APL sont basés sur 1 par défaut)'BA'('C',⊂'no one')
Tableau imbriqué⊃
Extrait l'élément correct du tableau imbriquéla source
C: 88 caractères
Malheureusement, C, comme toujours, nécessite beaucoup de déchets inutiles. Mais quand même, dans quelle autre langue peut-on écrire
=**++b+**(++
et cela signifie réellement quelque chose? Tout simplement sublime.Passez simplement trois nombres comme arguments, et voilà!
la source
*b[1]
etc. pour aucune différence de taille (bien qu'une certaine perte d'élégance .. :()s = "=**++b+**(++"
P en toute sincérité, wow, comment ça ... comment ça marche même? : Ob
, et imprimez la condition un peu, vous devriez être en mesure de le comprendre. : D (stylo et papier aide également, pour la table de vérité résultante)GolfScript (31 caractères)
Logique très simple: réduisez l'entrée modulo 2, puis triez une copie. L'élément du milieu du tableau trié est majoritaire, alors recherchez un indice différent (et donc minoritaire).
la source
Ruby (corps de fonction), 42 caractères
En supposant 3 arguments numériques
a
,b
etc
:Ruby (outil en ligne de commande), 61 caractères
La version 1 est disponible en 62 caractères:
Mais, en se basant sur la réponse de Darren Stone , la version 2 descend à 61 caractères:
la source
Rubis, 61 caractères
la source
['no one',?C,?B,?A]
==%w(no\ one C B A)
(2 caractères enregistrés).JavaScript (nœud), 87 caractères
Pour lancer la balle ... attend l'entrée comme trois arguments supplémentaires. Utilise le modèle suivant pour les entrées / sorties (
/
représente "personne"):la source
GolfScript,
363533 caractèresPrend l'entrée comme décrit à partir de STDIN. Vous pouvez également tester le code en ligne .
la source
Perl, 84 caractères.
<>=~/(\d)/g
analyse la ligne d'entrée en chiffres distinctsmap{$_%2
prend cette liste et calcule la valeur mod 2 (pair ou impair)oct"0b".join"",
prend cette liste de valeurs de mod, les joint en une chaîne, ajoute un spécificateur octal et convertit la chaîne en nombre.Fondamentalement, ce que j'ai fait était de créer une table de vérité, puis de la réorganiser soigneusement, j'ai donc eu une opération d'inversion
$x == 4
. Donc, si$x >=4
nous avons fait l'inversion[$x>=4?7-$x:$x]
que nous avons utilisée pour indexer dans le tableau('no one','C','B','A')
Ce n'est pas le code le plus court possible, mais ce n'est pas du bruit de ligne ... ce qui est remarquable en soi.
Perl: 74 caractères + 3 drapeaux = 77, exécuté avec
perl -anE '(code)'
Il s'agit d'une amélioration, en exploitant l'autosplit (le -a), disons (le -E), et enfin en découvrant ce qui n'allait pas avec la comparaison.
la source
>=4
au lieu de simplement>3
? +1 pour les conseils que'0b'.
je ne connaissais pas auparavantLisp commun,
11410670 caractèresÀ partir des trois valeurs, créez une paire représentant la différence de parité entre les éléments adjacents. Traitez cela comme un nombre binaire à indexer dans la liste des résultats.
Algorithme plus ancien:
la source
Python 2, 54
la source
Mathematica
100 9489Essai
la source
Haskell, 97
la source
R 67
la source
/usr/bin/R
), puis saisir le code ci-dessus.scan()
est ce qui vous demandera la saisie: un exemple serait de taper1[space]3[space]5[space][enter][enter]
et vous verrez la sortie correspondante (ici,no one
) imprimée à l'écran. Vous pouvez télécharger R ici: cran.r-project.org/mirrors.htmlC, 85 caractères
Pas aussi court que ma réponse Ruby mais j'en suis satisfait, compte tenu de la
main
cruauté.la source
Poisson - 41
Stole FireFly a répondu à l'improviste et l'a porté à fish car l'utilisation de registres dans fish nous permet de raser certains personnages. J'ai perdu quelques caractères si je n'avais pas l'opérateur horizontal si.
Cela prend les paramètres à travers des arguments.
la source
#@...<
à la fin pour enregistrer un caractère. Oh, et votre code actuel ressemble à 42 caractères pour moi, alors décrémentez ce nombre de caractères. :)Smalltalk, 128 caractères
envoyer
value:
avec une collectionla source
JavaScript (ES6) / CoffeeScript, 50 octets
Utilise la table de vérité selon la réponse de Firefly mais adopte une approche plus directe dans l'accès aux personnages:
Démo
la source
Python 3, 115
la source
Python 3, 114
la source
Deux méthodes différentes dans deux langues différentes + variantes -> 6 réponses
Il y a essentiellement 2 voies pour cette opération:
array
basé: Construit un nombre binaire de 3 chiffres, que prendre la réponse d'un tableaucount
basé: comptez pair et impair, et regardez s'il y a uncount == 1
Perl 71 (basé sur un tableau + variation)
Un de mes perl les plus courts:
s/(.)\s*/$1&1/eg;
transformer une chaîne comme1 2 3
en101
$==oct"0b".$_;
transformer le binaire en oct (identique à dec, moins de 8)$==$=>3?7-$=:$=;
si> 3
opér7-
. (De làno one
== 0)say$=?chr 68-$=:"no one"
sinon0
, affichez char à partir de value, sinon printno one
.Perl 71 (basé sur un tableau)
légèrement différent dans l'étape d'impression: la sortie est basée sur un «tableau» .
Perl 81 (basé sur le nombre)
Signification différente:
$c=A
Initialiser un compteur c avecA
.map{$a[$_%2]=$c++;$b[$_%2]++}split
Compteur b nombre pair et impair, a seul magasin que l'onsay$b[0]==1?$a[0]:
si même compteur == 1? également imprimer même joueur.$b[0]==2?$a[1]:
si même compteur == 2? également imprimer le lecteur impair .:"no one"
sinon imprimerno one
.Bash 85 (basé sur la baie)
Ceci est basé sur ma deuxième version Perl:
c=$((($1%2)<<2|($2&1)*2+($3%2)))
faire l'index pos.mod
and
*4
<<1
.((c>3))&&c=$((7-c))
si c> = 4 alors c = 7-c.o=()
déclarer un tableauecho ${o[c]}
basé sur un tableauBash 133 (basé sur le nombre)
a[$1&1]=A;a[$2&1]=B;a[$3&1]=C
stocker le joueur dans une variable a [pair] et un [impair]((b[$1&1]++));((b[$2&1]++));((b[$3&1]++))
compter pair / impair dans b.case $b in 1) echo ${a[0]}
dans le cas où même le compteur == 1 imprimer même le joueur2)echo ${a[1]};;
cas même compteur == 2 imprimer lecteur impair*)echo no one;esac
sinon imprimerno one
.Bash 133 (basé sur le nombre)
Même version, en utilisant la condition et le groupe de commandes de bash au lieu de
case ... esac
la source
Langue de Game Maker, 116
Ma nouvelle réponse repose largement sur la formule de FireFly:
L' ancien code compilé avec des variables non initialisées en 0, 183 caractères:
Edit # 1 - Code complètement différent
la source
Clojure, 116
la source
vba, 116
appeler avec
?z(1,2,3)
ou affecter à une variable avecq=z(1,2,3)
, ou même utiliser comme UDF dans Excel, et utiliser=z(1,2,3)
dans votre formule Excella source
Python 3, 80 caractères
Remarque: l'entrée doit être «1» [impair] ou «0» [pair]. Par exemple:
la source
split
etjoin
vous pouvez donc toujours utiliser votreint(...input...)
idée (très intelligente) . ?'0b'+
je pense, au moins cela me semble redondant etint(input(),2)
semble fonctionner dans un REPL.Java, 226 caractères
la source
C
10196C, probablement l'exemple le plus trivial (quelques opérations ternaires):
la source