푸른 오리, 붉은 오리, 회색 오리


48

그래서 지난주에 나는 Duck, Duck, Goose 를하는 도전을 올렸습니다 . 이로 인해 많은 미네 소탄이 지역 '회색 오리'변형에 대해 언급했습니다 .

규칙은 다음과 같습니다.

이 색상 목록 사용 :

Red
Orange
Yellow
Green
Blue
Indigo
Violet
Gray

다음 규칙을 따르는 프로그램을 작성하십시오.

  1. 이 색상 중 하나를 선택하고 'duck'이라는 단어 앞에 붙인 다음 새 줄로 결과를 인쇄하십시오.
  2. 색상이 '회색'이 아닌 경우 1 단계를 반복하십시오.
  3. 색상이 '회색'인 경우 프로그램을 종료하십시오.

준수해야 할 규칙 :

  • 프로그램은 동일한 수의 행을 일관되게 인쇄해서는 안됩니다.
  • 그것은 '회색 오리'에서 시작할 수 있지만 일관되게해서는 안됩니다.
  • 각 줄마다 정확히 하나의 오리가 있어야하며 빈 줄은 출력되지 않습니다.
  • 색과 오리 사이에 최소한 하나의 공간이 있어야합니다.
  • 중요한 출력 전후의 공백은 중요하지 않습니다.
  • 출력의 경우는 중요하지 않습니다.
  • 색상을 반복 할 수 있습니다.
  • 출력에 매번 모든 색상을 포함 할 필요는 없지만 코드가 모든 색상을 출력 할 수 있어야합니다.
  • 위 배열 이외의 색상은 포함 할 수 없습니다.
  • 답변에 회색 또는 회색이 허용됩니다.
  • 색상이 동일한 순서로되어서는 안됩니다.
  • 가장 짧은 프로그램을 목표로하십시오. 가장 적은 바이트 수가 이깁니다.

출력 예 :

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

이 변형을 알려주는 @Mike Hill에게 감사드립니다.


결과 배포에 관한 규칙이 있습니까? 회색이 아닌 색상에서 임의의 횟수 Grey로 선택하고 한 번 인쇄하여 유효한 출력을 생성 할 수 있기 때문에 (모든 색상 에서 선택하고 선택했는지 확인할 필요가 없습니다 Grey).
마틴 엔더

@MartinEnder 괜찮습니다. "색상이 일관된 순서로되어서는 안됩니다." 중요하지만 마지막에 별도로 회색을 따는 것을 막을 수는 없습니다.
AJFaraday

3
대체 철자 "회색"이 허용됩니까?
12Me21

@ 12Me21 호기심, tho. 그것에 대한 기술적 이유가 있습니까? 아니면 그냥 미적?
AJFaraday

2
겸손하지 않은 의견으로는 매우 중요한 오리 색이 빠져 있습니다. 파란색은 가깝지만 정확하지는 않습니다.
cobaltduck

답변:


6

05AB1E , 42 40 바이트

Outgolfer Erik 덕분에 2 바이트 절약

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

온라인으로 사용해보십시오!


3
읽을 수없는 골프 언어가 많이 있습니다. 좀 더 사람이 읽을 수있는 형태의 컴파일러가 있습니까?
AJFaraday

@AJFaraday : 잘 모르겠습니다. 내가 알고있는 유일한 골프 언어는 차콜입니다.
Emigna

1
당신은 더 당신의 문자열을 압축 할 수 ind있다 ëß!
아웃 골퍼 에릭

1
Gs2도 하나 있습니다. 그러나 요즘에는 그 언어가 많이 사용되지 않습니다.
재귀


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
좋은 하늘! 이것은 최고입니다! 당신은 내 하루를 만들었습니다, Alex.
AJFaraday

@AJFaraday 실제로 tikzducks거기 에서 사용하는 놀라운 아이디어 :)
Skillmon

6
긴 패키지 이름을 선택해 주신 +1 및 사과드립니다!

@ 샘, 당신은 내 절망을 얻을
AlexG

8
안녕하세요 씨 TeX.sx 와 같은 다른 기술 커뮤니티에서 확실히 모르는 사람 . 이 답변은 Anatidae 가족의 일부 조류에 적용되므로이를 승인하여 승인 토큰을 제공해야한다는 느낌이 들었습니다. :)
Paulo Cereda

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

