青鴨、赤鴨、灰色鴨


48

だから、先週、ダック、ダ​​ック、グースをプレイするチャレンジを投稿しました。これは、地域の「灰色のアヒル」のバリエーションについてコメントする多くのミネソタンにつながりました。

ルールは次のとおりです。

この色のリストを使用して:

Red
Orange
Yellow
Green
Blue
Indigo
Violet
Gray

次の規則に従うプログラムを作成します。

  1. これらの色のいずれかを選択し、「duck」という単語の前に追加して、結果を新しい行に出力します。
  2. 色が「グレー」ではなかった場合は、手順1を繰り返します。
  3. 色が「グレー」の場合、プログラムを終了します。

従わなければならない規則:

  • プログラムは一貫して同じ行数を印刷するべきではありません。
  • 「灰色のアヒル」から始めることができますが、一貫して行うべきではありません。
  • 各行にアヒルが1匹だけいるはずで、空の行は出力されません。
  • 色とアヒルの間に少なくとも1つのスペースが必要です。
  • 重要な出力の前後の空白は関係ありません。
  • 出力の大文字小文字は関係ありません。
  • 色を繰り返すことができます。
  • 出力には毎回すべての色が含まれている必要はありませんが、コードがすべての色を出力できるようにする必要があります。
  • 上記の配列以外の色を含めることはできません。
  • グレーまたはグレーのいずれかで回答できます。
  • 色は一貫して同じ順序であってはなりません。
  • 最短のプログラムを目指してください。最小のバイト数が優先されます。

出力例:

Green duck
Orange duck
Yellow duck
Indigo duck
Yellow duck 
Gray duck

この変化について最初に警告してくれた@Mike Hillに感謝します。


結果の分布に関する規則はありますか?グレー以外の色からランダムに何回もGrey選択してから1回印刷することで有効な出力を生成できるため(すべてを選択して選択したかどうかを確認する必要はありませんGrey)。
マーティンエンダー

@MartinEnderそれは結構です。「色は一貫して同じ順序であってはなりません。」重要ですが、最後にグレーを個別に選択するのを止めるものは何もありません。
AJファラデー

3
代替スペル「グレー」は許可されていますか?
12Me21

@ 12Me21好奇心が強い、カントー。それには技術的な理由がありますか?それとも単に美的なものですか?
AJファラデー

2
私のそれほど謙虚な意見では、あなたは1つの非常に重要なアヒルの色が欠けています。青は近いですが、十分に正確ではありません。
コバルトダック

回答:


6

05AB1E42 40バイト

Erik the Outgolferのおかげで2バイト節約

[“ëßigo°¯†¾›ÈŠÛˆ¨‡—°Íolet“#7ÝΩ©è'Ðœðý,®#

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


3
これらの読めないゴルフ言語の多くに気づきました。もっと人間が読める形式のコンパイラはありますか?
AJファラデー

@AJFaraday:私が知っていることではありません。私が知っている唯一のゴルフ言語は、チャコールです。
エミグナ

1
あなたはさらに、あなたの文字列を圧縮することができ、indですëß
エリックアウトゴルファー

1
Gs2にも1つあります。しかし、最近ではその言語はあまり使われていません。
再帰的


46

LuaLaTeX、220 211文字

コマンド:

lualatex -interaction nonstopmode

最短ではなく、空想的。@skillmonのソリューションに基づく

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

\RequirePackage{tikzducks}\newcount\b\let~\def~\0{red}~\1{orange}~\2{yellow}~\3{green}~\4{blue}~\5{cyan}~\6{violet}~\7{gray}\loop\b\uniformdeviate8\tikz\duck[body=\csname\the\b\endcsname]; \ifnum\b<7\repeat\stop

9
良い天国!これは最高です!あなたは私の一日を作った、アレックス。
AJFaraday

使用する@AJFaraday確かに素晴らしいアイデアtikzducksが:)
Skillmon

6
+1と、このような長いパッケージ名を選択したことに対する謝罪!

@サム、あなたは私の赦免を得る
-AlexG

8
こんにちは TeX.sxのような他の技術コミュニティから私が絶対に知らない人。この答えは、Anatidaeファミリーの一部の鳥を対象としているため、賛成票を投じて承認のトークンを提供することを余儀なくされています。:)
パウロセラダ

