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 является более ранним представлением.

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)

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.

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


Вы пропускаете период после 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.              


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."

1

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

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

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


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.
Эрик 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.