Ты знаешь этот язык?

34

Задача:

Ваша задача состоит в том, чтобы, учитывая предыдущие представления и сам ввод, вывести язык, на котором они написаны, в следующем формате:

Скажем, первая программа на Ruby. Он должен выводить 1, потому что Ruby - это 1первый язык, используемый в этой задаче. Пример программы:

a=gets
puts 1

Когда задано в качестве ввода, оно возвращается 1.

Следующая программа может быть на Python. Он должен выводить 2, потому что Python - это 2второй язык, используемый в тесте. Пример программы:

print(1 if input()[0]=="a"else 2)

Учитывая первое представление, он выводит 1, а сам дает свои выводы 2.

Вам разрешено повторять языки, но нельзя отправлять ответ на языке предыдущего ответа.

Например, если третья программа написана на Ruby, она должна выводить с 1учетом первой программы и самой себя (потому что Ruby является используемым 1языком st), а с учетом второй программы она должна выводить 2.


Правила:

  • Если в nнастоящее время есть ответы на вопросы, должны быть как минимум floor(n / 3)разные языки. Любая заявка, которая нарушает это правило, дисквалифицируется.
  • Никакие два «соседних ответа» (например, ответ nи ответ n+1) не могут использовать один и тот же язык.
  • Разные версии языка не считаются разными языками (поэтому Python 2 == Python 3).
  • Ответы должны принимать предыдущие материалы полностью в качестве входных данных.
  • Первая заявка должна принять участие.
  • Вы не можете отправить несколько ответов подряд.
  • «Повторные ответы» (ответы с тем же кодом, что и в предыдущем представлении) не допускаются.
  • Ответам не разрешается проходить количество выделенных байтов этого ответа - для получения более подробной информации см. «Количество выделенных байтов».

Выделенный счетчик байтов:

Для каждого номера ответа nназначается количество байтов для этого ответа 45 + 5n.


Форматирование ответа:

Отформатируйте ваш ответ так:

# {answer no.}, {language}
{program}
This prints:
- `1` in answer(s) {all answers using 1st language, with links}
- `2` in answer(s) {all answers using 2nd language, with links}
...
{optional explanation}

Для списков ответов сделайте это:

- `1` in answers [1]({link to answer}), [3]({link to answer})...

Подсчет очков:

Первый ответ, чтобы выжить после 7 дней без каких-либо действительных представлений после этого объявляется победителем.

clismique
источник
1
Может ли один пользователь опубликовать два последовательных представления подряд?
Kritixi Lithos
Таким образом, я могу повторить, как есть, без каких-либо изменений, мой ответ № 6 как ответ № 8, после чего Мартин мог повторить свой номер № 7 (если я не ошибаюсь) и т. Д. До ответа № 15 до достижения установленного порога (т.е. floor(n / 3)языки). Я предполагаю, что это не намеренное поведение.
plannapus
@plannapus Я тоже это заметил. Конечно, ваша цель - получить последний ответ, поэтому, зная, что у меня тоже будет тривиальное продолжение, вы можете усложнить ситуацию (о которой я не думал до того, как опубликовать свой собственный ответ).
Мартин Эндер
3
Количество выделенных байтов растет в геометрической прогрессии, и, вероятно, эти проблемы не прекратятся, пока у нас не кончатся языки, а не потому, что код станет слишком длинным.
Вольфрам
2
IMO разумный фиксированный лимит (например, 384 или 256 байт), сработал бы лучше и вызвал бы жесткую конкуренцию в конце.
Цеппелин

Ответы:

4

26. > <> (язык 12), 164 байта

Моя первая в мире программа в> <>! Это 156 символов, но 164 байта в UTF-8.

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
{:}&1+&=?v
      .&0/
v+!?='>'i41i
v+?='y'i47
v+?=' 'i12
v+?=' 'i24
v4
v6
v7
v8
v9
va
  v?(0:i
v1
n;\b1laa*)?+
/"^mwfPes{'tc"i2&01.;

Это печатает:

  • 1с ответами 1 , 5 , 7 , 9 и 14 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 , 12 и 15 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответами 10 , 17 , 20 , 22 и 25 (Баш).

  • 7с ответами 11 и 19 (Mathematica).

  • 8с ответом 13 (Python).

  • 9с ответом 16 (Perl).

  • 10с ответами 18 , 21 и 23 (C / C ++).

  • 11с ответом 24 (зш).

  • 12 с этим ответом (> <>).

