Schreiben Sie ein Programm, das in drei Sprachen vielsprachig ist und Rock-Paper-Scissors spielt .
Die Eingabe für eine beliebige Programmversion ist immer eine der Zeichenfolgen rock
oder paper
oder scissors
.
In der ersten Sprache muss das Programm die Stein-Papier-Scheren-Auswahl ausgeben, die die Eingabe schlägt:
Input Output
rock paper
paper scissors
scissors rock
In der zweiten Sprache muss das Programm die Stein-Papier-Scheren-Auswahl ausgeben, die die Eingabe bindet:
Input Output
rock rock
paper paper
scissors scissors
In der dritten Sprache muss das Programm die Stein-Papier-Scheren-Auswahl ausgeben, die bei der Eingabe verloren geht:
Input Output
rock scissors
paper rock
scissors paper
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist höher gestimmte Antwort.
Die Eingänge und / oder Ausgänge können optional einen nachlauf Neue - Zeile haben , aber ansonsten nur sollten die Ebene sein rock
/ paper
/ scissors
Saiten. Sie Versalien verwenden können ROCK
, PAPER
, SCISSORS
falls gewünscht.
Sie dürfen nicht verschiedene Versionen derselben Sprache verwenden (z. B. Python 2 und 3).
Antworten:
Python, Brainfuck und JavaScript,
10399 Bytes Ja, unter 100 Bytes!In Python definiert dies eine Funktion, die die Eingabe schlägt, in Brainfuck ist es nur ein einfaches Katzenprogramm und in JavaScript verliert es. Hier ist eine Version, die den Funktionen einen Namen gibt
f
und außerdem zur Eingabe in JavaScript und Python 3 auffordert:Probieren Sie es online aus (ältere Version): Python , Brainfuck , JavaScript
Erläuterung:
In Python
"""..."""
ist dies eine mehrzeilige Zeichenfolge, die als beliebiges Token verwendet werden kann. Im Standalone-Modus macht es überhaupt nichts. Ich benutze dies, um den JavaScript-Code von Python "auszublenden". Das Gleiche gilt für das(0,[.5,])
Bit, es ist nur ein Tupel mit a0
und einer Liste von5
, und auch der1//1
Teil//
in Python ist eine Ganzzahldivision, startet jedoch einen Kommentar in JavaScript. Hier ist der Code, der von diesen Token befreit ist:Die erste Zeile ist ziemlich selbsterklärend, sie definiert lediglich die Liste,
p
in der die verschiedenen Auswahlmöglichkeiten für Stein-Papier-Scheren enthalten sind. Die zweite Zeile definiert eine unbenannte Funktion, die ein Argument aufnimmtx
und die Auswahl zurückgibt, die schlägtx
(z. B. das vorherige Element inp
).//
Bezeichnet in JavaScript einen einzeiligen Kommentar. Ähnlich wie bei Python werden einzelne Token ignoriert, sodass der Code, der von diesen Token befreit wird, wie folgt lautet:Dies funktioniert ähnlich wie in Python, indem zuerst die Liste so eingestellt wird
p
, dass sie die Auswahl enthält, und dann eine anonyme Funktion definiert wird, die die verlierende Auswahl ermöglicht.-~x
ist das selbe wiex+1
aber mit höherer Priorität damit ich die parens überspringen kann.In Brainfuck werden alle Zeichen mit Ausnahme der folgenden
+-,.[]<>
entfernt:Der Befehl
,
liest ein Byte der Eingabe,.
druckt es und[...]
durchläuft eine Schleife, während der Wert ungleich Null ist. Dieses Programm liest dann die Eingabe und druckt sie zeichenweise aus, bis das Zeichen\0
gefunden wird. Da wir das nicht im Code haben, können wir den Rest des Programms ignorieren. In der Tat spiegelt dies nur das wider, was der Benutzer eingibt, und bindet sie effektiv.quelle
x=>p[p.indexOf(x)+1]||"rock"//"""
könnte verkürzt werden aufx=>p[(p.indexOf(x)+1)%3]//"""
1//1,[.5,];
[]
in der zweiten Zeile verwenden können, um mehr Bytes zu sparen:1//1,;lambda x:p[p.index(x,0)+-1];"""
Python 2, Ruby, Retina,
9083 Bytes-7 Bytes dank Value Ink
Probieren Sie es online aus: Python , Ruby , Retina
Gewinnt in Ruby, verliert in Python und bindet in Retina. Diese Lösung nutzt die Tatsache, dass
0
in Ruby wahr, in Python aber falsch ist. Es nutzt auch die negative Indizierung in Python und Ruby.quelle
and
Hat Vorrang vor dem Operatoror
,s.index(0and STDIN.gets or input())
funktioniert also. Ist auchgets
ein Alias fürSTDIN.gets
in Ruby.V, Brain-Flak und Python 2,
97, 86, 81, 77, 75 BytesZwei Bytes gespart dank @ nmjcman101!
Das hat super Spaß gemacht! Diese Antwort gefällt mir sehr, weil sie einen coolen Überblick über die Sprachen bietet, die ich mag: Mein Lieblingseditor, meine nicht-esoterische Lieblingssprache und eine Sprache, die ich geschrieben habe. (Technisch gesehen ist Python 3 besser, aber Python 2 ist Golfspieler
¯\_(ツ)_/¯
).Probieren Sie es online!in Python (leicht modifiziert, damit Sie die Ausgabe sehen können), wodurch gedruckt wird, was an der Eingabe verloren geht.
Probieren Sie es online!in Brain-Flak, das druckt, was mit der Eingabe zusammenhängt.
Probieren Sie es online!In V wird gedruckt, was die Eingabe schlägt.
Da sich V auf nicht druckbare ASCII-Zeichen stützt, ist hier ein Hexdump:
Erläuterung:
Python
In Python ist dies sehr einfach. Wir definieren eine Liste der drei Elemente und geben das Element direkt vor der Eingabe zurück. Da
-1
das Element back zurückgegeben wird, funktioniert dies kreisförmig und alles ist sehr einfach und unkompliziert. Dann ist alles nach#
ein Kommentar.Brain-Flak
Dies ist auch bei Brain Flak äußerst einfach. Wenn wir gewinnen oder verlieren müssten, wären dies wahrscheinlich mehrere hundert Bytes. Dies funktioniert aber tatsächlich in 0 Bytes. Beim Programmstart wird die gesamte Eingabe in den Stapel geladen. Am Ende des Programms wird implizit der gesamte Stapel gedruckt.
Sobald wir alle irrelevanten Zeichen entfernt haben, sieht der Code Brain-Flak so aus
Das
1 + -1
ergibt einfach , aber da dieser Wert überhaupt nicht verwendet wird, ist es ein NOOP.V
Hier wird es etwas komisch. Das Benennen der Python-Liste
o
schien zwar willkürlich, ist es aber definitiv nicht.o
Öffnet in V eine neue Zeile und versetzt uns in den Einfügemodus. Dann,wird in den Puffer eingefügt. Danach lautet der relevante Code:
Erläuterung:
quelle
.split()
hängt stark vom Layout der Zeichen ab und ist leichter zu entfernen als die verschiedenen Klammern und Anführungszeichen, die in Ihrer Lösung angezeigt werden.xx
und durch ein ersetzen2
, um den Befehl zu machen,2f'
da der sowieso='
von demd*
späteren gelöscht wird . EDIT: könntest du es schaffent.
?CJam , Retina , PHP,
928685 BytesSollte in PHP mit dem
-r
Flag ausgeführt werden.Probieren Sie es in CJam
Probieren Sie es in Retina
Probieren Sie es in PHP
CJam
In CJam sind alle Großbuchstaben vordefinierte Variablen. In der ersten Zeile werden viele dieser Werte zusammen mit einigen String- und Array-Literalen auf den Stapel geschrieben. Einige Inkremente, Dekremente und andere Operationen werden ausgeführt.
Nach alledem wird der Stapel in ein Array (
]
) eingeschlossen und verworfen (;
), sodass nichts von all dem anderen wichtig ist. Das Hauptprogramm von CJam ist einfach:Retina
Das fühlt sich fast wie Schummeln an ...
Retina ersetzt jede Übereinstimmung des regulären Ausdrucks
ECHO["rock",0,"scissors","paper"][ORD(READLINE())%4];
in der Eingabe durch#];"scissors paper rock"S/rci=
. Was auch immer diese Regex übereinstimmt, sicherlich ist es nicht etwas in passenrock
,paper
oderscissors
, so dass keine Substitution vorgenommen wird. Die unveränderte Eingabe wird dann implizit ausgegeben.PHP
Die zweite Zeile ist ein Kommentar und wird ignoriert.
Die erste Zeile verwendet denselben Algorithmus wie der CJam-Teil, jedoch mit unterschiedlicher Reihenfolge der Ergebnisse.
quelle
C, C ++, Python;
227226216 BytesDank @Mat ein Byte gespeichert!
Definiert eine Funktion
f
in allen Sprachen. Siege in C, Unentschieden in Python, Verluste in C ++. Wie C ++ immer / sDer Teil zwischen dem
/*
und dem*/
ist ein Kommentarblock in C und C ++, während es sich um die Lambda-Funktionsdeklaration in Python handelt. Es vergleicht im Grunde das erste Zeichen des Funktionsarguments und gibt den Zug zurück, der mit diesem Buchstaben beginnt.Der Teil zwischen dem
"""
s ist eine mehrzeilige Zeichenfolge in Python, während es sich um die Funktionsdeklaration in C und C ++ handelt.sizeof'b'-1
stellt fest, ob die aktuelle Sprache C von C ++ ist. Es hat einen Wahrheitswert, wenn die Größe nicht 1 ist, andernfalls einen falschen Wert. In C sind Zeichenliterale vom Typ 4 Byte lang, während sie in C ++ vom Typ 1 Byte sind. Nachdem die Sprache herausgefunden wurde, wird nur der erste Buchstabe der Eingabe angezeigt und entsprechend ausgegeben.C
Probieren Sie es online!
C ++
Probieren Sie es online!
Python
Probieren Sie es online!
quelle
C ++, R, C;
252240226220209 BytesNutzt den Unterschied zwischen C und C ++, dass die Größe eines Zeichenliteral 4 Byte in C und 1 Byte in C ++ beträgt.
C ++:
Probieren Sie es online!
R:
Ergebnis:
C:
Probieren Sie es online!
quelle
Gawk, Retina, Perl; 68 Bytes
(mit einem Zeilenumbruch am Ende)
Gawk (Gewinner)
Einige Junk-Mails für Perl. Ändern Sie dann den Zeileninhalt (
$_
der derselbe ist,$0
weil die Variable_
undefiniert ist), je nachdem, ob ak
oder a enthalten istc
, und drucken Sie dann das Ergebnis aus. Ignoriere jede Warnung über Fluchtsequenzen, ich wollte das tun.Netzhaut (Krawatte)
Gleicher Trick wie bei Basic Sunset und anderen: Ersetzen Sie Übereinstimmungen einiger alberner regulärer Ausdrücke in der ersten Zeile durch den Inhalt der zweiten Zeile, und leiten Sie die Eingabe weiter.
Perl (Verlierer)
Lesen Sie eine Zeile und konvertieren Sie sie in Großbuchstaben. Wählen Sie dann ein Wort aus, das auf einem darin enthaltenen Buchstaben basiert, und drucken Sie das Ergebnis aus. Der erste und letzte Schritt werden mit umhüllt
eval
, um sie vor awk zu verbergen.Gawk, Retina
perl -p
; 57 BytesIch gebe dies als Bonus ein, da die Befehlszeilenumschaltung
perl -p
nach den üblichen Regeln auf dieser Site Teil des Programms sein soll, was es nicht zu einer Mehrsprachigkeit machen würde.Wieder mit einem letzten Zeilenvorschub für Retina . Diesmal wird durch
perl -p
das automatische Drucken der Ausgabe der Perl-Overhead erheblich reduziert. Ich kann die Anweisung$_
in awk einen impliziten Druck auslösen lassen .quelle
perl -p
ist leer, es muss sich um einen Fehler auf TIO handeln.> <>, Retina, Python 2:
144127123 Bytes1 Byte wurde dank @Loovjo durch Entfernen eines Leerzeichens eingespart
4 Bytes gespart dank @ mbomb007 durch Verwendung von
input
anstelle vonraw_input
Als Herausforderung in TNB veröffentlicht , habe ich mich entschlossen, diese Sprachkombination auszuprobieren.
> <>
Probieren Sie es online!
Die IP beginnt sich nach rechts zu bewegen.
Die möglichen Zeichen, die in die Eingabe übernommen werden, sind
PRS
(da das Programm nur das erste Zeichen akzeptiert). Ihre ASCII-Werte sind80
,81
und82
.Wenn der Input Rock wäre, dann würde folgendes passieren:
Andernfalls, wenn die Eingabe
SCISSORS
oder wärePAPER
, würde die IP auf Folgendes stoßen:Wenn die Eingabe war
PAPER
, dann:Ansonsten (wenn die Eingabe war
SCISSORS
):Retina
Probieren Sie es online!
In diesem Fall betrachtet Retina jedes Paar von zwei Zeilen als ein Paar von Übereinstimmung und Ersetzung. Beispielsweise wird versucht, alles, was mit der ersten Zeile übereinstimmt, durch die zweite Zeile zu ersetzen. Da jedoch die erste Zeile niemals übereinstimmt, wird sie niemals durch etwas ersetzt, wodurch die Eingabe erhalten bleibt.
Python 2
Probieren Sie es online!
Das Python-Programm erfordert Eingaben zwischen
"
s.Die ersten beiden Zeilen sind Kommentare in Python.
quelle
print
der letzten Zeile notwendig ist.input()
anstelle von verwendenraw_input()
.Ruby, Clojure, Common Lisp - 251 Bytes
Mehr lesbare Version mit Leerzeichen:
Clojure gewinnt immer, Ruby zieht immer, Common Lisp verliert immer.
Für Ruby ist alles in
'
s ein String. Es erstreckt sich über zwei Linien. Anschließend wird der[]
Operator mit einem Zeichenfolgenargument verwendet, das die Zeichenfolge selbst zurückgibt, wenn sie in der Zeichenfolge vorhanden ist. Das Ergebnis wird ausgedruckt, Ruby spiegelt nur die Eingabe.Die zweite Zeile ist ein Kommentar für Clojure und Common Lisp. Eine Reihe von
eval
undquote
muss verwendet werden, da Clojure sicherstellen muss, dass alle Symbole gültig sind. Es wäre schön, mehr Code wiederzuverwenden, aber selbstnth
Funktionen haben in diesen Sprachen unterschiedliche Signaturen. Grundsätzlich wird Clojureif()
mit true ausgewertet und geht zum ersten Zweig, wenn eine Hash-Map möglicher Varianten mit einem aus stdin gelesenen Argument aufgerufen wird. Common Lisp geht zum zweiten Zweig, findet die Position des Arguments von stdin in der Liste und gibt das entsprechende Element aus der resultierenden Liste zurück.Ich denke, Common Lisp kann mehr gespielt werden.
Sehen Sie es online: Ruby , Common Lisp , Clojure
quelle
Scala, Javascript und Ook, 167 Bytes
Probieren Sie es in Scala aus Probieren Sie es in Javascript aus Probieren Sie die Brainfuck-Version von Ook aus
Scala - gewinnt
Javascript - verliert
Ook! - Bindungen
Der Ook-Teil ist das einfache Brainfuck-Katzenprogramm,
,[.,]
das nach Ook übersetzt wurde.quelle
a[(a.indexOf(s)+2)%3]
dann verwenden, müssen Sie nicht einstellena[-1]="rock"
. Können Sie den Ook-Code auch nicht in die JavaScript-Zeichenfolge einfügen?