26

6502マシンコード(C64)、124バイト

00 C0 AD 12 D0 85 02 A2 17 8E 18 D0 A5 02 F0 03 0A 90 02 49 1D 85 02 A8 CA 10
02 A2 2F BD 42 C0 D0 F6 88 D0 F3 86 FB E8 BD 42 C0 F0 06 20 16 E7 E8 D0 F5 AA
BD 73 C0 F0 06 20 16 E7 E8 D0 F5 A6 FB D0 C9 60 00 C7 52 45 59 00 D2 45 44 00
CF 52 41 4E 47 45 00 D9 45 4C 4C 4F 57 00 C7 52 45 45 4E 00 C2 4C 55 45 00 C9
4E 44 49 47 4F 00 D6 49 4F 4C 45 54 00 20 44 55 43 4B 0D 00

オンラインデモ -使用法:SYS49152

スクリーンショット


説明(コメント付きの分解):

         00 C0       .WORD $C000        ; load address
.C:c000  AD 12 D0    LDA $D012          ; current rasterline as seed
.C:c003  85 02       STA $02            ; to "random" value
.C:c005  A2 17       LDX #$17           ; cfg for upper/lower, also use as
.C:c007  8E 18 D0    STX $D018          ;    initial index into colors array
.C:c00a   .loop:
.C:c00a  A5 02       LDA $02            ; load current random val
.C:c00c  F0 03       BEQ .doEor         ; zero -> feedback
.C:c00e  0A          ASL A              ; shift left
.C:c00f  90 02       BCC .noEor         ; bit was shifted out -> no feedback
.C:c011   .doEor:
.C:c011  49 1D       EOR #$1D
.C:c013   .noEor:
.C:c013  85 02       STA $02            ; store new random val
.C:c015  A8          TAY                ; use as counter for next color string
.C:c016   .findloop:
.C:c016  CA          DEX                ; next char pos in colors (backwards)
.C:c017  10 02       BPL .xok           ; if negative ...
.C:c019  A2 2F       LDX #$2F           ;    load length of colors - 1
.C:c01b   .xok:
.C:c01b  BD 42 C0    LDA .colors,X      ; load character from colors
.C:c01e  D0 F6       BNE .findloop      ; not zero, try next character
.C:c020  88          DEY                ; decrement random counter
.C:c021  D0 F3       BNE .findloop      ; not zero, continue searching
.C:c023  86 FB       STX $FB            ; save character position
.C:c025  E8          INX                ; increment to start of color
.C:c026   .outloop:
.C:c026  BD 42 C0    LDA .colors,X      ; output loop for color string
.C:c029  F0 06       BEQ .duckout
.C:c02b  20 16 E7    JSR $E716
.C:c02e  E8          INX
.C:c02f  D0 F5       BNE .outloop
.C:c031   .duckout:
.C:c031  AA          TAX                ; A is now 0, use as char pos for duck
.C:c032   .duckoutloop:
.C:c032  BD 73 C0    LDA .duck,X        ; output loop for duck string
.C:c035  F0 06       BEQ .outdone
.C:c037  20 16 E7    JSR $E716
.C:c03a  E8          INX
.C:c03b  D0 F5       BNE .duckoutloop
.C:c03d   .outdone:
.C:c03d  A6 FB       LDX $FB            ; load saved character position
.C:c03f  D0 C9       BNE .loop          ; not zero -> continue main loop
.C:c041  60          RTS                ; zero was start of "Grey" -> done
.C:c042   .colors:
.C:c042  00 c7 52 45    .BYTE 0, "Gre"
.C:c046  59 00 d2 45    .BYTE "y", 0, "Re"
.C:c04a  44 00 cf 52    .BYTE "d", 0, "Or"
.C:c04e  41 4e 47 45    .BYTE "ange"
.C:c052  00 d9 45 4c    .BYTE 0, "Yel"
.C:c056  4c 4f 57 00    .BYTE "low", 0
.C:c05a  c7 52 45 45    .BYTE "Gree"
.C:c05e  4e 00 c2 4c    .BYTE "n", 0, "Bl"
.C:c062  55 45 00 c9    .BYTE "ue", 0, "I"
.C:c066  4e 44 49 47    .BYTE "ndig"
.C:c06a  4f 00 d6 49    .BYTE "o", 0, "Vi"
.C:c06e  4f 4c 45 54    .BYTE "olet"
.C:c072  00             .BYTE 0
.C:c073   .duck:
.C:c073  20 44 55 43    .BYTE " duc"
.C:c077  4b 0d 00       .BYTE "k", $d, 0

