> <>, Retina, Python 2: 144 127 123 bytes
1 byte guardado gracias a @Loovjo al eliminar un espacio
4 bytes guardados gracias a @ mbomb007 usando en input
lugar deraw_input
#v"PAPER"v?%4-2{"SCISSORS"v?%2:i
#>ooooo; >oooooooo<"ROCK"~<
a="KRS".index(input()[-1])
print["SCISSORS","ROCK","PAPER"][a]
Publicado en TNB como un desafío , decidí probar esta combinación de idiomas.
> <>
Pruébalo en línea!
La IP comienza a moverse hacia la derecha.
# Reflect the IP so that it now moves left and it wraps around the grid
i: Take one character as input and duplicate it
Los posibles caracteres que se tomarán en la entrada son PRS
(ya que el programa solo toma el primer carácter). Sus valores ASCII son 80
, 81
y 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
Si la entrada fue rock, entonces esto es lo que sucedería:
< 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.
De lo contrario, si la entrada fue SCISSORS
o PAPER
, esto es lo que la IP encontraría:
"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
Si la entrada fue PAPER
, entonces:
>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.
De lo contrario (si la entrada fue SCISSORS
):
"REPAP" Push these characters onto the stack
v>ooooo; Output them and exit the program (without any errors).
Retina
Pruébalo en línea!
En este caso, Retina considera cada par de dos líneas como un par de partido y sustitución. Por ejemplo, intenta reemplazar cualquier cosa que coincida con la primera línea con la segunda línea, pero como la primera línea nunca coincide, nunca la sustituye por nada, preservando así la entrada.
Python 2
Pruébalo en línea!
El programa Python requiere que se ingrese información entre "
s.
Las dos primeras líneas son comentarios en 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