Ecrivez un programme polyglotte en trois langues qui joue du rock-papier-ciseaux .
L'entrée pour toute version du programme est toujours l'une des chaînes rock
ou paper
ou scissors
.
Dans la première langue, le programme doit indiquer le choix pierre-papier-ciseaux qui bat l'entrée:
Input Output
rock paper
paper scissors
scissors rock
Dans la deuxième langue, le programme doit indiquer le choix pierre-papier-ciseaux qui lie l’entrée:
Input Output
rock rock
paper paper
scissors scissors
Dans la troisième langue, le programme doit indiquer le choix pierre-papier-ciseaux qui perd à l'entrée:
Input Output
rock scissors
paper rock
scissors paper
Le code le plus court en octets gagne. Tiebreaker est une réponse plus votée.
Les entrées et / ou sorties peuvent éventuellement avoir une nouvelle ligne de fuite , mais autrement , ne devraient être la plaine rock
/ paper
/ scissors
cordes. Vous pouvez utiliser les majuscules ROCK
, PAPER
, SCISSORS
si on le souhaite.
Vous ne pouvez pas utiliser différentes versions du même langage (par exemple, Python 2 et 3).
Réponses:
Python, brainfuck et JavaScript,
10399 octets Yay moins de 100 octets!En Python, cela définit une fonction qui bat l'entrée, dans le brainfuck, ce n'est qu'un simple programme cat, et dans JavaScript, il perd. Voici une version qui donne un nom aux fonctions
f
, et demande également une entrée en JavaScript et en Python 3:Essayez-le en ligne (ancienne version): Python , brainfuck , JavaScript
Explication:
En Python,
"""..."""
est une chaîne multiligne pouvant être utilisée comme n'importe quel jeton. Lorsque placé seul, il ne fait rien du tout. J'utilise ceci pour "cacher" le code JavaScript de Python. La même chose vaut pour le(0,[.5,])
bit, c'est juste un tuple contenant un0
et une liste5
, et aussi la1//1
partie,//
en Python est une division entière, mais commence un commentaire en JavaScript. Voici le code dépouillé de ces jetons:La première ligne est assez explicite, elle définit juste la liste
p
pour contenir les différents choix de ciseaux-papier-pierre. La deuxième ligne définit une fonction non nommée qui prend un argument,x
et rend le choix qui batx
(par exemple, l’élément précédentp
)En JavaScript,
//
désigne un commentaire d'une seule ligne. De la même manière que Python, les jetons simples sont ignorés. Le code dépouillé de ces jetons est:Cela fonctionne de manière similaire à Python, en définissant d'abord la liste
p
pour qu'elle contienne les choix, puis en définissant une fonction anonyme qui donne le choix à perdre.-~x
est le même quex+1
mais avec une priorité plus élevée afin que je puisse sauter les parenthèses.Dans brainfuck, tous les personnages sauf
+-,.[]<>
sont supprimés, laissant ceci:La commande
,
lit un octet d’entrée, l’.
imprime et la[...]
boucle tandis que la valeur est différente de zéro. Ce programme lit ensuite l'entrée et l'imprime caractère par caractère jusqu'à ce qu'il\0
soit trouvé. Comme nous n'avons pas cela dans le code, nous pouvons ignorer le reste du programme. En fait, cela fait écho à tout ce que l'utilisateur tape, ce qui le lie efficacement.la source
x=>p[p.indexOf(x)+1]||"rock"//"""
pourrait être raccourci àx=>p[(p.indexOf(x)+1)%3]//"""
1//1,[.5,];
[]
de la deuxième ligne pour économiser davantage d'octets:1//1,;lambda x:p[p.index(x,0)+-1];"""
Python 2, Ruby, Retina,
9083 octets-7 octets grâce à Value Ink
Essayez-le en ligne: Python , Ruby , Retina
Victoires en Ruby, perd en Python et égalités en Retina. Cette solution utilise le fait que ce
0
soit la vérité en Ruby mais falsey en Python. Il utilise également l'indexation négative à la fois en Python et en Ruby.la source
and
a priorité sur l'opérateuror
, doncs.index(0and STDIN.gets or input())
fonctionne. En outre,gets
est un alias pourSTDIN.gets
Ruby.V, Brain-flak et Python 2,
97, 86, 81, 77, 75 octetsDeux octets enregistrés grâce à @ nmjcman101!
C'était super amusant! J'aime beaucoup cette réponse parce que c'est un bon aperçu des langues que j'aime bien: mon éditeur préféré, mon langage préféré non ésotérique et un langage que j'ai écrit. (Techniquement, Python 3 est meilleur, mais Python 2 est plus golfeur donc
¯\_(ツ)_/¯
).Essayez-le en ligne! en Python (légèrement modifié pour que vous puissiez voir la sortie), qui affiche ce qui perd à l’entrée.
Essayez-le en ligne! dans Brain-Flak, qui imprime ce qui est lié à l’entrée.
Essayez-le en ligne! en V, qui imprime ce qui bat l'entrée.
Puisque V repose sur des caractères ASCII non imprimables, voici un hexdump:
Explication:
Python
En python, c'est très simple. Nous définissons une liste des trois éléments et renvoyons l'élément juste avant l'entrée. Depuis
-1
renvoie l'élément dorsal, cela fonctionne de manière circulaire, et tout cela est très simple et facile. Ensuite, tout ce qui suit#
est un commentaire.Flak cérébrale
Ceci est également extrêmement simple dans le cerveau-flak. Si nous devions gagner ou perdre, cela représenterait probablement plusieurs centaines d'octets. Mais cela fonctionne réellement sur 0 octet. Au début du programme, toutes les entrées sont chargées dans la pile. A la fin du programme, toute la pile est implicitement imprimée.
Une fois que nous supprimons tous les caractères non pertinents, le code cerveau-flak voit est
Ce qui est simplement évalué à
1 + -1
, mais puisque cette valeur n'est pas utilisée du tout, c'est un NOOP.V
Voici où ça devient un peu bizarre. Nommer la liste de python
o
peut sembler arbitraire, mais ce n'est certainement pas le cas. En V,o
ouvre une nouvelle ligne et nous met en mode insertion. Ensuite,est inséré dans le tampon. Après cela, le code pertinent est:
Explication:
la source
.split()
est plus facile de s'en débarrasser que les diverses parenthèses et citations qui apparaissent dans votre solution.xx
et le remplacer par un2
pour faire la commande2f'
car le='
sera effacé par led*
plus tard de toute façon. EDIT: vous pourriez être en mesure de le fairet.
?CJam , Retina , PHP,
928685 octetsDevrait être exécuté en PHP en utilisant le
-r
drapeau.Essayez-le dans CJam
Essayez-le dans la rétine
Essayez-le en PHP
CJam
Dans CJam, toutes les lettres majuscules sont des variables prédéfinies. Sur la première ligne, plusieurs de ces valeurs sont placées dans la pile, ainsi que des littéraux de chaîne et de tableau. Certaines incréments, décréments et autres opérations sont effectués.
Après tout cela, la pile est encapsulée dans un tableau (
]
) et dans discarded (;
), donc rien de tout cela ne compte plus. Le programme principal de CJam est simplement:Rétine
Cela ressemble presque à de la triche ...
Retina substituera toute correspondance de l'expression rationnelle
ECHO["rock",0,"scissors","paper"][ORD(READLINE())%4];
dans l'entrée avec#];"scissors paper rock"S/rci=
. Quelle que soit cette expression régulière, il ne correspond certainement rien dansrock
,paper
ouscissors
, si aucune substitution est faite. L'entrée non modifiée est alors implicitement sortie.PHP
La deuxième ligne est un commentaire, donc il est ignoré.
La première ligne utilise le même algorithme que la partie CJam, mais avec un ordre de résultats différent.
la source
C, C ++, Python;
227226216 octetsEnregistré un octet grâce à @Mat!
Définit une fonction
f
dans toutes les langues. Victoires en C, liens en Python, perd en C ++. Comme C ++ toujours / sLa partie entre
/*
et*/
est un bloc de commentaires en C et C ++, tandis que c'est la déclaration de la fonction lambda en Python. En gros, il compare le premier caractère de l'argument de la fonction et renvoie le mouvement qui commence par cette lettre.La partie entre les
"""
s est une chaîne multiligne en Python alors que c'est la déclaration de fonction en C et C ++.sizeof'b'-1
détermine si le langage actuel est le C ou C ++. Il a une valeur de vérité si la taille est autre que 1, une valeur de fausseté sinon. En C, les littéraux sont de type long sur 4 octets tandis qu'en C ++, ils sont d'un type à un octet. Ensuite, une fois que le langage est compris, il se contente de regarder la première lettre de l’entrée et les sorties en conséquence.C
Essayez-le en ligne!
C ++
Essayez-le en ligne!
Python
Essayez-le en ligne!
la source
C ++, R, C;
252240226220209 octetsUtilise la différence entre C et C ++, à savoir que la taille d'un littéral de caractère est de 4 octets en C et d'un octet en C ++.
C ++:
Essayez-le en ligne!
R:
Résultat:
C:
Essayez-le en ligne!
la source
Gawk, Retina, Perl; 68 octets
(avec une nouvelle ligne à la fin)
Gawk (gagnant)
Certains objets indésirables pour Perl, puis modifient le contenu de la ligne (
$_
ce qui revient au même$0
parce que la variable_
est indéfinie) selon qu’elle contient unk
ou unc
, puis affiche le résultat. Ignorer tout avertissement concernant les séquences d'échappement, je voulais faire cela.Rétine (cravate)
Même astuce que Basic Sunset et autres: remplacez les correspondances de certaines expressions rationnelles stupides sur la première ligne par le contenu de la deuxième ligne, passez donc l'entrée.
Perl (perdant)
Lisez une ligne et convertissez-la en majuscule, puis choisissez un mot en fonction de la lettre qu'elle contient et imprimez le résultat. La première et la dernière étape sont encapsulées en utilisant
eval
pour les cacher de awk.Gawk, la rétine
perl -p
; 57 octetsJ'écris ceci comme un bonus car le commutateur de ligne de commande
perl -p
est supposé faire partie du programme selon les règles habituelles de ce site, ce qui en ferait un site non polyglotte.Encore une fois avec une nouvelle ligne finale pour Retina . Cette fois, avec l’
perl -p
impression automatique de la sortie, le temps système perl est considérablement réduit. Je peux laisser la tâche$_
déclencher une impression implicite dans awk .la source
perl -p
est vide, il doit s'agir d'un bogue sur TIO.> <>, Retina, Python 2:
144127123 octets1 octet enregistré grâce à @Loovjo en supprimant un espace
4 octets enregistrés grâce à @ mbomb007 en utilisant à la
input
place deraw_input
Publié dans TNB comme un défi , j'ai décidé d'essayer cette combinaison de langues.
> <>
Essayez-le en ligne!
La propriété intellectuelle commence à se déplacer correctement.
Les caractères possibles qui seront pris dans l’entrée sont
PRS
(puisque le programme ne prend que le premier caractère). Leurs valeurs ASCII sont80
,81
et82
.Si l'entrée était rock, voici ce qui se passerait:
Sinon, si l'entrée était
SCISSORS
ouPAPER
, voici ce que l'IP rencontrerait:Si l'entrée était
PAPER
, alors:Sinon (si l'entrée était
SCISSORS
):Rétine
Essayez-le en ligne!
Dans ce cas, Retina considère chaque paire de deux lignes comme une paire d’appariement et de substitution. Par exemple, il tente de remplacer tout ce qui correspond à la première ligne par la deuxième ligne, mais comme la première ligne n’est jamais appariée, il ne la remplace jamais par rien, préservant ainsi l’entrée.
Python 2
Essayez-le en ligne!
Le programme Python nécessite que les entrées soient placées entre
"
s.Les deux premières lignes sont des commentaires en Python.
la source
print
la dernière ligne est nécessaire.input()
au lieu deraw_input()
.Ruby, Clojure, Common Lisp - 251 octets
Version plus lisible avec des espaces:
Clojure gagne toujours, Ruby dessine toujours, Common Lisp perd toujours.
Pour Ruby, tout ce qui est à l'intérieur
'
est une chaîne. Il s'étend sur deux lignes. Ensuite, il utilise[]
opérateur avec un argument de chaîne qui renvoie la chaîne elle-même si elle est présente dans la chaîne. Le résultat est imprimé, Ruby ne fait que refléter l'entrée.La deuxième ligne est un commentaire pour Clojure et Common Lisp. Un tas de
eval
etquote
doit être utilisé parce que Clojure doit s’assurer que tous les symboles sont valides. Ce serait bien de réutiliser plus de code mais même lesnth
fonctions ont des signatures différentes dans ces langues. Fondamentalement, Clojure estif()
évalué à true et passe à la première branche lorsqu'une mappe de hachage de variantes possibles est appelée avec un argument lu à partir de stdin. Common Lisp va à la deuxième branche, il trouve la position de l'argument à partir de stdin dans la liste et retourne l'élément correspondant à partir de la liste résultante.Je suppose que la partie Common Lisp peut être jouée plus souvent.
Voir en ligne: Ruby , Common Lisp , Clojure
la source
Scala, Javascript et Ook, 167 octets
Essayez-le dans Scala Essayez-le en Javascript Essayez la version brainfuck de Ook
Scala - gagne
Javascript - perd
Ook! - liens
La partie Ook est un simple programme de
,[.,]
félins félins traduit en Ook.la source
a[(a.indexOf(s)+2)%3]
alors vous n'avez pas besoin de définira[-1]="rock"
. Aussi, ne pouvez-vous pas mettre le code Ook dans la chaîne JavaScript aussi?