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буде знайдений. Оскільки у нас цього немає в коді, ми можемо ігнорувати решту програми. По суті, це просто повторює те, що користувач вводить, ефективно пов'язуючи їх.