高尔夫计算口译员


9

介绍

计算是一种深奥的笑话语言。

esolangs条目中:

计算没有必需的语法,并且可以解决所有问题。它足够聪明,可以解释任何人类语言(英语,西班牙语,拉丁语等),任何编程语言(C ++,Java,brainfuck等)或任何您能想到的数据。唯一的缺点是绝对没有I / O。

一些示例程序

Hello World

基本的Hello World程序

What is love?

确定爱是(宝贝不要伤害我)。

When will we ever graduate?

确定该网站退出beta的确切日期。

挑战

您的任务是编写完整的Compute解释器。这听起来很难,但是请记住Compute绝对没有I / O。因此,您的解释器将只为输入程序中的每一睡眠一秒钟,然后\n\nDone.在此之后输出(这是no I / O的唯一例外)。

您可以在本网站底部找到官方口译员。
请注意,官方解释器会为给定源代码中的每个字符暂停一秒钟。为了避免在等待有意义的问题测试口译员时的漫长等待时间,我们在挑战中坚持行列

规则

  • 输入可能包含多行,并用分隔\n。总会有至少一行。
  • 与正式实现不同,您不必将文件作为输入。您可以采用任何所需输入形式的Compute程序。
  • 允许的唯一输出是\n\nDone.。尾随换行符是允许的。
  • 允许功能或完整程序。
  • 输入/输出的默认规则
  • 有标准漏洞
  • 这是 ,因此最低字节数获胜。决胜局是较早提交的。

1
不可避免地使我想起了这一点
Luis Mendo

14
好吧,我们不需要程序可以告诉我们何时毕业。我们已经知道这是26日。
门把手

7
@Doorknob,哪个世纪?
msh210 '16

1
@DenkerAffe我想您应该明确表示挑战与语言不完全匹配。
PurkkaKoodari '16

9
@ msh210,不,那是世纪。
彼得·泰勒

Answers:


5

05AB1E16 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().

这是一个条件为的while循环input()

Inhale.

我们的程序需要呼吸,并且inhale虽然不那么健康,但是却更容易打高尔夫球。

Now sleep(1).

Now采用最新导入的模块并将.sleep(1)其追加。

Backtracking.

让我们退出while循环。

Boring,
boring.

打印两个换行符。

Listen!

开始捕获字符串。

Capture Done.

添加Done.到捕获的字符串。

Carry on!

完成捕获字符串。


3
看起来像是一种有趣的语言。您是否会添加指向解释器+文档的链接?
Denker

@DenkerAffe的文档和解释既可以在标题中找到我刚刚编辑英寸
康纳尔奥布莱恩

@Conor谢谢,来看看吧。:)
Denker

4

JavaScript Shell REPL,38个字节

作为接受程序作为字符串参数并返回结果的函数:

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

Done.`

如果该函数可以接受行数组形式的输入,或者每个字符应睡1秒,则为29个字节:

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
Mama Fun Roll

@ӍѲꝆΛҐӍΛПҒЦꝆ我不确定是否可以。由于他已经有了模板字符串,因此您需要对其进行转义
Cyoce

@ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2不能相信我错过了。
andlrc '16

@ edc65您不是第一个谈论它的人,ӍѲꝆΛҐӍΛПҒЦꝆ也提到了它。:-)
andlrc '16

4

Bash + coreutils,28岁

sleep `wc -l`
echo "

Done."

每行睡眠1秒。使用wc -c,而不是为每个字节,或wc -m不是为每个字符。


1
不应有多余的换行符吗?
user253751 '16

@immibis是的-您是对的-已修复。
Digital Trauma

3

Pyth,15个 14字节

.dcl.z1b"Done.

(您可以在线尝试,但这样做毫无意义。)


您错过了之后的时间Done(这很有趣,因为您在另一个答案中告诉了相同的人):P
Denker

@DenkerAffe谢谢。(不过字节数是正确的。)
PurkkaKoodari '16

@muddyfish那就是挑战的意思。官方解释器是按字符排列的,但为了避免等待时间,我将其更改为行。
Denker

@DenkerAffe现在,我们的条目完全相同。谁留着?我将假设Pietu1998是因为它们首先是正确的
Blue

b是必要的吗?
busukxuan '16

2

Perl,21 +1 = 22字节

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

需要-p标志:

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


Done.              

2

Python 3,58个字节

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

只是想指出这一点,在python 2中,打印会缩短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 '16

@ Pietu1998糟糕。已更正。谢谢!
Luis Mendo

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

带有文件I / O的奖励版本(87字节):

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

1

Ruby,32个字节

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

从stdin读取。


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
暴民埃里克(Erik the Outgolfer)

0

awk,34个字节

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

由于没有I / O并且最终结果是不可避免的,因此该Done.部件从一开始就输出。

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

在awk中睡觉的唯一方法是使用system sleep。提倡它的最短方法是print|"sleep "NR,我们也可能滥用那无用的东西print

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.