Гольф - перекладач обчислень


9

Вступ

Обчислити - це езотерична мова жарту.

З запису езоланг:

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

Деякі приклади програм

Hello World

Основна програма Hello World

What is love?

Визначає, що любов є (дитина не шкодить мені).

When will we ever graduate?

Визначає точну дату цього веб-сайту, щоб вийти з бета-версії.

Змагання

Ваше завдання - написати повний комп'ютерний перекладач. Це звучить досить важко, але майте на увазі, що у Compute абсолютно немає вводу / виводу. Тож ваш перекладач буде просто спати одну секунду для кожного рядка програми введення та виводу \n\nDone.після цього (це єдиний виняток із речі, що не стосується вводу / виводу).

Ви можете знайти офіційного перекладача внизу цього веб-сайту .
Зауважте, що офіційний перекладач паузує одну секунду на кожен символ у вказаному вихідному коді. Щоб уникнути тривалих термінів очікування під час тестування вашого перекладача на змістовні запитання, ми залишаємось у рядках цього виклику.

Правила

  • Вхід може містити кілька рядків, відокремлених a \n. Завжди буде хоча б один рядок.
  • На відміну від офіційної реалізації, вам не потрібно приймати файл як вхід. Ви можете взяти програму Compute в будь-якій формі введення.
  • Єдиний вихід дозволений \n\nDone.. Доступний новий рядок дозволений.
  • Функція або повна програма дозволена.
  • Правила вводу / виводу за замовчуванням .
  • Застосовуються стандартні лазівки .
  • Це є , тому виграє найменший байт. Tiereaker є більш раннім поданням.

1
Неминуче нагадав мені про це
Луїс Мендо

14
Ну, нам не потрібна програма, яка б нам сказала, коли ми закінчимо навчання. Ми вже знаємо, що це 26-й.
Дверна ручка

7
@Doorknob, якого століття?
msh210

1
@DenkerAffe Я думаю, ви повинні дати зрозуміти, що виклик не відповідає мові.
PurkkaKoodari

9
@ msh210, ні, це століття.
Пітер Тейлор

Відповіді:


5

05AB1E , 16 15 14 13 байт

Код:

[Ig>#w’

D€µ.

Пояснення:

[        # Starts an infinite loop
 I       # Input string
  g>     # Length + 1
    #    # If equal to 1, break out of the loop
     w   # Wait 1 second

Ця частина еквівалентна "\n\nDone.":

      ’  # Push "\n\nDone." on top of the stack

D€µ.     # The compressed string is ended implicitly
         # Implicit, print top of the stack

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

Використовує кодування CP-1252 .


4

Промова , 117 байт

I need time!
To iterate, input().
Inhale.
Now sleep(1).
Backtracking.
Boring,
boring.
Listen!
Capture Done.
Carry on!

Пояснимо це. По-перше, це перекладається на:

import time
while input():
    time.sleep(1)
print("\n")
print("\n")
print("Done")

Ще розгублено? Давайте викладемо так:

I need time!

Імпортує модуль time.

To iterate, input().

Це певний час, стан якого input().

Inhale.

Нашій програмі потрібно дихати зараз, і inhale, хоча менш здоровою, є гольфістом.

Now sleep(1).

Nowвізьміть останній імпортний модуль та додайте .sleep(1)його.

Backtracking.

Вийдемо з циклу while.

Boring,
boring.

Друкує два нових рядки.

Listen!

Починається захоплення рядка.

Capture Done.

Додає Done.до захопленого рядка.

Carry on!

Завершує захоплення рядка.


3
Виглядає як забавна мова. Ви б додали посилання на перекладача + документи?
Денкер

@DenkerAffe Документи та перекладач можна знайти в рубриці, в якій я щойно редагував.
Conor O'Brien

@Conor Спасибі, я погляну на це. :)
Денкер

4

JavaScript Shell REPL, 38 байт

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

s=>sleep(s.split`
`.length)||`

Done.`

29 байт, якщо функція може прийняти свій вхід у вигляді масиву рядків або якщо вона повинна спати 1 секунду на символ:

s=>sleep(s.length)||`

Done.`

34 байти, якщо він також повинен бути більше схожим на програму і явно надрукувати «Готово»:

s=>sleep(s.length)||print`

Done.`

Це працює для мене в самостійному перекладачі Spidermonkey.


4

Javascript ES6, 46 45 байт

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Завдяки ӍѲꝆΛҐӍΛПҒЦꝆ за збереження одного байта

Передбачає масив як вхідний.

Як і ӍѲꝆΛҐӍΛПҒЦꝆ, і edc65 вказали, ви можете написати наступне, але це не збереже жодних байтів:

a=>setTimeout("alert`\n\nDone`",a.length*1e3)

1
1e3краще, ніж 10e2.
Mama Fun Roll

Також перетворіть функцію стрілки в рядок. Дивіться codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ Я не впевнений, що це спрацює. Оскільки в нього вже є рядок шаблону, вам потрібно буде уникнути цього
Cyoce

@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2не можу повірити, що я пропустив це.
andlrc

@ edc65 Ви не перший, хто про це говорив, ӍѲꝆΛҐӍΛПҒЦꝆ також згадував про це. :-)
andlrc


