> <>, Retina, Python 2: 144 127 123 Bytes
1 Byte wurde dank @Loovjo durch Entfernen eines Leerzeichens eingespart
4 Bytes gespart dank @ mbomb007 durch Verwendung von input
anstelle vonraw_input
#v"PAPER"v?%4-2{"SCISSORS"v?%2:i
#>ooooo; >oooooooo<"ROCK"~<
a="KRS".index(input()[-1])
print["SCISSORS","ROCK","PAPER"][a]
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.
# Reflect the IP so that it now moves left and it wraps around the grid
i: Take one character as input and duplicate it
Die möglichen Zeichen, die in die Eingabe übernommen werden, sind PRS
(da das Programm nur das erste Zeichen akzeptiert). Ihre ASCII-Werte sind 80
, 81
und 82
.
2% Take the modulo 2 of the character. Yields 0, 1, 0 for P, R, S respectively
?v If this value is non-zero (ie the input was ROCK), go down, otherwise skip this instruction
Wenn der Input Rock wäre, dann würde folgendes passieren:
< Start moving to the left
~ Pop the top most value on the stack (which is the original value of R and not the duplicate)
"KCOR" Push these characters onto the stack
< Move left
oooo Output "ROCK" as characters (in turn these characters are popped)
o Pop the top value on the stack and output it; but since the stack is empty, the program errors out and exits promptly.
Andernfalls, wenn die Eingabe SCISSORS
oder wäre PAPER
, würde die IP auf Folgendes stoßen:
"SROSSICS" Push these characters onto the stack
{ Shift the stack, so the the original value of the first char of the input would come to the top
2-4% Subtract 2 and take modulo 4 of the ASCII-value (yields 2, 0 for P, S respectively)
?v If it is non-zero, go down, otherwise skip this instruction
Wenn die Eingabe war PAPER
, dann:
>ooooooooo Output all characters on the stack (ie "SCISSORS")
< Start moving left
o Pop a value on the stack and output it; since the stack is empty, this gives an error and the program exits.
Ansonsten (wenn die Eingabe war SCISSORS
):
"REPAP" Push these characters onto the stack
v>ooooo; Output them and exit the program (without any errors).
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.
a="KRS".index(input()[-1]) # Get the index of the last character of the input in "KRS"
print["SCISSORS","ROCK","PAPER"][a] # Print the ath index of that array