죄송합니다. 데모에서 오리 관련 콘텐츠가 출력되지 않는 것 같습니다.
AJFaraday

1
@AJFaraday는 "usage"부분을 확인하십시오 sys 49152. 실행 명령은 입니다.
Felix Palmen

좋아, 그건 내 하루가 :)
AJFaraday

1
정말 대단했습니다. c64 어셈블리를 작성한 후 오랜 시간이 지났습니다.
lsd

2
@lsd : 여기 동일! 내 첫 프로그램은 C64에서 6502 어셈블리였습니다. 방금 받았는데 친구가 "게임 쓰기!"라는 작업으로 6502 책을 줬기 때문입니다. 무언가를 쓰도록 나를 jumsptart! (좋은 방법! 단지 읽는 것이 아니라 실제로 무언가를 쓰는 것은 큰 동기 부여였습니다) 192 바이트 (iirc) "뱀"프로그램을 작성했습니다 (a, imo, 머리를 가리키는 현명한 이중 인덱스 및 뱀 위치의 꼬리를 가리킴) ... 먼저 하단 가장자리를 확대하여 '먹는' 벽을 설치하는 것을 잊었을 때 램의 나머지 부분은 "@"에서 자랍니다 ^^
Olivier Dulac


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

읽기 재미있었습니다.
Makotosan

Golly, 난해 해! 어떻게 작동하는지 이해할 수 없습니다. 많은 재미, tho :)
AJFaraday

이것은 Fetlang
Skillmon

8

자바 (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 바이트

2 바이트, Kirill L. 1 바이트 및 Asone Tuhid 1 바이트 를 절약 한 Dom Hastings 에게 감사드립니다 !

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

온라인으로 사용해보십시오!


()코드 주위 를 제거 할 수 있으며 색인을 저장하는 $.대신 사용 s하면 s완전히 작성하지 $.않아도됩니다 (행 번호로 사전 초기화되었으므로!) Grey목록 끝으로 이동 하여 $.<7대신 확인해야 합니다 그러나. 희망이 도움이됩니다!
Dom Hastings

@DomHastings 감사합니다! 내가 방법을 찾고되었다 없애 s=1$.완벽했다!
Cristian Lupascu

루비는 그것에 대해 불평하지 않는 것처럼 잠시 후에도 공간을 제거 할 수 있다고 생각합니다.
Kirill L.

@KirillL. 그렇습니다, 감사합니다! 나는 이전에 가지고 있었고 while s...공간이 필요했습니다. 변경 한 후에는이 기회를 보지 못했어요 s$..
Cristian Lupascu


7

인화점 스크립팅 언어, 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

옥타브 , 114112 바이트

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에서 &와 같은 기호를 갖는 옥타브 기호가 있습니까? 왜냐하면 코드를 더 짧게 줄일 수 있다고 생각하기 때문입니다.
Michthan

1
불행하게도, 아니 ... 문자열은 대괄호 (또는 같은 사용 기능을 내부에 연결될 수 있어야 cat하고 horzcat감사하지만 :).
스튜이 그리핀

4

PHP , 133 125 111 108 97 92 바이트

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

온라인으로 사용해보십시오!

@Olivier Grégoire 덕분에 -8 바이트

@manatwork 덕분에 -3 바이트

@Dom Hastings 덕분에 -11 바이트


2
색상 문자열과 테스트, 변화 GreyX그것을 사용하지 이후. 6 바이트를 얻게됩니다.
Olivier Grégoire

@ OlivierGrégoire 아 맞다. 고마워 :)
Davіd

1
for괄호가 필요하지 않은 조건을 반전시킵니다 : x!=$b=$a[array_rand($a)]. BTW ?>는 진술을 종결시키지 않고 진술 할 필요가 없습니다 ;.
manatwork

@manatwork 오, 좋아! 지금 답변을 업데이트하겠습니다!
Davіd