申し訳ありませんが、あなたのデモはアヒル関連のコンテンツを出力していないようです。
AJファラデー

1
@AJFaradayは「使用」部分に注意してください...それを実行するコマンドはsys 49152です。
フェリックスパルメン

さて、それは私の日を作りました:)
AJFaraday

1
それはすごかった。c64アセンブリを作成してからしばらく経ちました。
lsd

2
@lsd:ここも同じ!私の最初のプログラムは、C64での6502アセンブリでした。これは、私が手に入れたばかりで、友人が「ゲームを書く!」というタスクのある6502本をくれたからです。私は何かを書くように私をjumsptartする!(素晴らしい方法です!ただ読むだけでなく、実際に何かを書くことは素晴らしい動機でした)。192バイト(iirc)の「ヘビ」プログラム(ヘビの位置の頭と尾を指す巧妙なダブルインデックスを使用)を作成しました...最初に試してみてください。残りのラムは、「@」で成長し、壁の設置を忘れていたので、^^
オリビエデュラック


10

タクシー、1995バイト

Go to Heisenberg's:w 1 r 3 r 1 l.[a]Pickup a passenger going to Divide and Conquer.8 is waiting at Starchild Numerology.8 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 3 l 1 l 3 l.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Multiplication Station.Go to Divide and Conquer:w 1 r 3 r 1 r 2 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 1 l 2 l.Pickup a passenger going to What's The Difference.Pickup a passenger going to Trunkers.Go to Zoom Zoom:n.Go to Trunkers:w 3 l.Pickup a passenger going to What's The Difference.Go to What's The Difference:w 2 r 1 l.Pickup a passenger going to Multiplication Station.1 is waiting at Starchild Numerology.Go to Starchild Numerology:e 1 r 1 l 3 l.Pickup a passenger going to Addition Alley.Go to Multiplication Station:w 1 r 2 r 1 r 4 l.Pickup a passenger going to Addition Alley.Go to Addition Alley:n 2 l 1 r 3 l 1 l.Pickup a passenger going to The Underground.'Red duck\n' is waiting at Writer's Depot.'Orange duck\n' is waiting at Writer's Depot.'Yellow duck\n' is waiting at Writer's Depot.'Green duck\n' is waiting at Writer's Depot.'Blue duck\n' is waiting at Writer's Depot.'Indigo duck\n' is waiting at Writer's Depot.'Violet duck\n' is waiting at Writer's Depot.'Grey duck' is waiting at Writer's Depot.Go to Writer's Depot:n 1 l 1 l.[b]Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 3 r 1 l 1 r.Go to The Underground:e 1 r.Switch to plan "c" if no one is waiting.Pickup a passenger going to The Underground.Go to Writer's Depot:s 2 r 1 l 2 l.Switch to plan "b".[c]Go to Narrow Path Park:n 4 l.Pickup a passenger going to Post Office.Go to Post Office:e 1 r 4 r 1 l.Go to Writer's Depot:s 1 r 1 l 2 l.Switch to plan "a" if no one is waiting.[d]Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 2 r.Go to Writer's Depot:n 1 l.Switch to plan "e" if no one is waiting.Switch to plan "d".[e]Go to Heisenberg's:n 3 r 3 r.Switch to plan "a".

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

このコードの47%が1から8までのランダムな整数を選んでいることに注意する価値があると思います。
また、タクシーは非常に冗長なのでduck\n、後で連結するのではなく、各色の後にハードコードする方がずっと短いです。
これはゴルフのないバージョンです。

Go to Heisenberg's: west 1st right 3rd right 1st left.