Попробуйте онлайн!

Объяснение:

Первая строка - просто ответ № 5. Он ничего не делает, но отправляет указатель инструкции в нижнюю строку. /поворачивает рыбу вправо, и персонажи ^mwfPes{'tcкладутся в стек. Один символ ввода читается ( i). (Давайте назовем этот символ Cдля экспозиции.) 2 помещается в регистр ( 2&). Затем мы переходим к началу второй строки (строка 1) ( 01.).

Эта строка сравнивается Cс каждым символом в стеке. Копия Cхранится в нижней части стопки. {вращает стек так, что Cнаходится сверху; :дублирует это; }поворачивает копию обратно на дно. Мы увеличиваем значение register ( &1+&), пока не будет найдено совпадение. (Таким образом, если C«c», регистр содержит 3, когда совпадение найдено; если C«t», регистр содержит 4 и т. Д.) Затем мы переходим к первому символу номера строки в регистре ( 0&.) ,

Строки с 3 по 13 имеют дело с тем, что делать, когда Cc, t, ', {и т. Д. Соответственно. Указатель инструкций перемещается назад, когда мы прыгаем; он приземляется на первый символ данной строки, но после прыжка он продвигает галочку перед выполнением, поэтому он начинает выполняться с конца строки, возвращаясь назад. Каждая строка помещает соответствующий номер языка в стек, а затем отправляет рыбу в nинструкцию, которая выводит ее.

^это самый сложный случай из-за моей собственной подлости с первой строкой этого ответа. Строка 13 читает ввод до EOF. Затем он направляется вниз к строке 15, которая сравнивает длину стека ( l) со значением 100 ( aa*). Если это длиннее ( )?), мы добавляем + bи 1получаем 12, этот язык; в противном случае 1 остается на вершине стека.

Ник Маттео
источник
23

1. Сетчатка , 0 байт

Попробуйте онлайн!

Пустая программа печатает, 1когда задан пустой ввод (т.е. сам), потому что она подсчитывает, как часто пустое регулярное выражение соответствует вводу (что всегда 1+length(input)).

Мартин Эндер
источник
12

2. Brain-Flak , 22 байта

{<>(())(<>)}{}(<>{}())

Попробуйте онлайн!

Это проверяет вершину стека и помещает единицу в противоположный стек, если он не равен нулю. Затем он увеличивает и возвращает противоположный стек. Это возвращает 1 для пустой программы и 2 для всего остального.

Поскольку стеки в Brain-Flak по умолчанию равны нулю, пустая программа будет иметь ноль в верхней части стека, в то время как любая другая программа (кроме программ, заканчивающихся нулевыми символами) будет иметь истинное значение. Это означает, что мы можем запустить очень простую программу if в стеке ввода.

{      (<>)}{}              #If not zero
 <>(())                     #Push one to the other stack
              (<>{}())      #Switch to other stack and increment by one
Мастер пшеницы
источник
Не могли бы вы отредактировать этот ответ? Я случайно проголосовал за это :)
Конор О'Брайен
9

3. APL, 7 байт

' {'⍳⊃⍞

Объяснение:

      ⍞  read from the keyboard
     ⊃   first item of list, or space if empty
' {'⍳    index into the string ' {', giving N+1 (=3) if not found
Мэринус
источник
8

10. Bash (+ coreutils) [язык 6], 4474 байта

Фиксированная версия (возвращает идентификатор языка)

expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G

Примечание: это ожидает завершающий перевод строки после введенного текста программы

дирижабль
источник
7

9. Сетчатка (язык 1), 20 байт

