> <>, Retina, Python 2: 144 127 123 byte
Lưu 1 byte nhờ @Loovjo bằng cách xóa khoảng trắng
4 byte được lưu nhờ @ mbomb007 bằng cách sử dụng input
thay vìraw_input
#v"PAPER"v?%4-2{"SCISSORS"v?%2:i
#>ooooo; >oooooooo<"ROCK"~<
a="KRS".index(input()[-1])
print["SCISSORS","ROCK","PAPER"][a]
Đăng trong TNB như một thách thức , tôi quyết định thử kết hợp các ngôn ngữ này.
> <>
Hãy thử trực tuyến!
IP bắt đầu di chuyển sang phải.
# Reflect the IP so that it now moves left and it wraps around the grid
i: Take one character as input and duplicate it
Các ký tự có thể sẽ được đưa vào đầu vào là PRS
(vì chương trình chỉ lấy ký tự đầu tiên). Giá trị ASCII của chúng là 80
, 81
và 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
Nếu đầu vào là rock, thì đây là điều sẽ xảy ra:
< 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.
Mặt khác, nếu đầu vào là SCISSORS
hoặc PAPER
, đây là những gì IP sẽ gặp phải:
"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
Nếu đầu vào là PAPER
, thì:
>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.
Mặt khác (nếu đầu vào là SCISSORS
):
"REPAP" Push these characters onto the stack
v>ooooo; Output them and exit the program (without any errors).
Võng mạc
Hãy thử trực tuyến!
Trong trường hợp này, Retina coi mỗi cặp hai dòng là một cặp khớp và thay thế. Ví dụ, nó cố gắng thay thế bất cứ thứ gì khớp với dòng đầu tiên bằng dòng thứ hai, nhưng vì dòng đầu tiên không bao giờ khớp, nên nó không bao giờ thay thế nó bằng bất cứ thứ gì, do đó bảo toàn đầu vào.
Con trăn 2
Hãy thử trực tuyến!
Chương trình Python yêu cầu đầu vào được đặt ở giữa "
s.
Hai dòng đầu tiên là các bình luận trong 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