あひる、あひる、ガチョウ!


58

子供向けのゲーム「ダック、ダ​​ック、グース」を覚えていますか?番号?私でもない。

挑戦

  • 単語「duck」を個々の行に不定回数印刷します。
  • 単語「グース」を印刷します。
  • プログラムは終了します。

ルール

  • 最小バイトでゲームをプレイしてみてください。
  • 少なくとも1羽のアヒルがいる必要があります。
  • リストの最後に、ちょうど1羽のガチョウがいる必要があります。
  • 各行に正確に1羽の鳥がいる必要があります。空行はありません。
  • 出力される文字列の大文字小文字は関係ありません。
  • 行内の空白は問題ありません。
  • プログラムを終了する必要があります。
  • あなたのプログラムは一貫して同じ数のアヒルを生産してはいけません。

楽しんで!


注:この質問は、非決定的な出力を生成する最短コードの複製ではありません

理由は次のとおりです。

  • 子供向けゲームへの関連付け
  • 結果文字列の定義された開始および終了要件。他のチャレンジには指定された出力はありません。
  • 回答他の場合、重複していないチャレンジは1桁のバイト数です。これの平均は約30、またはそこにあります。
  • この課題とその課題との重複量により、「ランダム」タグを含むコードゴルフの問題は重複します。それらをすべて削除する必要がありますか?
  • このチャレンジに対するコードの回答は、他のチャレンジと一致します(途方もなく肥大化した方法で)が、そのチャレンジに対する回答はこのチャレンジと一致しません。

11
不確定を定義できますか?ゼロまたは1を意味しますか?
再帰的

1
これをランダムに生成する方法を定義してください。範囲内で均一か、指数関数的に減少しますか?
ハイパーニュートリノ

@recursiveいや、でも実際の定義にしましょう...プログラムは一貫して同じ数のアヒルを提示しません。
AJFaraday

2
ミネソタンと言えば、私の代わりに「アヒル、アヒル、灰色アヒル」と表示されたらどうでしょうか?:)
マイク・ヒル

1
@ jpmc26他にもあると思います。最初は他の人と一緒にプレイしなければならなかったでしょう。
-AJFaraday

回答:


9

ゼリー、13バイト

2X“¢;ÆS»ẋ“ʋ¢»

オンラインでお試しください!

説明:

2X“¢;ÆS»ẋ“ʋ¢»

2X             Random number (1 or 2)
  “¢;ÆS»       Compressed string equivalent to "duck\n"
        ẋ      Repeat the "duck\n" that random number of times
         “ʋ¢»  Compresses string equivalent to "goose"
               Implicitly concatenated and returned

より読みやすいバージョン:オンラインでお試しください!

常に1羽または2羽のアヒルを返します。


おめでとうございます!これがどのように機能するのか、文字通りわかりません!
AJFaraday

@AJFaraday先に進み、説明を追加しました
-PunPun1000

@ PunPun1000申し訳ありませんが、スタックは何ですか?Jellyは暗黙のプログラミング言語です。
user202729

@ user202729おっと、ジェリーと05AB1Eが頭の中でめちゃくちゃになりました。そのエラーを修正するために編集してください。ごめんなさい
-PunPun1000

Jellyには暗黙の連結がありますか?わーい!
MilkyWay90

43

Operation Flashpointスクリプト言語、48バイト

f={s="duck\n";s+([s,""]select random 1)+"goose"}

常に1羽または2羽のアヒルを印刷します。

random 10〜1の(浮動小数点)数を返します。その数はselect、配列とともに引数として渡されます[s,""]。次に、乱数は最も近い整数(0または1)に丸められ、そのインデックスの配列要素が配列から選択されます。

で呼び出す:

hint call f

出力:

代替56バイトバージョン:

f={s="duck\n";format[s+"%1goose",[s,""]select random 1]}

3
誰かがこれをPCGで使用すると、いつも嬉しくなります。
Nit

まあ、私はこのゲームが存在することを忘れていました。
カイメン

38

World of Warcraft 81バイト

World of Warcraftで実行できるマクロを次に示します。

/run for x=1,random(1,9) do SendChatMessage("Duck") end; SendChatMessage("Goose")

