Python, brainfuck и JavaScript, 103 99 байт Yay до 100 байт!
0,[.5,];p=["rock","scissors","paper"]
1//1;lambda x:p[p.index(x)-1];"""
x=>p[-~p.indexOf(x)%3]//"""
В Python это определяет функцию, которая превосходит ввод, в brainfuck это просто простая программа cat, а в 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
но с более высоким приоритетом, так что я могу пропустить парены.
В Brainfuck все персонажи, кроме +-,.[]<>
, удаляются, оставляя это:
,[.,][,,]
[.-]
>[-.]
Команда ,
читает один байт ввода, .
печатает его и [...]
зацикливает, пока значение не равно нулю. Затем эта программа читает входные данные и печатает их по одному символу за раз, пока символ не \0
будет найден. Поскольку в коде этого нет, мы можем игнорировать остальную часть программы. По сути, это просто отражает все, что пользователь вводит, эффективно связывая их.