3

Pyth, 15 14 байт

.dcl.z1b"Done.

(Ви можете спробувати в Інтернеті , але насправді немає сенсу робити це.)


Ви пропускаєте період після Done(що досить смішно, оскільки ви сказали комусь те саме в іншій відповіді): P
Denker

@DenkerAffe Дякую (Хоча кількість байтів було правильним.)
PurkkaKoodari

@muddyfish Ось що говорить виклик. Офіційний перекладач іде чарівно, але я змінив його на рядки, щоб уникнути часу очікування.
Денкер

@DenkerAffe Ок, зараз наші записи точно такі ж. Кого тримати? Я припускаю, що Pietu1998, тому що вони були першими правильними
Синій

Чи потрібен b?
busukxuan

2

Perl, 21 + 1 = 22 байти

sleep 1}{$_="\n\nDone."

Потрібен -pпрапор:

$ perl -pe'sleep 1}{$_="\n\nDone."' <<< $'a\nb\nc'


Done.              


2

MATL , 17 байт

10c'Done.'`jt?1Y.

Кінцевий порожній рядок (далі новий рядок) використовується для позначення кінця введення. Це потрібно в MATL, оскільки введення є інтерактивним і кожен вхід закінчується новим рядком.

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

10c           % push newline character
'Done.'       % push string
`             % do...while
  j           % input string
  t           % duplicate
  ?           % if non-empty
    1Y.       % pause for 1 second
              % loop condition is the current string. If non-empty: next iteration
              % If empty: exit loop and print stack contents. There are two strings
              % and a newline is printed after each, so the desired output is obtained

Ви пропускаєте період після Done?
PurkkaKoodari

@ Pietu1998 Whoops. Виправлено. Дякую!
Луїс Мендо

2

QBasic, 54 байти

LINE INPUT x$
IF x$=""GOTO 1
SLEEP 1
RUN
1?
?
?"Done."

Знімає програму рядок за рядком із введення користувача, закінчується порожнім рядком. Дотримується букви закону, хоча можливо і не духу, зробивши паузу на 1 секунду після прочитання кожного рядка. (Технічна специфікація технічно не говорить про те, що всі паузи повинні настати після завершення вводу.) Якщо це вважається занадто тінистим, ось 64-байтова версія, яка призупиняється після введення всієї програми:

DO
LINE INPUT x$
IF x$=""GOTO 1
t=t+1
LOOP
1SLEEP t
?
?
?"Done."

Бонусна версія з файлом вводу / виводу (87 байт):

INPUT f$
OPEN f$FOR INPUT AS 1
1LINE INPUT #1,x$
SLEEP 1
IF 0=EOF(1)GOTO 1
?
?
?"Done."


1

OCaml, 61 байт

fun a->List.iter(fun _->Unix.sleep 1)a;print_string"\n\nDone"

Припустимо, що вхід є списком.


0

Желе , 12 байт (неконкуренто)

ỴLœS@⁷⁷“ẋḲp»

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

Примітка. Будь ласка , не пропонуйте вводити ⁷⁷стиснуту рядок, це зробить її довшою ( “¡OÑL[Ṁ»).

Пояснення:

ỴLœS@⁷⁷“ẋḲp» Main link. Arguments: z.
ỴL           The number of lines in z. (x)
     ⁷       Newline ("\n") (y)
  œS@        After sleeping for x seconds, return y.
      ⁷      Newline ("\n")
       “ẋḲp» Compressed string ("Done.")

Це не конкурує через œS.
Ерік Аутгольфер

0

awk, 34 байти

END{print"\nDone."|"cat;sleep "NR}

Оскільки немає вводу / виводу, а кінцевий результат неминучий, Done.частина випливає прямо на початку.

$ awk 'END{print"\nDone."|"cat;sleep "NR}' file

Єдиний спосіб спати в неприємності - це використовувати систему sleep. Найкоротший спосіб викликати це - print|"sleep "NRми можемо також зловживати цим марним print.

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