Pushy、20 17 16または13バイト
許可される内容に応じて、2つの解決策があります。
16バイト:
@$LT1U&Wm:v;O"cI
コマンドラインで引数を指定します$ pushy hiccup.pshy 'hiccupinator'
。これは、各「しゃっくり」の後に末尾の改行を付けて印刷します。内訳は次のとおりです。
% Implicit: input on stack as charcodes
@ % Reverse input, so chars are pulled from start
$ I % While there are items on stack:
T1U % Push a random number, 1-10
&W % Wait that many seconds
L m: % min(time waited, chars left) times do:
v; % Pull a char from the input.
O"c % Print & delete pulled chars
13バイト:
上記の答えをコーディングしている間、私はこの非常に短いソリューションを思いつきました:
N@$L1TU&Wm:'.
同様のことを行いますが、より少ないバイト数で新しい文字列を作成するのではなく、文字列から直接印刷します。これには、N
プログラムの開始時に改行の末尾を防ぐ必要があります。そうしないと、各文字が改行になります。
しかし、これをテストしているときにバグに気付きました- stdout
ラインバッファリングされているので、プログラムは完全な長さを待ってから、しゃっくりした文字列を表示します。
最新のコミットでこれを修正するために、単純なものを追加しました.flush()
-これは技術的には言語に新しい機能を追加するのではなく、バグを修正するだけですが、この答えを考慮に入れない場合は理解できます:)
内訳は次のようになります。
% Implicit: input on stack as charcodes
N % Set trailing newlines to False
@ % Reverse stack (so the charcodes are pulled off in order)
$ % While there are items left to print:
L % Push stack length
1TU % Push a random number 1-10
&W % Wait that amount of time
m: % min(time waited, chars left) times do:
'. % Pop and print last char