$|}\{|[:'][^]']|,\b1

Попробуйте онлайн!

Как и plannapus, я решил пойти на переписку, чтобы немного изменить ситуацию, что также привело к значительному сокращению кода (я думаю, что модификация моего последнего ответа для учета последних в plannapus могла бы занять около 32 байт).

объяснение

Как и мои другие ответы, это просто подсчитывает количество различных совпадений регулярных выражений, но делает это намного эффективнее:

  • $соответствует концу строки. Это всегда работает, даже если совпадение проходит до конца строки, так что это дает нам базовую линию 1для всех входных данных.
  • }\{находит одно совпадение во второй программе (Brain-Flak), увеличивая счет до 2. Обратная косая черта не обязательна для экранирования, но предотвращает сопоставление этой части регулярного выражения.
  • [:'][^]']на самом деле довольно необычно. Единственной целью является подсчет двух 'в программе APL (язык 3) и трех :в программе JavaScript (язык 4), но мы должны предотвратить сопоставление этой части. Таким образом , мы также гарантируем , что следующий символ не является ни ', ни ](потому что те не появляются после того, как те , которые мы действительно хотим , чтобы соответствовать, но они появляются в этой программе здесь).
  • 'От предыдущей части уже вызывает один матч в программах R, так что нам нужно еще три. Подстрока ,1появляется в обоих из них три раза, и ни в каких других программах. Мы сопоставляем его, добавляя тавтологическую границу между ними, ,\b1чтобы предотвратить повторное совпадение.
Мартин Эндер
источник
Хм, только что понял, что это совсем не мешает ответам R, потому что 1это просто вывод по умолчанию. Я должен сделать что-то об этом со следующим ответом.
Мартин Эндер
7

18. C (язык 10), 121 байт

Это стандарт C89 или C90. Он работает с clang или gcc в Try It Online.

main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}

Это печатает:

  • 1с ответами 1 , 5 , 7 , 9 и 14 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 , 12 и 15 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответами 10 и 17 (Баш).

  • 7с ответом 11 (Mathematica).

  • 8с ответом 13 (Python).

  • 9с ответом 16 (Perl).

  • 10 с этим ответом (С).

Вот драйвер bash, который запускает его со всеми 18 ответами на Попробуйте онлайн!

Ungolfed эквивалент (646 байт):

#include <string.h>
#include <stdio.h>
int main(){
    char *v=" ^{ s ePfwm", b[999];
    gets(b); /* buffer overrun if more than 998 characters in the input.
                could be a problem if we get to 191 answers */
    char *c = strchr(v, b[0]); /* Find first character of input in v, or null */
    int n = strlen(b);
    if (!n) {
        printf("1");
    } else if (c) {
        printf("%d", c-v); /* Index of first character of input in v */
    } else if (n > 99) {
        printf("4");
    } else if (n > 60) {
        printf("5");
    } else if (n > 15) {
        printf("1");
    } else {
        printf("3");
    }
    return 0;
}
Ник Маттео
источник
6

5. Retina (язык 1), 23 байта

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}

Попробуйте онлайн! (Проверяет все возможные входные данные.)

Подсчитывает совпадения разных вещей на входе:

  • ^$ соответствует входной строке, то есть первый ответ один раз.
  • {} соответствует самому себе, которых во второй программе два, и один в этой.
  • (?![⊂⍴])[⊂-⍴]соответствует символам с кодовыми 8834 до 9076, эксклюзив , который находит три матча в третьей программе. Мы используем негативную перспективу, чтобы избежать совпадения концов диапазона в этой программе.
  • \B=соответствует, =которому не предшествует символ слова. Это соответствует четырем из =четвертой программы и не соответствует =этой программе.
Мартин Эндер
источник
5

7. Сетчатка (язык 1), 27 байт

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5

Попробуйте онлайн! (Проверяет все возможные входные данные.)

Незначительная модификация пятого ответа . \B=уже находит 4 совпадения в шестом ответе и \b5находит другое без совпадения с любыми другими ответами.

Мартин Эндер
источник
4

4, JavaScript (ES6), 32 байта

s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1

Выходы 1 для пустого входа, 2, если вход начинается с a {, 4, если он начинается с a, sи 3 в противном случае.

Люк
источник
Вы можете заменить s[0]=='{'наs[0]>'z'
1
@Masterzagh Я также думал о том, как это можно сыграть в гольф, но, увы, это не код-гольф: /
Kritixi Lithos
@KritixiLithos Ну да, но он уже играл в гольф, поэтому я подумал, что он захочет пойти дальше.
@Masterzagh Люди должны избегать редактирования действительных ответов в подобных задачах, потому что они могут сделать недействительными а) более поздние ответы, б) ответы, над которыми в настоящее время работают.
Мартин Эндер
@MartinEnder, ты прав. Поэтому я не буду редактировать его. Я знаю, что это выглядит в гольфе (из-за троичных операторов), но я специально не писал это так ... Спасибо за все отзывы!
Лука
4

