Golf a Compute переводчик

9

Введение

Compute - это эзотерическая шутка языка.

Из записи esolangs:

Compute не имеет необходимого синтаксиса и может решать любые проблемы. Он достаточно умен, чтобы интерпретировать любой человеческий язык (английский, испанский, латинский и т. Д.), Любой язык программирования (C ++, Java, brainfuck и т. Д.) Или любые виды данных, которые вы можете себе представить. Единственным недостатком является то, что нет абсолютно никакого ввода / вывода.

Некоторые примеры программ

Hello World

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

What is love?

Определяет, была ли это любовь (детка, не делай мне больно).

When will we ever graduate?

Определяет точную дату выхода этого сайта из бета-версии.

Соревнование

Ваша задача - написать полный интерпретатор Compute. Это звучит довольно сложно, но имейте в виду, что у Compute абсолютно нет ввода-вывода. Таким образом, ваш интерпретатор будет просто спать одну секунду для каждой строки во входной программе и выводить \n\nDone.после этого (это единственное исключение из функции отсутствия ввода / вывода).

Вы можете найти официального переводчика внизу этого сайта .
Обратите внимание, что официальный интерпретатор делает паузу в одну секунду для каждого символа в данном исходном коде. Чтобы избежать длительного ожидания при тестировании вашего переводчика со значимыми вопросами, мы остаемся в курсе этой задачи.

правила

  • Входные данные могут содержать несколько строк, разделенных \n. Всегда будет хотя бы одна строка.
  • В отличие от официальной реализации, вам не нужно принимать файл в качестве входных данных. Вы можете использовать программу Compute в любой форме ввода.
  • Единственный выход разрешен \n\nDone.. Трейлинг-перевод строки разрешен.
  • Функция или полная программа разрешены.
  • Правила по умолчанию для ввода / вывода.
  • Применяются стандартные лазейки .
  • Это так побеждает самое низкое число байтов. Tiebreaker является более ранним представлением.
Denker
источник
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

Oration , 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 Спасибо, посмотрим на это. :)
Денкер
4

JavaScript Shell REPL, 38 байт

Как функция, которая принимает программу в качестве строкового аргумента и возвращает результат:

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

Done.`

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

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

Done.`

34 байта, если это также должно быть больше похоже на программу и явно вывести Done:

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)
andlrc
источник
1
1e3лучше чем 10e2.
Mama Fun Roll
Кроме того, преобразовать функцию стрелки в строку. См. Codegolf.stackexchange.com/a/60960/41247
Мама Ролл Fun
@ ӍѲꝆΛҐӍΛПҒЦꝆ Я не уверен, что это сработает. Поскольку у него уже есть шаблонная строка, вам нужно ее избежать
Cyoce
@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2не могу поверить, что я пропустил это.
andlrc
@ edc65 Вы не первый, кто об этом говорит, ӍѲꝆΛҐӍΛПҒЦꝆ тоже упомянул об этом. :-)
andlrc
4

Баш + coreutils, 28

sleep `wc -l`
echo "

Done."

Спит 1 секунда для каждой строки. Используйте wc -cвместо каждого байта или wc -mвместо каждого символа.

Цифровая травма
источник
1
Разве не должно быть дополнительного символа новой строки?
user253751
@immibis Да - ты прав - исправлено.
Цифровая травма
3

Pyth, 15 14 байтов

.dcl.z1b"Done.

(Вы можете попробовать это онлайн , но в этом нет никакого смысла.)

PurkkaKoodari
источник
Вы пропускаете период после Done(что довольно забавно, потому что вы сказали кому-то то же самое в другом ответе): P
Денкер
@DenkerAffe Спасибо. (Количество байтов было правильным, однако.)
PurkkaKoodari
@muddyfish Вот что говорит задача. Официальный переводчик работает по-честному, но я изменил его на строки, чтобы избежать времени ожидания.
Денкер
@DenkerAffe Хорошо, теперь наши записи точно такие же. Кого оставить? Я собираюсь предположить Pietu1998, потому что они были правильными первыми
Blue
Б нужен?
Busukxuan
2

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

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

Требуется -pфлаг:

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


Done.              
andlrc
источник
2

Python 3, 58 байт

import time
while input():time.sleep(1)
print("\n\nDone.")
синий
источник
Просто хочу указать на это, это будет на 2 байта короче в Python 2, выведите «\ n \ nDone»
Случайный парень
Ах да, я забыл ... Извините.
Случайный парень
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 Упс. Исправлено. Спасибо!
Луис Мендо
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."
DLosc
источник
1

Рубин, 32 байта

$<.map{sleep 1}
puts"\n\nDone."

Читает со стандартного ввода.

bogl
источник
1

OCaml, 61 байт

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

Предполагается, что вход представляет собой список.

shooqie
источник
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.
Эрик Outgolfer
0

awk, 34 байта

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

Так как ввода / вывода нет, а окончательный результат неизбежен, Done.часть отдается в самом начале.

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

Единственный способ спать в awk - это использовать систему sleep. Самый короткий способ вызвать это - print|"sleep "NRи мы могли бы также злоупотреблять этим бесполезным print.

Джеймс Браун
источник