[Pick up a random INT 1-8 going to The Underground]
[a]
Pickup a passenger going to Divide and Conquer.
8 is waiting at Starchild Numerology.
8 is waiting at Starchild Numerology.
Go to Starchild Numerology: north 1st left 3rd left 1st left 3rd left.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Multiplication Station.
Go to Divide and Conquer: west 1st right 3rd right 1st right 2nd right 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: east 1st left 1st left 2nd left.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to Trunkers.
Go to Zoom Zoom: north.
Go to Trunkers: west 3rd left.
Pickup a passenger going to What's The Difference.
Go to What's The Difference: west 2nd right 1st left.
Pickup a passenger going to Multiplication Station.
1 is waiting at Starchild Numerology.
Go to Starchild Numerology: east 1st right 1st left 3rd left.
Pickup a passenger going to Addition Alley.
Go to Multiplication Station: west 1st right 2nd right 1st right 4th left.
Pickup a passenger going to Addition Alley.
Go to Addition Alley: north 2nd left 1st right 3rd left 1st left.
Pickup a passenger going to The Underground.

[Use the random INT to select a color]
'Red duck\n' is waiting at Writer's Depot.
'Orange duck\n' is waiting at Writer's Depot.
'Yellow duck\n' is waiting at Writer's Depot.
'Green duck\n' is waiting at Writer's Depot.
'Blue duck\n' is waiting at Writer's Depot.
'Indigo duck\n' is waiting at Writer's Depot.
'Violet duck\n' is waiting at Writer's Depot.
'Grey duck' is waiting at Writer's Depot.
Go to Writer's Depot: north 1st left 1st left.
[b]
Pickup a passenger going to Narrow Path Park.
Go to Narrow Path Park: north 3rd right 1st left 1st right.
Go to The Underground: east 1st right.
Switch to plan "c" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Writer's Depot: south 2nd right 1st left 2nd left.
Switch to plan "b".

[Output the selected color]
[c]
Go to Narrow Path Park: north 4th left.
Pickup a passenger going to Post Office.
Go to Post Office: east 1st right 4th right 1st left.

[If the color was grey, exit by error]
Go to Writer's Depot: south 1st right 1st left 2nd left.
Switch to plan "a" if no one is waiting.

[Get rid of the rest of the colors]
[You could throw them off a bridge but you won't get paid]
[d]
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 2nd right.
Go to Writer's Depot: north 1st left.
Switch to plan "e" if no one is waiting.
Switch to plan "d".

[Start over from the beginning]
[e]
Go to Heisenberg's: north 3rd right 3rd right.
Switch to plan "a".

読むのは楽しかったです。
マコトサン

ゴーリー、それは難解です!どのように機能するのか理解できません。たくさんの楽しみ、カントー:)
AJFaraday

これはに関連すると思われるFetlang
Skillmon

8

Java(OpenJDK 9)、133バイト

v->{for(int x=9;x>0;)System.out.println("Grey,Red,Orange,Yellow,Green,Blue,Indigo,Violet".split(",")[x+=Math.random()*8-x]+" duck");}

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

説明

v->{                              // Void-accepting void lambda function
  for(int x=9;x>0;)               //  Loop until x is zero
    System.out.println(           //   Print...
        "Grey,Red,Orange,         //       colors, "Grey" first
         Yellow,Green,Blue,       //          more colors
         Indigo,Violet"           //          more colors
        .split(",")               //       as an array
          [x+=Math.random()*8-x]  //       pick one randomly, use implicit double to int cast with "x+=<double>-x" trick
        +" duck");                //      Oh, and append " duck" to the color.
}

8

ルビー93 91 90 89 87 86 85バイト

Dom Hastingsが2バイト、Kirill L. 1バイト、Asone Tuhid 1バイトを節約してくれてありがとう!

puts %w(Red Orange Yellow Green Blue Indigo Violet Grey)[$.=rand(8)]+" duck"while$.<7

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


()コードの周りを削除して、インデックスを保存する$.代わりに使用すると、完全にs作成することを回避できsます($.行番号に事前に初期化されているため!)Greyリストの最後に移動して$.<7代わりに確認する必要がありますしかし。お役に立てば幸いです!
ドムヘイスティングス

@DomHastingsありがとう!私はを取り除くための方法を探していたs=1$.完璧でした!
クリスチャンルパスク

後でスペースを削除することもできると思いますが、Rubyはそれについて文句を言うようには見えません。
キリルL.

@KirillL。そうです、ありがとう!以前は持っていwhile s...て、スペースが必要でした。に変更s$.た後、この機会はありませんでした。
クリスチャンルパスク