11. Mathematica [язык 7], 53 байта

Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&

Безымянная функция, принимающая список символов в качестве аргумента и выводящая положительное целое число. Просто ответвляется на первую букву ввода, используя его положение в строке, "^{'sceP"чтобы принять решение о выводе. Это дает правильный ответ для всех предыдущих представлений, кроме начальной пустой программы Retina и самого последнего ответа Retina ; обе из этих ошибок, но вывод исправляется по правилу, /._@__->1которое преобразует любую неоцененную функцию в 1.

Грег Мартин
источник
Я думаю, что действительно пришло время испортить эту стратегию первого персонажа :)
Мартин Эндер
1
Я собирался, но потом вспомнил, что мне нужно было правильно выводить
Грег Мартин,
4

16. Perl (язык 9), 94 байта

while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}

Попробуйте онлайн! (проверяет все ответы). Выходы "1234151516748149"

Это печатает:

  • 1 с ответами 1, 5, 7, 9 и 14 (Retina).
  • 2 с ответом 2 (Brain-Flak).
  • 3 с ответом 3 (APL).
  • 4 с ответами 4, 12 и 15 (Javascript).
  • 5 с ответами 6 и 8 (R).
  • 6 с ответом 10 (Баш).
  • 7 с ответом 11 (Mathematica).
  • 8 с ответом 13 (Python).
  • 9 с этим ответом (Perl).

Программа проверяет длину ввода и сопоставляет ее с текущим языковым распределением.

Lyth
источник
3

6. R (язык 5), 61 байт

cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

Проверяет, что является первым символом ввода и соответственно выбирает вывод.

Это таким образом печатает:

  • 1с ответами 1 и 5 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответом 4 (Javascript).

  • и 5с этим ответом.

Использование:

> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
{<>(())(<>)}{}(<>{}())
2
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
' {'⍳⊃⍞
3
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
4
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
5
plannapus
источник
Чтобы запустить это вне REPL, см. Комментарий под ответом 8.
plannapus
3

8. R (язык 5), 76 байт

c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)

Проверяет первую букву ввода, и сравнивает его с вектором , содержащим (в указанном порядке) пустая строка, {, ', sи c. Затем выводится индекс совпадения (индексирование R основано на 1) или 1, если совпадения нет.

Та же концепция, что и в ответе № 6, но не позволяет ответу № 7 сопоставить его.

Это печатает:

  • 1с ответами 1 , 5 и 7 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответом 4 (Javascript).

  • и 5с ответом 6 и этим ответом (R).

Если я не ошибаюсь, допуск подсчета байтов для этого ответа составил 94 байта.

plannapus
источник
FYI R онлайн-интерпретаторы (rfiddle, ideone и tryitonline), похоже, имеют проблемы с обработкой stdin (по крайней мере, с readline ()) и, следовательно, не будут работать должным образом. Боюсь, если вы хотите попробовать это (и предыдущий ответ), вам придется попробовать локально на установленной версии R.
plannapus
^ Хорошо, вне REPL readlineследует заменить на readLines(file("stdin")). Что означает еще 16 символов: поэтому ответ 6 должен быть 77 байтов (из 79 разрешенных), а этот ответ - 92 байта (из 94 разрешенных). С этим изменением это работает и для онлайн переводчиков.
plannapus
3

12. Javascript (язык 4), 117 байт

Примечание: я изменил характер, чтобы исправить ошибку в этом.

c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;

Проверяет первую букву ввода, если это c, проверяет длину ввода.

Выходы:

  • 1 для ответов 1, 5, 7, 9
  • 2 для ответа 2
  • 3 для ответа 3
  • 4 для ответа 4 и этот ответ
  • 5 за ответы 6, 8
  • 6 за ответ 10
  • 7 для ответа 11
Devsman
источник
3

13. Python (язык 8), 110 байт

Примечание. Этот ответ был изменен через 6 часов после публикации по рекомендации ФП.

from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N

Это та же идея, что и в ответе 10 (в bash), но в Python 3. (Этот подход может работать не более чем с 3 записями, прежде чем мы исчерпаем шестнадцатеричные цифры.)

Это печатает:

  • 1с ответами 1 , 5 , 7 и 9 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 и 12 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответом 10 (Баш).

  • 7с ответом 11 (Mathematica).

  • 8 для этого ответа (Python).

Попробуйте онлайн! для: ответ 1 , ответ 2 , ответ 3 , ответ 4 , ответ 5 , ответ 6 , ответ 7 , ответ 8 , ответ 9 , ответ 10 , ответ 11 , ответ 11 , ответ 12 или этот ответ .

Ник Маттео
источник
Каков текущий предел байтов?
Ви.
@Vi .: Ну, это было 149 для ответа 13 и 163 для ответа 14; но ОП только что изменил правила подсчета байтов на 45 + 5n, так что это будет 110 байтов для ответа 13 и 115 байтов для ответа 14.
Ник Маттео
Вы, вероятно, должны поднять 110-байтовое решение.
clismique
@ Qwerp-Derp: все в порядке. Надеюсь, это никому не помешает.
Ник Маттео
Хорошо, ждем около 60 ответов до тех пор, пока байт не достигнет дружественной для Java земли.
Ви.
3

24. Zsh (язык 11), 142 байта

Мой предыдущий ответ № 18 в Си все еще работает без изменений для всех последующих записей ( демо ). Итак, давайте немного перепутаем.

typeset -A p
p=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)
echo ${p[(k)$1]:-1} #@<`w&X{

