コンピューティングインタープリターのゴルフ


9

前書き

Computeは難解なジョーク言語です。

esolangsエントリから

Computeには必須の構文はなく、あらゆる問題を解決する能力があります。人間の言語(英語、スペイン語、ラテン語など)、プログラミング言語(C ++、Java、brainfuckなど)、または考えられるあらゆる種類のデータを解釈できるほどスマートです。唯一の欠点は、I / Oがまったくないことです。

いくつかのサンプルプログラム

Hello World

基本的なHello Worldプログラム

What is love?

愛が決定した(赤ちゃんは私を傷つけないでください)。

When will we ever graduate?

ベータ版を終了するこのサイトの正確な日付を決定します。

チャレンジ

あなたの仕事は完全なComputeインタプリタを書くことです。これはかなり難しいように聞こえますが、Computeには絶対にI / Oがないことに注意してください。したがって、インタプリタは、入力プログラムのすべてので1秒間だけスリープし、\n\nDone.この後に出力します(これは、I / Oがないことの唯一の例外です)。

このサイトの下部に公式の通訳がいます
公式のインタープリターは、指定されたソースコード内のすべての文字について1秒間停止することに注意してください。有意義な質問で通訳をテストする際の長い待ち時間を回避するために、この課題の説明を続けます

ルール

  • 入力には、で区切られた複数の行が含まれる場合があります\n。常に少なくとも1行あります。
  • 公式の実装とは異なり、入力としてファイルを取得する必要はありません。Computeプログラムは、任意の形式の入力で取得できます。
  • 許可される唯一の出力はです\n\nDone.。末尾の改行が許可されます。
  • 機能または完全なプログラムが許可されています。
  • 入力/出力のデフォルトのルール
  • 標準の抜け穴が適用されます。
  • これはなので、バイト数が最も少ないものが優先されます。タイブレーカーは以前の提出です。

1
必然的にこれを
Luis Mendo

14
まあ、いつ卒業するのかを教えるプログラムは必要ありません。26日であることはすでに知っています。
ドアノブ

7
@ドアノブ、何世紀?
msh210 2016

1
@DenkerAffeチャレンジが言語と完全に一致しないことを明確にすべきだと思います。
PurkkaKoodari 2016

9
@ msh210、いや、それは世紀です。
Peter Taylor

回答:


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

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

これは、条件がであるwhileループですinput()

Inhale.

私たちのプログラムは今呼吸する必要inhaleがあります。

Now sleep(1).

Nowインポートされた最新のモジュールを取得し、.sleep(1)それに追加します。

Backtracking.

whileループを終了しましょう。

Boring,
boring.

2つの改行を出力します。

Listen!

文字列のキャプチャを開始します。

Capture Done.

Done.キャプチャした文字列に追加します。

Carry on!

文字列のキャプチャを終了します。


3
楽しい言語のように見えます。通訳+ドキュメントへのリンクを追加しますか?
デンカー、2016

。@DenkerAffeドキュメントとインタプリタは見出し私だけで編集中に見つけることができます両方
コナー・オブライエン

@Conorありがとう、それを見てみます。:)
デンカー、2016

4

JavaScriptシェルREPL、38バイト

プログラムを文字列引数として受け入れ、結果を返す関数として:

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

Done.`

関数が行の配列の形式で入力を受け入れることができる場合、または文字ごとに1秒スリープする必要がある場合は29バイト:

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

Done.`

プログラムのようにして明示的にDoneを出力する場合は34バイト:

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

Done.`

これは、スタンドアロンのSpidermonkeyインタープリターで機能します。


4

JavascriptをES6、46の 45バイト

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

1バイトを節約してくれたsに感謝

入力として配列を想定します。

ӍѲꝆΛҐӍΛПҒЦꝆedc65の両方が指摘しているように、次のように書くことができますが、バイトは節約されません。

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

1
1e3より良いです10e2
ママファンロール

また、矢印関数を文字列に変換します。codegolf.stackexchange.com/a/60960/41247を
ママファンロール

@ӍѲꝆΛҐӍΛПҒЦꝆうまくいくかわかりません。彼はすでにテンプレート文字列を持っているので、それをエスケープする必要があります
Cyoce

@ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2見逃したなんて信じられない。
andlrc 2016

@ edc65あなたは最初にそれについて話したわけではありません。:-)
andlrc

4

Bash + coreutils、28

sleep `wc -l`
echo "

Done."

すべての行で1秒間スリープします。使用wc -cバイト毎の代わりに、またはwc -m代わりに、すべての文字に。


1
余分な改行はありませんか?
user253751

@immibisはい-そうです-修正されました。
デジタルトラウマ

3

Pyth、15 14バイト

.dcl.z1b"Done.

オンライン試すこともできますが、実際に試す意味はありません。)


あなたはその後のピリオドを逃しています(あなたがDone別の答えで同じことを誰かに言ったのでそれはかなり面白いです):P
Denker

@DenkerAffeありがとう。(ただし、バイトカウントは正しかった)
PurkkaKoodari 2016

@muddyfishそれは挑戦が言うことです。公式通訳は文字通りですが、待ち時間を避けるために行に変更しました。
デンカー、2016

@DenkerAffe Okエントリーはまったく同じです。誰を守る?彼らは正しい最初だったので、私はPietu1998を前提とするつもりだ
ブルー

bは必要ですか?
busukxuan 2016

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

これを指摘したいだけです。python2では2バイト短くなります。print "\ n \ nDone"
Random Guy

ああ、忘れました...ごめんなさい。
Random Guy

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 2016

@ Pietu1998おっと。修正。ありがとう!
Luis Mendo 2016

2

QBasic、54バイト

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

ユーザー入力からプログラムを1行ずつ取得し、空白行で終了します。精神ではないかもしれないが、各行を読んだ後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 2016

0

awk、34バイト

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

I / Oがなく、最終的な結果が避けられないため、Done.パーツは最初から出力されます。

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

awkでスリープする唯一の方法は、システムを使用することですsleep。それを呼び出す最短の方法はでprint|"sleep "NRあり、私たちはその役に立たないものを悪用することもできprintます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.