7

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

f={s="";v=s;while{v!="grey"}do{v=["Red","Orange","Yellow","Green","Blue","Indigo","Violet","Grey"]select random 7;s=s+v+" duck\n"};s}

で呼び出す:

hint call f

出力例:

最初は、目標が「グレイダック」ラインで終わるとは限らず、単にさまざまな量のラインを出力することであるかのように、どういうわけかチャレンジを誤解しました。その誤った解釈に続いて、もう少し興味深いコードが生成されました。

f={s="";c=[1];c set[random 9,0];{s=s+(["Red","Orange","Yellow","Green","Blue","Indigo","Violet","Grey"]select random 7)+" duck\n"}count c;s}

7

pdfTeXの、231の 220 219 209 207バイト

\newcount\b\let~\def~\0{Red}~\1{Orange}~\2{Yellow}~\3{Green}~\4{Blue}~\5{Indigo}~\6{Violet}~\7{Gray}~\9{ }\newlinechar`z\loop\b\pdfuniformdeviate8\message{z\csname\the\b\endcsname\9duck}\ifnum\b<7\repeat\bye

LuaTeX、216の 206 204バイト

\newcount\b\let~\def~\0{Red}~\1{Orange}~\2{Yellow}~\3{Green}~\4{Blue}~\5{Indigo}~\6{Violet}~\7{Gray}~\9{ }\newlinechar`z\loop\b\uniformdeviate8\message{z\csname\the\b\endcsname\9duck}\ifnum\b<7\repeat\bye





4

オクターブ114 112バイト

do disp([strsplit('Red Orange Yellow Green Blue Indigo Violet'){i=randi(7)},' duck'])until i>6
disp('Grey duck')

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

すべてが112〜118バイトのさまざまなオプションがあります。開始時にインデックスを初期化し、ループごとに乱数でデクリメントし、0になるまで待機するものもあります。他の人は、いくつかの括弧などを避けるためにprintf代わりに使用dispします。


ちょっとした質問:オクターブ単位でExcelの&と同じような記号がありますか?それはコードをさらに短くすることができると思うからです。
ミクサン

1
残念ながら、いいえ...文字列は角括弧内で連結する必要があります(またはcatand などの関数を使用する必要がありhorzcatます。ありがとうございます。)
Stewie Griffin

4

PHP133 125 111 108 97 92バイト

<?for(;$b=[Red,Orange,Yellow,Green,Blue,Indigo,Violet][rand(0,7)];)echo"$b duck
"?>Grey duck

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

@OlivierGrégoireのおかげで-8バイト

@manatworkのおかげで-3バイト

@Dom Hastingsのおかげで-11バイト


2
色文字列とテストでは、使用されていないため、に変更GreyXます。6バイト増えます。
オリビエグレゴワール

@OlivierGrégoireああ、そうだね。それをありがとう:)
ダビッド

1
forの条件を逆にして、括弧を必要としません:x!=$b=$a[array_rand($a)]。ところで、?>ステートメントを終了;します。その前にある必要はありません。
マナトワーク

@manatworkああ、いいね!今すぐ答えを更新します!
ダビッド

2
まったく含めずに条件としてx使用$b=$a..し、のrand(0,7)代わりにを使用すると、さらに数バイトを節約できますarray_rand。あなたは間の改行を削除することができます?>し、Grey duckあまりにも。また、TIOリンクにはまだ完全なタグがありましたが、-d short_open_tag=onフラグに追加して機能させることができます!:)
ドムヘイスティングス


4

bash、96バイト

a=(Grey Red Orange Yellow Green Blue Indigo Violet);for((i=1;i;));{ echo ${a[i=RANDOM%8]} duck;}

@DigitalTraumaに感謝します。


これをゴルフする機会がたくさん- バッシュゴルフのヒントを
デジタルトラウマ

@DigitalTrauma私は急いでいましたが、GNU coreutilsを使用しない純粋なBashソリューションが必要でした。112バイトから105バイトに縮小できました。
-rexkogitans

うん、私も純粋なbashの答えが好きです。 ここではオフ別の10バイトのだ
デジタルトラウマ