Цель комментария в конце состоит в том, чтобы соответствовать длине ответов 21 и 23, и убедиться, что ни один символ хэшей sha256 или sha384 не является уникальным для каждого ответа до сих пор, используя символы, проверенные ответами Lyth C ++. ;-)

Это печатает:

  • 1с ответами 1 , 5 , 7 , 9 и 14 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 , 12 и 15 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответами 10 , 17 , 20 и 22 (Баш).

  • 7с ответами 11 и 19 (Mathematica).

  • 8с ответом 13 (Python).

  • 9с ответом 16 (Perl).

  • 10с ответами 18 , 21 и 23 (C / C ++).

  • 11 с этим ответом (зш).

Попробуйте онлайн!

Ник Маттео
источник
Я думаю, что это первый ответ, который будет многострочным ... +1 от меня.
clismique
2

14. Retina (язык 1), 39 байт

'[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$

Попробуйте онлайн! (Проверяет все действительные данные.)

Мартин Эндер
источник
1
Давай, Мартин, постись на другом языке ... также, ты не мог бы заняться форматированием ответов?
clismique
3
@ Qwerp-Derp Это на самом деле превращается в интересный вариант стандартного регулярного гольфа. Вместо того, чтобы иметь набор входов и совпадение с некоторыми из них и сбой некоторых других, здесь вы должны получить определенное количество совпадений для каждого из входов. Я действительно задаюсь вопросом, будет ли это регулярное выражение расти в геометрической прогрессии в какой-то момент.
Мартин Эндер
Это действительно 39 байтов? TIO сообщает 37 байтов.
Arnauld
1
@Arnauld TIO жестко задан для подсчета символов для Retina, потому что вы часто используете однобайтовые кодировки. Этот ответ требует UTF-8, хотя.
Мартин Эндер
2

15. Javascript (язык 4), 108 байт

Golfed

t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
дирижабль
источник
2

17. Bash (+ coreutils + openssl) (язык 6), 103 байта

Golfed

expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x

Использует ту же технику, что и мой ответ № 10 , но с закодированным в Base64 словарем вместо Hex .

Я собрал следующий файл данных для тестирования:

6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Тест

for i in `seq 17`
do
  echo -n `cat lchain|sed -n $i'{p;q}'|cut -c1`=\>
  cat lchain|sed -n $i'{p;q}'|cut -c6-|\
  expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
done

6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
дирижабль
источник
2

19. Mathematica (язык 7), 96 байт

Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&

Безымянная функция, принимающая список символов в качестве входных данных и возвращающая целое число:

  • 1с ответами 1 , 5 , 7 , 9 и 14 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 , 12 и 15 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответами 10 и 17 (Баш).

  • 7с ответом 11 и этим ответом (Mathematica).

  • 8с ответом 13 (Python).

  • 9с ответом 16 (Perl).

  • 10с ответом 18 (С).

