Ви знаєте цю мову?


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


1
Чи може один користувач опублікувати два послідовних подання поспіль?
Kritixi Lithos

Таким чином, як я маю на увазі, я міг би повторити, як і без будь-яких змін, свою відповідь № 6 як відповідь № 8, після чого Мартін міг повторити свій номер n ° 7 (якщо я не помиляюся) і т.д., поки відповідь n ° 15, перш ніж досягти встановленого порогу (тобто floor(n / 3)мови). Я здогадуюсь, це не призначена поведінка.
планнапус

@plannapus Я також помітив це. Звичайно, ваша мета - отримати останню відповідь, тож знаючи, що я також буду тривіальним слідком, ви, можливо, захочете ускладнити речі (про що я не замислювався, перш ніж публікувати власну відповідь).
Мартін Ендер

3
Виділене число байтів зростає в геометричній прогресії, і, ймовірно, це завдання не закінчиться, поки у нас не закінчиться мова, не тому, що код стане занадто довгим.
Вольфрам

2
IMO, розумний фіксований ліміт (наприклад, 384 або 256 байт), працював би краще, і в кінцевому підсумку викликав би жорстку конкуренцію.
zeppelin

Відповіді:


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 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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знаходиться зверху; :дублює це; }повертає копію назад донизу. Ми збільшуємо регістр ( &1+&), поки не буде знайдено збіг. (Отже, якщо C"c", регістр містить 3, коли збіг знайдено; якщо C"t", то регістр містить 4 і т. Д.) Потім переходимо до першого символу номера рядка в регістрі ( 0&.) .

Рядки 3 - 13 стосуються того, що робити, коли Cвідповідно c, t, ', {тощо. Покажчик інструкцій рухається назад, коли ми стрибаємо; він приземляється на перший символ заданої лінії, але після стрибка він просуває галочку перед виконанням, тому починає виконувати з кінця рядка, що йде назад. Кожен рядок висуває відповідний мовний номер на стеку, після чого надсилає рибу вниз доn інструкції, яка її роздруковує.

^це найскладніший випадок, через мою власну зухвалість з першим рядком цієї відповіді. Рядок 13 зчитує вхід до EOF. Потім він направляється вниз до рядка 15, де порівнюється довжина стека ( l) до 100 ( aa*). Якщо він довший ( )?), додамо + bі 1отримаємо 12, ця мова; інакше 1 залишається зверху стека.



12

2. Мозок-Флак , 22 байти

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

Спробуйте в Інтернеті!

Це перевіряє верхню частину стека і ставить один на протилежний стек, якщо він не дорівнює нулю. Потім він збільшується і повертає протилежний стек. Це робить його поверненням 1 для порожньої програми та 2 для будь-чого іншого.

Оскільки стеки у Brain-Flak за замовчуванням до нуля, порожня програма матиме нуль у верхній частині стека, тоді як будь-яка інша програма (крім програм, що закінчуються нульовими символами) матиме трибунове значення. Це означає, що ми можемо запустити дуже просту програму на вхідному стеку.

{      (<>)}{}              #If not zero
 <>(())                     #Push one to the other stack
              (<>{}())      #Switch to other stack and increment by one

Чи можете ви відредагувати цю відповідь? Я випадково проголосував за нього :)
Conor O'Brien

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], 44, 74 байти

Виправлена ​​версія (повертає ідентифікатор мови)

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

Примітка. Очікує, що після введення тексту програми очікується новий рядок


7

9. Сітківка (мова 1), 20 байт

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

Спробуйте в Інтернеті!

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

Пояснення

Як і в інших моїх відповідях, це просто підраховує кількість різних збігів з регулярними виразками, але про це йде набагато ефективніше:

  • $відповідає кінці рядка. Це завжди працює, навіть якщо є збіг, який проходить до кінця рядка, тому це дає нам базову лінію 1для всіх входів.
  • }\{знаходить один матч у другій програмі (Brain-Flak), доводячи кількість рахунків там 2. Зворотна косої риси не потрібна для втечі, але це заважає цій частині регулярного вираження відповідати самій собі.
  • [:'][^]']насправді досить фантазії. Єдина мета - порахувати два 'в програмі APL (мова 3) та три :в програмі JavaScript (мова 4), але нам потрібно не допустити, щоб ця частина відповідала собі. Тож ми також гарантуємо, що наступний символ не є ні ', ні] (тому що ті не з'являються після того, як ті , які ми дійсно хочемо , щоб відповідати, але вони з'являються в цій програмі тут).
  • 'Від попередньої частини вже викликає один матч в програмах R, так що нам потрібно ще три. Підрядка ,1відображається в обох програмах тричі, і в жодних інших програмах. Ми співставляємо його, додаючи тавтологічну межу слів між тим, ,\b1щоб не допустити повторного узгодження.

Гм, щойно зрозумів, що це зовсім не приховує відповідей на R, оскільки 1це просто їх вихід за замовчуванням. Мені доведеться щось з цим зробити з наступною відповіддю.
Мартін Ендер

7