11
なんてこった…どうしてこんなことを考えたことがなかったんだ。
魔法のタコ

4
PVCG(プログラミングビデオゲームとコードゴルフ)。オペレーションフラッシュポイントは重要でしたが、すごいですか?このMinecraftとFactorioのソリューションを待っています。
ブレインガイダー

2
@AnderBiguri Minecraftの1つは81バイト(ブロック?)より少し悪くなると思われます;)
クリス

5
これで動作し、58バイトになります/run for x=1,random(1,9)do print("Duck")end print("Goose")
。– gastropner

35

マインクラフト<1.13、72の 54バイト

すみません、私はしなければなりませんでした。

手順:

  • クリエイティブモードで新しいMinecraftワールドを作成する
  • その世界の保存フォルダーを見つけて、次のコードを data/functions/minecraft/ddg.mcfunction
  • /function ddgゲームコンソールで実行する

使い方:

世界のすべてのエンティティに対して「duck」という単語を出力し、次に「goose」という単語を出力します。エンティティは絶えず生成および生成されるため、「アヒル」の数は一定ではありません。エンティティの名前を出力するのでtellraw、はるかに短いものの代わりに使用しました。saysaytellraw

execute @e ~ ~ ~ tellraw @a "duck"
tellraw @a "goose"

スクリーンショット

ここに画像の説明を入力してください

編集:{"text": "duck"}を単に "duck"に変更(および "goose"と同じ)


1
綺麗な。PPCGにはさらにMinecraftが必要です。
BradC

9
ことを言及する価値があなた(プレイヤー)は、世界の実体であるため、アヒルの数は(何の敵対的または受動的な暴徒がなかった場合でも)、0になることはありません。
BradC

1
@BradCは、Minecraftに基づいた全体的な課題があるはずです。
tox123

17

JavaScript、45 44 42 39 37バイト

オーバーフローエラーが発生する可能性があります。

f=_=>`duck
${new Date%2?f():`goose`}`

試して

o.innerText=(
f=_=>`duck
${new Date%2?f():`goose`}`
)()
<pre id=o></pre>


14

オクターブ38 33バイト

これは最短ではありません(36バイト)が、私のお気に入りです。説明は下にあります。