До сих пор все длины ответов различны, и они даже различаются по модулю 59 - следовательно, можно определить, по какому целому числу в диапазоне 33, 34, ..., 91 они соответствуют (мод 59). Это все печатные символы ASCII, закодированные строкой ";NRU$ Q B [1: =L J, 5% 3 # >"; с помощьюToCharacterCode@StringSplit@ превращает эту строку в список из десяти списков целых чисел в этом диапазоне и Position[...,Mod[Length@#,59,33]][[1,1]]находит, какой из десяти подсписков соответствует измененной длине ввода.

Грег Мартин
источник
1

20. Bash (+ coreutils + openssl) (язык 6), 121 байт

Golfed

expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u

Тот же метод, что и в моем ответе № 17 (который, в свою очередь, основан на моем первоначальном ответе № 10 ).

Сейчас у нас 10 разных языков, и я переключился на шестнадцатеричное кодирование позиций.

Данные

6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Тест (выход)

./test
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
дирижабль
источник
1

23. C (gcc) (язык 10), 142 байта

main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

Попробуйте онлайн!

  • 1с ответами 1 , 5 , 7 , 9 и 14 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 , 12 и 15 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответами 10 , 17 , 20 и 22 (Баш).

  • 7с ответом 11 и 19 (Mathematica).

  • 8с ответом 13 (Python).

  • 9с ответом 16 (Perl).

  • 10с ответом 18 , 21 и этим ответом (с).

Эта программа считает количество различных символов (в ASCII, поэтому многобайтовые символы UTF-8 разбиваются на несколько записей), а затем следует тщательно продуманному дереву решений, основываясь на количестве появлений того или иного символа.

Дерево решений не изменилось с # 21 (ууу!). Мне не разрешено публиковать точно такой же код, поэтому мы вернулись к чистому Си с небольшими изменениями.

Lyth
источник
0

21. C ++ (gcc) (язык 10 как вариант C), 142 байта

main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

Попробуйте онлайн!

  • 1с ответами 1 , 5 , 7 , 9 и 14 (Retina).

  • 2с ответом 2 (Brain-Flak).

  • 3с ответом 3 (APL).

  • 4с ответами 4 , 12 и 15 (Javascript).

  • 5с ответами 6 и 8 (R).

  • 6с ответами 10 , 17 и 20 (Баш).

  • 7с ответом 11 и 19 (Mathematica).

  • 8с ответом 13 (Python).

  • 9с ответом 16 (Perl).

  • 10с ответом 18 и этим ответом (С).

Эта программа считает количество различных символов (в ASCII, поэтому многобайтовые символы UTF-8 разбиваются на несколько записей), а затем следует тщательно продуманному дереву решений, основываясь на количестве появлений того или иного символа.

По мелочи : буква К не использовалась до этой записи. Буквы I, E, Y, j, k, q, z остаются неиспользованными.

Lyth
источник
Существует возможность рассматривать C ++ язык 11, несколько байт осталось , чтобы соответствовать , что в.
Lyth
0

22. Bash (+ coreutils) [язык 6], 123131 байт

РЕДАКТИРОВАТЬ: опубликовал неправильную версию вначале, должны быть исправлены сейчас.

Golfed

expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L

Та же техника, что и в моих ответах №20, №17 и №10 .

Данные

6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Тестовый забег

./test
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
дирижабль
источник
Что 44?
clismique
22 * 2? 󠀠󠀠󠀠󠀠󠀠
Vi.
@ Qwerp-Derp, просто опечатка
дирижабль
Давай, твои ответы становятся скучными сейчас - если твой следующий ответ будет таким, я подумываю о понижении (это не интересно, понимаешь?)
clismique
1
Что-то здесь не так. В ваших хэшированных письмах всего 20 записей (3PgT и т. Д.). Для пустого ввода я получаю ошибку, а для ответа № 2 я получаю «4» (оба сработали правильно с ответом 20.)
Ник Маттео
0

25. Bash (язык 6), 169 байт

Та же техника, что и в моих ответах № 22, № 20, № 17 и № 10 .

Извините @ Qwerp-Derp! ;) Обещаю, это последний :)

Golfed

{ echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8

Данные

Обратите внимание, что для ответа № 24 символы новой строки кодируются как \ n

6 25 { echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8
B 24 typeset -A p\np=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)\necho ${p[(k)$1]:-1} #@<`w&X{
A 23 main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Тестовый вывод

6=>6
B=>11
A=>10
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
дирижабль
источник