18. С (мова 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 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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 відповідями на спробу онлайн!

Безголівковий еквівалент (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. Сітківка (мова 1), 23 байти

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

Спробуйте в Інтернеті!(Тестує всі можливі входи.)

Підраховує збіги різних речей у вхідних даних:

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


4

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

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

Виходи 1 для порожнього вводу, 2 якщо вхід починається з а {, 4 якщо починається з а 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
Я збирався, але потім згадав, що мені довелося правильно виводити і свою мову: D
Грег Мартін,

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 (Сітківка).
  • 2 з відповіддю 2 (Мозг-Флак).
  • 3 з відповіддю 3 (APL).
  • 4 з відповідями 4, 12 та 15 (Javascript).
  • 5 з відповідями 6 і 8 (R).
  • 6 з відповіддю 10 (Баш).
  • 7 з відповіддю 11 (Mathematica).
  • 8 з відповіддю 13 (Python).
  • 9 з цією відповіддю (Perl).

Програма перевіряє вхідну довжину і відображає її в поточному мовному розподілі.


3

6. R (мова 5), 61 байт

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

Перевіряє, який перший символ вводиться, і вибирає вихід відповідно.

Це, таким чином, друкує:

  • 1з відповідями 1 і 5 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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

Щоб виконати це за межами 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 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 3з відповіддю 3 (APL).

  • 4з відповіддю 4 (Javascript).

  • і 5з відповіддю 6 і ця відповідь (R).

Якщо я не помиляюсь, припуск для цієї відповіді склав 94 байти.


Інтернет-інтерпретатори FYI R (rfiddle, ideone і tryitonline), схоже, мають проблеми з обробкою stdin (принаймні, з readline ()), і тому не будуть вести себе належним чином. Якщо ви хочете спробувати це (і попередню відповідь), вам доведеться спробувати локально встановлену версію R, я боюся.
планнапус

^ Добре, поза REPL readlineслід замінити на readLines(file("stdin")). Що означає ще 16 символів: відповідь 6 повинна бути 77 байтів (із 79 дозволених), а це відповідь - 92 байти (із 94 дозволених). З цією зміною він працює і на онлайн-перекладачах.
планнапус

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

3

13. Пітон (мова 8), 110 байт

Примітка: Ця відповідь була змінена через 6 годин після публікації за рекомендацією ОП.

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

Це та сама ідея, що і відповідь 10 (в баші), але в Python 3. (Цей підхід може працювати щонайбільше 3-х записів, перш ніж у нас вичерпаються шістнадцяткові цифри.)

Це відбитки:

  • 1з відповідями 1 , 5 , 7 та 9 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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 , Відповідь 12 , або ця відповідь .


Яка межа поточного байта?
Ві.

@Vi: Ну, це було 149 для відповіді 13 і 163 для відповіді 14; але ОП просто змінила правила підрахунку байтів на 45 + 5n, так що це буде 110 байт для відповіді 13 і 115 байт для відповіді 14.
Нік Маттео

Ви, ймовірно, повинні поставити рішення в байті на 110 балів.
clismique

@ Qwerp-Derp: Гаразд. Сподіваємось, це нікому не порушить поточну роботу.
Нік Маттео

Гаразд, чекаючи приблизно 60 відповідей, поки байтове обмеження не потрапить на зручну землю для Java.
Ві.

3

24. Зш (мова 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 не був унікальним для кожної відповіді на даний момент, використовуючи символи, перевірені відповідями Літа на С ++. ;-)

Це відбитки:

  • 1з відповідями 1 , 5 , 7 , 9 і 14 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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. Сітківка (мова 1), 39 байт

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

Спробуйте в Інтернеті! (Тестує всі дійсні входи.)


1
Давай, Мартін, публікуй іншою мовою ... також, ти міг би зробити щось із форматуванням відповідей?
clismique

3
@ Qwerp-Derp Це насправді перетворюється на цікаву варіацію стандартного гольфу-регексу. Замість того, щоб мати набір входів і нести відповідність деяким з них, а деякі інші виходити з ладу, тут ви повинні отримати певну кількість збігів на кожному з входів. Мені цікаво, чи в цей момент цей регекс підірветься експоненціально.
Мартін Ендер

Це дійсно 39 байт? TIO повідомляє 37 байт.
Арнольд

1
@Arnauld TIO важко кодувати, щоб просто підрахувати символи для Retina, оскільки ви часто використовуєте однобайтові кодування. Ця відповідь вимагає UTF-8.
Мартін Ендер

2

15. Javascript (мова 4), 108 байт

Гольф

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 байти

Гольф

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. Математика (мова 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 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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 байт

Гольф

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 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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 (так!). Мені заборонено публікувати такий самий код, тому ми повертаємося до чистого C із незначними змінами.


0

21. C ++ (gcc) (мова 10 як варіант С), 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 (Сітківка).

  • 2з відповіддю 2 (Мозг-Флак).

  • 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 залишаються невикористаними.


Є можливість розглянути мову C ++ 11, залишилося кілька байтів, щоб відповідати цьому.
Літ

0

22. Bash (+ coreutils) [мова 6], 123, 131 байт

EDIT: Спочатку вийшла неправильна версія, її слід виправити зараз.

Гольф

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, просто друкарня
zeppelin

Давай, ваші відповіді стають нудними зараз - якщо наступна ваша відповідь така, я розглядаю спростування (це не цікаво, знаєте?)
клісмік

1
Щось тут не так. У хешованих листах є лише 20 записів (3PgT тощо). При порожньому введенні я отримую помилку, а за відповідь №2 отримую "4" (обидва працювали правильно з відповіддю 20.)
Нік Маттео,

0

25. Баш (мова 6), 169 байт

Та сама техніка, що і мої відповіді №22, №20, №17 та №10 .

Вибачте @ Qwerp-Derp! ;) Обіцяю, що це останнє :)

Гольф

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

Дані

Зауважте, що нові рядки кодуються як \ n для відповіді №24

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.