Python, brainfuck та JavaScript, 103 99 байт Так, під 100 байт!
0,[.5,];p=["rock","scissors","paper"]
1//1;lambda x:p[p.index(x)-1];"""
x=>p[-~p.indexOf(x)%3]//"""
У Python це визначає функцію, яка б'є вхід, у brainfuck це просто проста програма для котів, а в JavaScript вона втрачається. Ось версія, яка дає назви функціям f
, а також запитує на введення в JavaScript та Python 3:
0,[.5,];p=["rock","scissors","paper"]
1//1;f=lambda x:p[p.index(x)-1];"""
f=x=>p[-~p.indexOf(x)%3]//"""
1//1;"""
console.log(f(prompt())) // JavaScript
1//1"""; print(f(input())) # Python
Спробуйте в Інтернеті (старша версія): Python ,
brainfuck , JavaScript
Пояснення:
У Python """..."""
є багаторядковий рядок, який можна використовувати як будь-який маркер. Якщо розмістити його окремо, він взагалі нічого не робить. Я використовую це, щоб "приховати" код JavaScript від Python. Те ж саме стосується і (0,[.5,])
біта, це просто кортеж, що містить a 0
і список 5
, а також 1//1
частину, //
в Python є цілим поділом, але починає коментар у JavaScript. Ось код, позбавлений цих лексем:
p=["rock","scissors","paper"]
lambda x:p[p.index(x)-1]
Перший рядок досить зрозумілий, він просто визначає список, p
щоб містити різні варіанти носіїв-папір. Другий рядок визначає неназвану функцію, яка бере один аргумент, x
і повертає вибір, який перемагає x
(наприклад, попередній елемент в p
)
У JavaScript //
позначає однорядковий коментар. Як і в Python, одиночні жетони ігноруються, тому код, позбавлений цих лексем, є:
p=["rock","scissors","paper"]
x=>p[-~p.indexOf(x)%3]
Це працює аналогічно Python, спочатку встановивши список, p
який містить варіанти, а потім визначив анонімну функцію, яка дає програш. -~x
те саме, x+1
але з більш високим пріоритетом, щоб я міг пропустити парони.
У головному мовби кожен персонаж, крім цього +-,.[]<>
, видаляється, залишаючи це:
,[.,][,,]
[.-]
>[-.]
Команда ,
зчитує один байт введення, .
друкує його та [...]
циклічно, тоді як значення не дорівнює нулю. Тоді, що ця програма робить, це прочитати введення та друкувати його по одному символу за раз, поки символ не \0
буде знайдений. Оскільки у нас цього немає в коді, ми можемо ігнорувати решту програми. По суті, це просто повторює те, що користувач вводить, ефективно пов'язуючи їх.