2
전혀 포함하지 않고 조건으로 사용하고 대신 대신 x사용하여 몇 바이트를 더 절약 할 수 있습니다 . 당신은 사이에 줄 바꿈을 제거 할 수 있습니다 및 도. 또한 TIO 링크에는 여전히 전체 태그가 있습니다 . 플래그를 추가 하여 작동 시킬 수 있습니다 ! :)$b=$a..rand(0,7)array_rand?>Grey duck-d short_open_tag=on
Dom Hastings


4

bash, 96 바이트

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

@DigitalTrauma에게 감사합니다.


골프를 치기위한 많은 기회 – 강타 골프 팁을
Digital Trauma

@DigitalTrauma 나는 서둘 렀지 만 GNU coreutils가없는 순수한 Bash 솔루션을 원했습니다. 112 바이트에서 105 바이트로 줄일 수 있습니다.
rexkogitans 2014 년

그렇습니다, 나는 순수한 bash 답변도 좋아합니다. 여기 또 다른 10 바이트가 있습니다
Digital Trauma

나는 제거 >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(기술적으로는 파이프 라인에 남아 있고 다음 루프 반복에서 파이프 라인 정리는 a 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의 답변 에서 많은 영감을 얻었습니다 . 색상의 순서를 변경하고 회색이 아닌 오리 색상을 샘플링하는 두 가지 임의성 소스가 필요합니다. 는 sample레이트 파라미터 지수 분포에 의해 주어진 임의의 크기의 무작위 샘플 걸릴 1정수를 절단. 지수 distrubtion 사용 불행히도의 가능성이 있음을 의미 exp(-8)하거나 주변 0.0003354 샘플 적어도 될 것으로 8우리가 샘플, 그래서 replace=T.


그러면 \n1
MickyT

또한 당신은 등 colors()[c(26,254,498,552,640,652)]을 대신 하여 사용하여 약간을 절약 할 수 있습니다 scan(..)약 83
MickyT

@MickyT ......... 나는 R의 그래픽을 사용하여 좋은 내장 그래픽을 모두 기억할만큼 충분히 사용하지 않습니다 colors()! 이것들은 멋진 골프입니다. 색상을 얻는 데 덜 우아한 방법이기 때문에 자신의 답변으로 게시해야한다고 생각합니다.
Giuseppe

그럼 몇 가지 작은 변경 사항으로 게시하겠습니다
MickyT

3

파이썬 (2) , 138 (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 더

멋진 새로운 트릭을 배워 @Rod 덕분에 -1 :-)


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

.프로그램의 끝에서 암시 적 출력을 억제합니다 (그렇지 않으면 회색 오리 두 개를 얻습니다). /y/^{작업 문자열에을 포함하지 않는 한 전체 프로그램을 루프로 래핑합니다 y. 해당 줄의 나머지 부분은 작업 문자열을 줄 바꿈으로 구분 된 모든 색상 목록으로 설정합니다.

" duck¶">G?`

우리는 작업 문자열에서 임의의 줄을 그 리핑합니다 (따라서 임의의 색상). 그리고 결과를 후행 duck과 줄 바꿈으로 인쇄합니다 .


3

MATL , 68 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

파이썬 3, 130 , 128 , 127 , 126 , 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')

@ElPedro에 의해 -1!
-1 by me
-1 by @Bubbler!

온라인으로 사용해보십시오!


회색을 앞으로 움직여 d!=c[0]바이트를 저장 해야 합니까?
ElPedro

print(d,'duck')바이트를 저장합니다. 기본 분리 문자는 공백입니다.
Bubbler

3

자바 (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 이상에 고유 한 기능을 사용합니다 . 루프 GOTO대신 사용합니다 WHILE.

형식화 :

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-SQL , 195 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

파이썬 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] 에서 해당 색인에서 문자 목록을 슬라이스하는 데 사용되는 정수를 반복적으로 생성합니다 . 단계 8duck 사이의 간격을 강제로 튜플 과 함께 인쇄되는 색상 이름을 가져옵니다 . 되면 x제로가된다 Grey인쇄 및 모듈의 다음 입력의 평가는 0으로 나누는 시도 난수 발생기 에러 계 ( v=1/x,v첫 번째 요소로 새로운 튜플을 시도가 1/x= 1/0)


같은 방법으로 파이썬 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.