disp(['duck '+~(1:1/rand)';'goose'])

オンラインでお試しください!


いくつかの短いバリエーション:

これは原則として機能しますが(33バイト)、オンラインインタープリターはタイムアウトします。

disp(['duck '+~(1:now)';'goose'])

いくつかのバイトを追加して出力を短くすると、35または36バイトになります。

disp(['duck '+~(7e5:now)';'goose'])   % Works on octave-online.net
disp(['duck '+~(7.3e5:now)';'goose']) % Works on tio.run

説明:

最後のランダムなものだけを説明します。他のものも同様ですが、1月1日から0000までの日数を使用して今日までです。

rand間隔(0、1)で乱数を返します。したがって、11/randより大きい数値を返します。範囲(が1より大きいランダムフロートである)はに等しいため、範囲1 .. xx> = 1)を作成します。1:ff1:floor(f)1:1/rand

これをOctaveがスタックベースの言語であるかのように説明しようとします。

      'duck '                           % Push the string 'duck ' to the stack
               (1:1/rand)               % Push a vector 1... floor(1/rand)
              ~(1:1/rand)'              % Negate the vector (making it all zeros)
                                        % and transpose it.
             +                          % Add 'duck ' with the vertical vector of zeros
                                        % to implicitly duplicate the string r times
     [                    ;'goose']     % Push the string 'goose' and concatenate
                                        % vertically with the rest
disp(                              )    % Display it all.

disp(['duck '+~pwd';'goose'])?これが十分に「不確定」かどうかわからない
ルイスメンドー

12

Perl 5、20バイト

最初に実用的な26バイト:

グースされる前に1〜9回アヒル。

say"Duck
"x(1+$^T%9),Goose

オンラインでお試しください!

しかし、メモリと時間に余裕がある場合、この20バイトバージョン(Chrisが提案)も機能します。

say"Duck
"x$^T,Goose

これは、Perl 5の2038年問題が解決されることを前提としています。それ以外の場合は、20年間1秒間無効になります。


1+$^T%9just $^Tに変更した場合でも機能し、4バイトを節約できます。
クリス

@chrisあなたは明らかに私よりも多くの記憶を持っています。それでも、それが動作する合理的なコンピューターがあるので、私はあなたの提案を取るでしょう。ありがとう。
トンホスペル

12

パイソン236の 34バイト

print"duck\n"*((id(id)%5)+1),"goose"

オンラインでお試しください!

Kevin Cruijssenによる提案により、34バイトになりました。

print"duck\n"*-~(id(id)%5),"goose"

3
このサイトへようこそ、そして最初の回答がいいです!
caird coinheringaahing

PPCGへようこそ!かっこを取り除く((id(id)%5)+1)ため-~(id(id)%5)にに変更すると、2バイトをゴルフできます。<すべての言語>でゴルフのヒントPythonでのゴルフのためのヒントをお読み面白いかもしれません。滞在を楽しんで!
ケビンクルーッセン

1
できid(id)ないid(0)か、何か不足していますか?
ジョナサンフレッチ

@Johnathanはid(0)、2、3台の異なるコンピューターを見ると、それが一定であることを示唆しています。
user2699

1
少し直感的で、もうバイトは必要ありませんid([])。これにより、プログラムを実行するたびに個別のリストが初期化され、理論上は常に異なるメモリアドレスが生成されます。
jpmc26

11

Zシェル(+ wgetおよびNetpbm)、 168 160 150 148 145 135 120バイト

d(){wget -O- bit.ly/$1|jpegtopnm|pamscale -w 64 -h 64};d DckDkGo|pnmtile 64 $[(RANDOM&7+1)*64]|pnmcat -tb - <(d g005eGG)

最短の解決策ではありませんが、この課題(この他の問題に対する@AlexGの解決策に触発された)にちょっとした工夫をしたいと思いました

このスクリプトは、標準出力のアヒルの1〜8枚の写真と下部のガチョウの写真を含むPPM画像を生成します。ウィキペディアから2つのソース画像をダウンロードするため、インターネットアクセスが必要です。

pnmtojpegを介してJPEGに変換されたサンプル出力:

ここに画像の説明を入力してください


1
これで完全に私の一日が終わりました!
AJFaraday

私はあなたが私がリンクした他の挑戦を提案したのと同じ人だということに気づきました。xDまあ、これが気に入ってよかった!= D
lucasb

うん、私のコードゴルフチャレンジにはいくつかのテーマがあります:)絵の答えには必ずボーナスポイントを与える必要があります。
AJFaraday

これは、外部リソースを取得するための標準的な抜け穴ではありませんか?
MilkyWay90

10

R、35バイト

cat(rep("duck
",rexp(1)+1),"goose")

オンラインでお試しください!

rexp()指数関数的減衰関数から乱数を生成します。+1少なくとも1羽のアヒルを確保します。最初の行以降のすべての行には、先頭のスペース(のデフォルトの区切り文字cat)が含まれていますが、これは許可されています。


1
複数のアヒルが出力される確率はexp(-1)、36.8%前後です。
ジュゼッペ

各行に印刷するように求められます。「アヒル」に「\ n」を追加する必要があると思う
スチュアートスティーブンソン

3
@stuartstevensonここ\nでは、1バイト短いのではなく、リテラルの改行を使用しています。「オンラインで試す」にアクセスした場合 リンクをクリックすると、効果が同じであることがわかります。
user2390246

DOS / Windowsボックスでは、その改行はまだ2バイトです。0x0d0a
点灯

10

Bash39 38 37バイト

sed s/[0-9]/duck\\n/g<<<$RANDOM\goose

オンラインでお試しください!

[0,32767]に均一に分布した整数の桁数に等しい数のアヒルを印刷します(したがって、ほとんどの場合、5つのアヒル(十分な数のアヒル))。

@Chrisと@schがそれぞれの重みを引き出さなかった引用符のペアを指摘してくれたおかげで、それぞれ-1バイト。


1
PPCGへようこそ!
Steadybox

1
あなたは、限り、あなたは置き換えとして単一引用符を取り除くことにより、1つのバイトを保存することができ\n\\n
クリス

1
良いアイデア。30バイトのsedを使用せずにbash構造だけで同様のことができます。
デジタル外傷

1
sed s/[0-9]/duck\\n/g<<<$RANDOM\goose1つのバイトをオフに剃ることができます
SCH

1
sed完全にポータブルではありません。一部のプラットフォームでは、で単一のバックスラッシュを使用して逃げることができます\n。他の人は、あなたが何をしようとも改行を取得しません。
トリプリー

9

Pure Bash(外部ユーティリティなし)、25

@SophiaLechnerの回答に基づいて、これはかなりの数のアヒルも印刷ます。

$パラメータに保存されているスクリプトシェルPIDを使用する@OlivierDulacのアイデアは、5バイトを節約します。

echo "${$//?/duck
}"goose

オンラインでお試しください


1
プログラムを起動すると仮定すると、毎回異なるpidを取得します。多くの場合、5桁の長さになりますが、常にではありません。それゆえ:変更RANDOM$5つのバイトを剃るために、もう1つはまた、アヒルの非常に長い文字列を行うことができます:?yes duck|head -n $$;echo goose
オリヴィエ・デュラック

@OlivierDulacはい、使用$$は許容できると思います-ありがとう!
デジタル外傷

どういたしまして!yes duck | head -n $$;echo goose代替として他のバージョン()を投稿しました(あなたのバージョンよりも長いですが、5個の余分な文字のためにたくさんのアヒルを取得します^^)
オリビエデュラック


8

Bash + Coreutils、36 27バイト

yes duck|sed $$q;echo goose

あまりにも多くのアヒル(2〜cat /proc/sys/kernel/pid_max)を印刷してから、1羽のガチョウを印刷します。

Digital TraumaとOlivier Dulacのおかげで9バイト節約されました。

オンラインでお試しください!(ただし、時々切り捨てられる場合があることに注意してください)

長さは同じですが、なしecho

yes duck|sed $${agoose'
q}'

オンラインでお試しください!

aはのappendコマンドでsedあり、q終了します。どちらも$$PIDに対応する行でのみ実行されます。


Bashにはモジュロがありますが、サイズが大きくなります。トライhead -n $((1+(RANDOM % 5)))
トリプルリー

@tripleeeこれはコードゴルフであるため、コードのサイズを大きくするよりも出力のサイズを大きくすることをお勧めします。また、132767羽のアヒルは、他の場所で見られる10億個以上と比較して、かなり合理的です;)
クリス

1
確かに、誰かが実際にこの画期的な研究を実際にいつか応用したい場合に役立つことを望んでいます。TIOのように。一部のスペースが削除された44バイト。
トリプリー

@OlivierDulac $$$RANDOM私の答えの代わりにを使用することを提案しました。同じものを使用して5バイト節約できると思います。ああ、試してみてくださいsedyes duck|sed 1$$q;echo goose
デジタル外傷

実際yes duck|sed $$q;echo goose、大丈夫です。スクリプトがPIDを1未満にすることはないと思います。
Digital Trauma

7

PowerShell35 30 28バイト

,"duck"*((Random)+1)
"goose"

オンラインでお試しください!(修正版)

Get-Randomアイテム数の配列を生成します。しばらく時間がかかる場合があります。これにより、+1少なくとも1つを取得することができduckます。変更されたバージョンには-maximumフラグも含まれている5ため、プログラムが期待どおりに動作することを確認できます(変更されたバージョンは、duckの前に1、2、3、または4 秒出力しますgoose)。

配列と単独のgoose文字列はパイプラインに残され、暗黙的にWrite-Output改行で区切られた値が無料で提供されます。

最後の行を「灰色のアヒル」に変更しないことがどれだけ難しいかわかりません...


その変種はかなり楽しいサウンド、およびコード挑戦する価値は...私はあなたが数日待ってから、あなた自身:)の挑戦としてそれを投稿お勧めします
AJFaraday

1
@AdmBorkBork、このミネソタンはこのグループに加わり、灰色のアヒルを+1しました。
Milwrdfan

0..(random)|%{'duck'};'goose'29のように見えます。また、ガチョウの前の[int] :: MaxValue(21億)までのアヒルを生成します。(そして0..0アヒルを印刷します)
TessellatingHeckler

@TessellatingHecklerありがとう。しかし、28バイトのバージョンを思いついたばかりです。:)
AdmBorkBork



6

Brachylog24 21バイト

Erik the Outgolferのおかげで-3バイト

"duck"ẉ4ṙ0∧"goose"w∨↰

オンラインでお試しください!

今月言語を祝って、私の最初のブラキログ投稿。この言語の制御フローはクールです。

使い方:

"duck"ẉ4ṙ0∧"goose"w∨↰
"duck"ẉ                 print duck with a new line
       4ṙ               choose a random number in the range is [0, 4]
         0              verify it equals zero
          ∧             and (short circuits)
           "goose"w     print goose without a newline
                   ∨    or (if it did not equal zero)
                    ↰   repeat the procedure

だから、私がこれを右に読んでいる場合、左から右、下から上に読むのですか?
AJファラデー

2
この言語は、プログラムの最初の行だけを使用して論理的な真実を見つけようとします。私のプログラムは「2行目を検証してから、ガチョウを印刷する」と言っています。そして、2行目はとても技術的に、右のちょうど一番上の行にあなたがそこから呼び出して任意の述語を左に、「印刷アヒルが、その後、0〜4が0である乱数を検証し、あるいは再びこの行を検証する」と言う
PunPun1000

すばらしいですね、新しい言語がどのように機能するかを知るのはとても興味深いです。それは私の受信トレイに届きましたが、それは私が質問を提起したのか、それともすでにここでコメントしたのかどうかはわかりません。
-AJファラデー

このような 2つの述語をマージして、私を結び付けることができます。
エリックアウトゴルファー

6

Geometry Dash World 2.2 Editor -4つのオブジェクト

ジオメトリダッシュレベルの画像

説明:

BGトリガーは現在の2.2のランダムトリガーであるため、グループID 1または2を切り替えます。

最初の「DUCK」のグループIDは1であるため、削除されるかされない(トグルされる)可能性は50%です。

このレベルにはグループID 2のオブジェクトはないため、2つの「DUCK」が表示される可能性は50%です。

これを再現する方法:

最初の「DUCK」のグループIDは1です。

ここに画像の説明を入力してください

ガチョウと2匹目のアヒルはグループIDを持っていません ここに画像の説明を入力してください

ランダムトリガー内。 ここに画像の説明を入力してください


このチャレンジのテーマを感じています
ベンジャミンアーカート

@BenjaminUrquhartなに?
MilkyWay90

Word of Warcraft、Minecraft、およびその他のゲームの提出物もあります。
ベンジャミンアーカート

2
@BenjaminUrquhart答えるゲームをもっと見つけてください
MilkyWay90

5

05AB1E15 14バイト

'Ðœ₁Ωи`.•zíΘ•»

オンラインでお試しください!

2、5、または6羽のカモを印刷してから、ガチョウを印刷します。

単一の圧縮された単語(アヒル)に 'を使用する@Emignaのおかげで-1バイト


1
'Ðœアヒルは一語なので使用できます。
エミグナ

1
私を['ÐœTΩ#].•zíΘ•»
打つ

@MagicOctopusUrnあなたの無限ループアプローチが本当に好きです。あなたの答えは間違いなく挑戦の精神(またはそれがどうあるべきか)にあります。それは無限の量のアヒルを出力できるからです。
カルド

@Kaldoはまだ、あなたに15バイトを失う;)
マジックタコ

1
代替14バイト:'Ðœ₁Ω.D.•zíΘ•»
マジックタコ


5

網膜、17バイト

?\\K`duck
K`goose

オンラインでお試しください!

オンラインでお試しください!

等しい確率で1羽または2羽のアヒルを印刷します。

説明

?\\K`duck

作業文字列をに設定duckし、末尾の改行(\)で印刷します。次に、これは別の出力ステージにラップされますが、このステージにはランダムフラグ(?)が適用されているため、50%の確率でのみ印刷されます。

K`goose

交換するduckgoose、プログラムの最後に、暗黙的に印刷されています。

これは、50%の確率で1羽のアヒル、25%で2羽のアヒル、12.5%で3羽のアヒルを印刷する楽しい代替手段です。

\K`duck
?+\G`
K`goose

5

LinuxのVim(スクリプト)、 46 43バイト(4946 :行の先頭に)

.!date +0\%N\%s6
s/6.*/goose
s/\d/duck\r/g

実行vim -S filenameまたは実行中に貼り付けるvim:、各ラインの前に。


2
PPCGへようこそ!\d以上で使用できるはず[0-9]です。また、vimは末尾の改行を必要としないように見えるため、これは45バイトになります:)
H.PWiz

PPCGへようこそ!
Steadybox

5

> <>31 22バイト

"duck"a>x
r"esoog"<>o<

オンラインでお試しください!

ツリーのリビジョンではないことに基づいて-9バイト


1
削除l?!;してエラーで終了する可能性があります。
エミグナ

1
そして、あなたはこの
エミグナ

1
またはこのように。
木ではない

3
@Notatree「\ nkcud \ nkcud ...」と印刷されることがあります。めったに正しく動作しない
-Suppen

1
@Suppenミラーの代わりに矢印を使用するだけで修正されます。編集を参照してください。
KSmarts

5

Befunge 9838の 30 25バイト

"esooG"v>:#,_@
"Duck"a<?<

オンラインでお試しください!

  • 役に立たないトランポリンを除去してくれてありがとう@JoKing
  • 新しい行を短くするためにBefunge 98に切り替える- Duck単一の文字列に収まるようになりました

1
#2行目は必要ありません
ジョーキング

そして、「技術的に」、whitespace within a line is fineあなたは(出力は奇妙に見える場合でも)引用符のカップルを切り出すことができるように
ジョー・キング

@JoKingありがとう、私の編集をご覧ください。
ビンセント

5

T-SQL70 44 43バイト(多くのアヒル)

while rand()<.9print'duck'print'duck
goose'

@Zac Faragherに感謝します!

改訂版、54 43 40バイト(1または2アヒル)

ありがとう@BradC!

if rand()<.5print'duck'print'duck
goose'


SQL Fiddleで これを適切に実行することはできないようですが、LINQPadとSSMS では正常に動作します

これがSQL Fiddleの既知の制限なのか、何か間違っているだけなのかわからない


いいね 61へのダウンあなたが変更した場合selectprint、最終的に置き換える'duck'select'goose''duck(linebreak)goose'(もちろんリテラル改行、と)
BradC

実際には、あなたはちょうどwhile rand()<.5print'duck'print'duck(linebreak)goose'43のために行うことができます
。– BradC

@BradCに感謝します。char(13)を追加する以外に、文字列で改行を表す別の方法はありますか?
おそらく

うん、文字通り引用符の中にリターンを入れて、あなたの投稿を編集してあなたを表示します(コメントはリターンを表示しません)。
BradC

1
さらに3バイトを節約:最初のバイトをに変更whileifます。(ランダムに)1羽または2羽のアヒルを印刷します。
BradC

5

Powershell- 31 30バイト

警告:あなたは多くのアヒルになってしまうでしょう。Random0からInt32.MaxValuesoの値が含まれますが、あなたがどのくらいランダムであるかにもよりますが、これは多くの変なことです。

1..(Random)|%{"Duck"};"Goose"

$前に必要はありません(Random)オンラインでお試しください!
AdmBorkBork

@AdmBorkBorkキャッチしてくれてありがとう!
SomeShinyObject



4

ベファンジ

57 35バイト(フィールド全体の境界は19x3 17x2文字です)改善してくれたkarhellに感謝します。

55+"kcud",,,,,#v?
  @,,,,,"goose"<

2行目は、スタックにアヒルと改行を(後方に)置き、それを文字列として出力します。75%の確率でスタートに戻り、再び鴨を印刷し、25%(疑問符が下がったと判断した場合)は、ガチョウを印刷して停止します。


グースの50%のチャンスが許容できる場合、55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"< コードを35バイトに削減します
karhell

ああ、甘いラップアラウンド。あなたは正しい、ありがとう、後で更新を投稿します!
rael_kid
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.