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будет найден. Поскольку в коде этого нет, мы можем игнорировать остальную часть программы. По сути, это просто отражает все, что пользователь вводит, эффективно связывая их.