剥ぎましたが>0、の${#a}代わりに出ました8
rexkogitans

なぜあなたは${#a}代わりに維持する必要があり8ますか?これはコードゴルフです-異なる数の色に変更するためにコードを一般化する必要はありません。必要なことは、最小バイト数で仕様を満たすことです。
デジタル外傷


3

AWK、114バイト

{srand();for(split("Red9Orange9Yellow9Green9Blue9Indigo9Violet9Grey",A,9);r<8;print A[r]" duck")r=int(8*rand()+1)}

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

説明

{srand();                  # Seed rand to obtain different sequence each run
for(
     split("Red9Orange9Yellow9Green9Blue9Indigo9Violet9Grey",
            A,9);          # Split on 9 to avoid using '"'s
     r<8;
     print A[r]" duck")    # Print the colored ducks
     r=int(8*rand()+1)     # AWK uses 1-indexing not 0-indexing when splitting strings into arrays
}

これには「何らかの」入力が必要であることに注意してください。入力は空にすることができます。入力の必要性を避けるために、最初の行の先頭にBEGIN


3

PowerShell、94バイト

for(;$r-ne'Grey'){$r=-split"Red
Orange
Yellow
Green
Blue
Indigo
Violet
Grey"|Random;"$r Duck"}

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

$rがに等しくなるまでループしGreyます。ループ内で、-split改行のリテラル文字列を選択し、Randomその中から文字列を選択して、カラープラスを出力しますDuck(技術的には、パイプラインに残り、次のループの繰り返しでパイプラインのクリーンアップWrite-Outputが発生します)。理論的Greyには、選択されることはなく、ループは無限に継続する可能性がありますが、これは(確率的な意味で)ほとんど発生しません。


3

R、101バイト

cat(paste(c(sample(scan(,""),rexp(1),T),"gray"),"duck\n"))
Red
Orange
Yellow
Green
Blue
Indigo
Violet

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

関連する課題に対する@ user2390246の回答大きな影響を受けています。ランダム性の2つのソースが必要です。色の順序を変更することと、灰色でないアヒルの色をサンプリングすることです。sample率パラメータの指数分布によって与えられるランダムなサイズのランダムサンプル取る1整数に切り捨てを、。指数distrubtionを使用すると、残念ながら可能性があることを意味しexp(-8)たり周りの0.0003354 サンプルは、少なくともなることを8私たちはしてサンプルに持っているのでreplace=T


その後\n、1の実際の改行に置き換えることができます
MickyT

またcolors()[c(26,254,498,552,640,652)]scan(..)などの代わりに使用してかなり節約することができます。約83
MickyT

@MickyT .........私はRのグラフィックスを使いませんcolors()。これらはいくつかの素晴らしいゴルフです。これはあなた自身の答えとして投稿すべきだと思います。これは色を取得するエレガントな方法ではないからです。
ジュゼッペ

[OK]を、その後、私は少しの変化のカップルとそれを投稿します
MickyT

3

パイソン2138の 133 120 117 116バイト

import os
while id:id=ord(os.urandom(1))%8;print"Grey Red Orange Yellow Green Blue Indigo Violet".split()[id],'duck'

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

@EriktheOutgolferからのいくつかのアイデアで、はるかに良くなりました。ありがとう!

@ovsのおかげでさらに-3

-1 @Rodのおかげで、クールな新しいトリックを学びました:-)


3

網膜69 68バイト

1バイトを節約してくれたLeoに感謝します。

.^/y/{K`Red¶Orange¶Yellow¶Green¶Blue¶Indigo¶Violet¶Grey
" duck¶">?G`

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

説明

./y/^{K`Red¶Orange¶Yellow¶Green¶Blue¶Indigo¶Violet¶Grey

.プログラムの最後で暗黙的な出力を抑制します(そうしないと、2つの灰色のアヒルが発生します)。/y/^{作業文字列にが含まれていない限り、プログラム全体をループでラップしますy。その行の残りは、作業文字列をすべての色の改行で区切られたリストに設定します。

" duck¶">G?`

作業文字列からランダムな行をグレップします(したがって、ランダムな色)。そして、結果を末尾 duckと改行で出力します。


3

MATL68 64バイト

`'DYCIXMSQ(qm#Q$4{#is,Gh1(=lAjUSId;&'F2Y232hZaYb8YrX)' duck'h7Mq

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

説明

`                         % Do...while
  'DYCI···Id;&'           %   Push this string (to be decompressed by base conversion)
  F                       %   Push false
  2Y2                     %   Push string 'abc...xyz'
  32                      %   Push 32 (ASCII for space)
  h                       %   Concatenate horizontally. Gives 'abc...xyz '
  Za                      %   Base-convert from alphabet of all printable ASCII
                          %   characters except single quote (represented by input
                          %   false) to alphabet 'abc...xyz '. Produces the string
                          %   'grey red ··· violet'
  Yb                      %   Split on space. Gives a cell array of strings
  8Yr                     %   Random integer from 1 to 8, say k
  X)                      %   Get the content of the k-th cell
  ' duck'                 %   Push this string
  h                       %   Concatenate horizontally
  7M                      %   Push k again
  q                       %   Subtract 1
                          % Implicit end. Run a new iteration if top of the stack
                          % is non-zero
                          % Implicit display

3

Pythonの3、130128127126、125のバイト

from random import*
d,c=1,'Grey Red Orange Yellow Green Blue Indigo Violet'.split()
while d!=c[0]:d=choice(c);print(d,'duck')

-1 by @ElPedro!
-1 by me
-1 by @Bubbler!

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


グレイを前面に移動d!=c[0]して、バイトを保存する必要がありますか?
エルペドロ

print(d,'duck')バイトを保存します。デフォルトの区切り文字はスペースです。
バブラー

3

Java(JDK 10)、287バイト

Random r=new Random();int i;String c;do{i=r.nextInt(8);switch(i){case 0:c="Red";break;case 1:c="Orange";break;case 2:c="Yellow";break;case 3:c="Green";break;case 4:c="Blue";break;case 5:c="Indigo";break;case 6:c="Violet";break;default:c="Gray";}System.out.println(c+" duck");}while(i!=7)

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

私の最初のコードゴルフ!明らかに競争的ではなく、参加できるだけの十分なJava(現在はCS200で)を学んだことを嬉しく思います。



2

MS-SQL、158バイト

DECLARE @ VARCHAR(6)a:SELECT @=value FROM STRING_SPLIT('Red,Orange,Yellow,Green,Blue,Indigo,Violet,Grey',',')ORDER BY NEWID()PRINT @+' duck'IF @<>'Grey'GOTO a

主にRazvanの優れた回答に基づいていますがSTRING_SPLITMS-SQL 2016以降に固有の関数を使用しています。またGOTOWHILEループの代わりにを使用します。

フォーマット済み:

DECLARE @ VARCHAR(6)
a:
    SELECT @=value FROM 
        STRING_SPLIT('Red,Orange,Yellow,Green,Blue,Indigo,Violet,Grey',',')
        ORDER BY NEWID()
    PRINT @+' duck'
IF @<>'Grey'GOTO a

2

T-SQL195の 185 184バイト

DECLARE @ VARCHAR(9)=''WHILE @<>'Grey'BEGIN SELECT @=c FROM(VALUES('Red'),('Orange'),('Yellow'),('Green'),('Blue'),('Indigo'),('Violet'),('Grey'))v(c)ORDER BY NEWID()PRINT @+' Duck'END

1
素敵なバリエーション。前にスペースを削除できBEGINます。
BradC

2

Python 2、98バイト

インポートしないでください!

v=0
while 1:x=id(v)%97%8;print"GVIYORGBrinererleodladeuyliln ee egog n  towe"[x::8],"duck";v=1/x,v

(色の間に余分なスペースを印刷duckし、質問で許可されているように)

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

オブジェクトID 0でシードされたかなり貧弱な疑似乱数ジェネレーター(ただし、仕様に適合するようです)xは、[0,7]の整数を繰り返し生成します。タプルとして一緒に印刷される色の名前を取得するための8の手順、duck間にスペースを強制します。場合xゼロになるGrey印刷され、モジュロに次の入力の評価は、ゼロによる除算しようと乱数発生エラーベース(v=1/x,v最初の要素と新しいタプルを作成しようとし1/x= 1/0


同じ方法はPython 3で100です

v=0
while 1:x=id(v)%17%8;print("GVIYORGBrinererleodladeuyliln ee egog n  towe"[x::8],"duck");v=1/x,v
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.