ब्लू डक, रेड डक, ग्रे डक


48

इसलिए, पिछले हफ्ते मैंने डक, डक, गूज खेलने की चुनौती दी । इसने कई मिनेसोटनों को अपने क्षेत्रीय 'ग्रे डक' भिन्नता के बारे में टिप्पणी करने के लिए प्रेरित किया ।

तो यहाँ नियम हैं:

रंगों की इस सूची का उपयोग करना:

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

इस बदलाव के लिए पहले मुझे सावधान करने के लिए @ मायके हिल को धन्यवाद।


परिणामों पर वितरण पर कोई नियम? क्योंकि मैं गैर-ग्रे रंगों से कई बार यादृच्छिक रूप से चुनकर वैध आउटपुट उत्पन्न कर सकता था, जिसके बाद Greyएक बार छपाई होती है (इसलिए मुझे उन सभी से नहीं लेना होगा और जांचना होगा कि मैंने क्या चुना है Grey)।
मार्टिन एंडर

@MartinEnder यह ठीक है। "रंगों को लगातार एक ही क्रम में नहीं होना चाहिए।" मायने रखता है, लेकिन अंत में आपको अलग से ग्रे चुनने से रोकने के लिए कुछ भी नहीं है।
AJFaraday

3
क्या वैकल्पिक वर्तनी "ग्रे" की अनुमति है?
12M2121

@ 12Me21 जिज्ञासु, थो। क्या उसका कोई तकनीकी कारण है? या सिर्फ एक सौंदर्यवादी?
AJFaraday

2
मेरी नहीं-तो-विनम्र राय में, आप एक बहुत महत्वपूर्ण बतख रंग को याद कर रहे हैं। नीला करीब है, लेकिन पर्याप्त सटीक नहीं है।
कोबाल्टकॉक

जवाबों:


6

05AB1E , 42 40 बाइट्स

बच निकले 2 बाइट्स के लिए धन्यवाद एग्री द आउटग्राफर

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

इसे ऑनलाइन आज़माएं!


3
मैंने इन अपठनीय गोल्फ भाषाओं पर बहुत गौर किया है। क्या कुछ अधिक मानव-पठनीय रूप से संकलक है?
AJFaraday

@AJFaraday: ऐसा नहीं है कि मैं इससे अवगत हूं। एकमात्र गोल्फिंग भाषा जो मुझे पता है कि उनमें से एक चारकोल है।
एमिग्ना

1
आप आगे अपनी स्ट्रिंग को संपीड़ित कर सकते हैं, indहै ëß!
1916

1
Gs2 में एक भी है। लेकिन इन दिनों उस भाषा का इतना इस्तेमाल नहीं किया जाता है।
पुनरावर्ती


46

LuaLaTeX, 220 211 वर्ण

आदेश:

lualatex -interaction nonstopmode

सबसे छोटा नहीं, बल्कि कट्टर है। @ स्किलमोन के समाधान के आधार पर

यहाँ छवि विवरण दर्ज करें

\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 और इतने लंबे पैकेज का नाम चुनने के लिए मेरी क्षमा याचना!

@sam, आपको मेरी
अनुपस्थिति मिलती है

8
नमस्ते श्री। वह व्यक्ति जो मैं निश्चित रूप से TeX.sx जैसे अन्य तकनीकी समुदायों से नहीं जानता हूं । चूंकि यह जवाब परिवार अनादिदे में कुछ पक्षियों को शामिल करता है , इसलिए मैं इसे अपवित्र करके अनुमोदन का टोकन प्रदान करने के लिए मजबूर महसूस करता हूं। :)
पाउलो केरेडा

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:।

स्क्रीनशॉट


स्पष्टीकरण (टिप्पणी disassembly):

         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 कृपया "उपयोग" भाग पर ध्यान दें ... इसे चलाने का कमांड है sys 49152
फेलिक्स पालमेन

ठीक है, कि मेरा दिन बना दिया :)
AJFaraday

1
वह बहोत अच्छा था। जब से मैंने c64 असेंबली लिखी है, कुछ समय हो चुका है।
lsd

2
@lsd: वही यहाँ! मेरा पहला कार्यक्रम एक C64 पर 6502 असेंबली था, क्योंकि मुझे बस मिल गया था और एक दोस्त ने मुझे "एक गेम लिखो!" कुछ लिखने में मुझे खुश करने के लिए! (शानदार तरीका! यह सिर्फ पढ़ने के लिए नहीं, बल्कि वास्तव में कुछ लिखने के लिए एक महान प्रेरक था)। 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

जावा (ओपनजेडके 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 बाइट बचाने के लिए डॉम हेस्टिंग्स का धन्यवाद , किरिल एल। 1 बाइट और असोन तुहिद 1 बाइट!

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

इसे ऑनलाइन आज़माएं!


आप ()कोड को निकाल सकते हैं और यदि आप इंडेक्स को स्टोर करने के $.बजाय उपयोग sकरते हैं, तो आप sपूरी तरह से बनाने से बच सकते हैं (चूंकि $.लाइन नंबर के लिए प्रारंभिक है!) आपको Greyसूची के अंत में जाने और $.<7इसके बजाय जांचने की आवश्यकता होगी! हालांकि। उम्मीद है की वो मदद करदे!
डोम हेस्टिंग्स

@DomHastings धन्यवाद! मैं छुटकारा पाने के लिए रास्ता ढूंढ रहा था s=1और $.एकदम सही था!
क्रिस्टियान लुपस्कू

मुझे लगता है कि आप थोड़ी देर के बाद भी जगह निकाल सकते हैं, रूबी को इस बात की शिकायत नहीं है।
किरिल एल।

@KirillL। यह सही है, धन्यवाद! मैं पहले थाwhile s... और अंतरिक्ष की जरूरत थी। बदलने के बाद इस अवसर नहीं देखा sकरने के लिए $.
क्रिस्टियन लुपस्कू


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


5

रूबी , 84 81 बाइट्स

-3 बाइट्स के लिए डोम हेस्टिंग्स को धन्यवाद।

puts$_=%w[Red Orange Yellow Green Blue Indigo Violet Grey].sample+" duck"until/y/

इसे ऑनलाइन आज़माएं!


1
यदि आप स्टोर करते हैं $_, तो आप until/y/अंत में -3 ​​के लिए हो सकते हैं!
डोम हेस्टिंग्स



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लिए दूसरे इसका इस्तेमाल करते हैं ।


थोड़ा सवाल: क्या ऑक्टेव में एक प्रतीक है जो एक्सेल में & के समान है, क्योंकि मुझे लगता है कि इसके बाद कोड को छोटा करना संभव है।
मिकथन

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

इसे ऑनलाइन आज़माएं!

-8 बाइट्स थैंक्स टू @Olivier Grégoire

-3 बाइट्स @manatwork के लिए धन्यवाद

-11 बाइट्स @ डॉम हेस्टिंग्स को धन्यवाद


2
रंग स्ट्रिंग और परीक्षण में, इसका उपयोग Greyकरने Xके बाद से इसे बदल दें । आप 6 बाइट्स हासिल करेंगे।
ओलिवियर ग्राएगोइरे

@ ओलिवियरग्रेयर ओह सच। कि :) के लिए धन्यवाद
Davіd

1
forकोई कोष्ठक की आवश्यकता के लिए रिवर्स स्थिति x!=$b=$a[array_rand($a)]:। BTW, ?>एक बयान को समाप्त करता है, ;इसके सामने कोई आवश्यकता नहीं है।
मैनटवर्क

@manatwork ओह, अच्छा! मैं अब अपना जवाब अपडेट करूंगा!
डेविएड

2
आप सहित नहीं द्वारा कुछ और बाइट्स बचा सकता है xसभी को एक और का उपयोग कर $b=$a..शर्त के रूप में और का उपयोग कर rand(0,7)के बजाय array_rand। आप के बीच ?>और Grey duckभी नईलाइन हटा सकते हैं। इसके अलावा आपके TIO लिंक में अभी भी पूर्ण टैग थे, आप -d short_open_tag=onउस कार्य को प्राप्त करने के लिए झंडे में जोड़ सकते हैं ! :)
डोम हेस्टिंग्स


4

बैश, 96 बाइट्स

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

@DigitalTrauma को धन्यवाद।


यह गोल्फ के अवसरों के बहुत सारे - बैश गोल्फ युक्तियाँ
डिजिटल ट्रॉमा

@DigitalTrauma मैं जल्दी में था, लेकिन मैं एक शुद्ध बैश समाधान w / कोई GNU Coreutils चाहता था। मैं इसे 112 से 105 बाइट्स तक सिकोड़ सकता था।
rexkogitans

हां, मुझे शुद्ध बैश के जवाब भी पसंद हैं। यहाँ एक और 10 बाइट्स बंद हैं
डिजिटल ट्रॉमा

मैंने छीन लिया >0, हालांकि, मैंने ${#a}इसके बजाय छोड़ दिया 8
रेक्सकोगिटंस

आपको ${#a}इसके बजाय रखने की आवश्यकता क्यों है 8? यह कोड-गोल्फ है - विभिन्न रंगों के लिए संशोधित होने के लिए आपके कोड को सामान्यता देने की आवश्यकता नहीं है। आपको बस बाइट्स की सबसे छोटी संख्या में कल्पना को पूरा करने की आवश्यकता है।
डिजिटल ट्रामा

3

जावास्क्रिप्ट, 104 बाइट्स

f=_=>`grey,red,orange,yellow,green,blue,indigo,violet`.split`,`[n=Math.random()*8|0]+` duck
${n?f():``}`

इसे ऑनलाइन आज़माएं


1
एफडब्ल्यूआईडब्ल्यू, मेरे पास यह संस्करण था , लेकिन मैं 104 बाइट्स पर भी अटका हुआ हूं।
अरनौलद

शर्म की बात है कि हम new Dateयहाँ RNG के लिए उपयोग नहीं कर सकते ।
शैगी

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

पॉवरशेल , 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

आर , 101 बाइट्स

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

इसे ऑनलाइन आज़माएं!

संबंधित चुनौती के लिए @ user2390246 के उत्तर से प्रेरित हैवीली । हमें यादृच्छिकता के दो स्रोतों की आवश्यकता है: रंगों के क्रम को बदलना और गैर-ग्रे बतख रंगों का नमूना लेना। sampleयादृच्छिक आकार दर पैरामीटर के साथ एक घातीय वितरण के द्वारा दिए गए नमूने के तौर पर ले जाएगा 1, एक पूर्णांक तक छोटा कर दिया। एक घातीय व्याकुलता का उपयोग करने का दुर्भाग्य से मतलब है कि इस बात की संभावना है कि इसके exp(-8)आस-पास 0.0003354नमूना कम से कम होगा 8, इसलिए हमें इसका नमूना लेना होगा replace=T


फिर आप \nएक वास्तविक न्यूलाइन के साथ 1
मिकी

आदि colors()[c(26,254,498,552,640,652)]की जगह का उपयोग करके भी आप काफी कुछ बचा सकते हैं scan(..)। 83 तक नीचे आना चाहिए
मिकी

@ मिक्की ......... मैं सभी अच्छे ग्राफिक्स बिल्डरों के बारे में याद रखने के लिए आर के ग्राफिक्स का उपयोग नहीं करता colors()! वे कुछ अच्छे गोल्फ हैं, जो मुझे लगता है कि आपको अपने जवाब के रूप में पोस्ट करना चाहिए, क्योंकि यह रंगों को प्राप्त करने का कम सुरुचिपूर्ण तरीका है।
ग्यूसेप

ठीक है, मैं इसे कुछ छोटे बदलावों के साथ पोस्ट
करूंगा

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 के कुछ विचारों के साथ बहुत बेहतर है। धन्यवाद!

-3 अधिक @ovs धन्यवाद के साथ

-1 धन्यवाद के साथ @Rod एक नई सीख के लिए :-)


3

रेटिना , 69 68 बाइट्स

1 बाइट बचाने के लिए लियो को धन्यवाद।

.^/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')

-1 by @ElPedro!
-1 मेरे द्वारा
-1 @ बब्बलर द्वारा!

इसे ऑनलाइन आज़माएं!


क्या आप ग्रे को सामने की ओर ले जा सकते हैं और d!=c[0]एक बाइट को बचाना होगा?
ElPedro

print(d,'duck')एक बाइट को बचाने के लिए। डिफ़ॉल्ट सीमांकक एक स्थान है।
बब्लर

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)

इसे ऑनलाइन आज़माएं!

मेरा पहला कोडगोल्फ! स्पष्ट रूप से प्रतिस्पर्धी नहीं, बस भाग लेने में सक्षम होने के लिए पर्याप्त जावा (वर्तमान में CS200 में) सीखा है।


2

कोटलिन , 122 बाइट्स

while({x:Any->println("$x duck");x!="Grey"}("Red,Orange,Yellow,Green,Blue,Indigo,Violet,Grey".split(",").shuffled()[0])){}

इसे ऑनलाइन आज़माएं!


1
कोटलिन में एक यादृच्छिक पूर्णांक मान प्राप्त करने के लिए किसी के लिए उपयोगी हो सकता है, आप निम्नलिखित का उपयोग कर सकते हैं: (0..7)। ()
मकोतोसन

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

बड़े पैमाने पर रज़वान के उत्कृष्ट उत्तर पर आधारित है , लेकिन उस STRING_SPLITफ़ंक्शन का उपयोग करना जो एमएस-एसक्यूएल 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

पायथन 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प्रश्न में अनुमति दी जाती है)

इसे ऑनलाइन आज़माएं!

एक बहुत गरीब छद्म यादृच्छिक संख्या जनरेटर 0 की वस्तु आईडी के साथ वरीयता प्राप्त है (लेकिन यह युक्ति फिट करने के लिए लगता है) जो बार-बार एक पूर्णांक उत्पन्न करता है x, [0,7] में जो उस सूचकांक से वर्णों की एक सूची का उपयोग करने के लिए उपयोग किया जाता है 8 रंग के नाम को पाने के लिए चरण जो duckकि एक ट्यूपल के रूप में मुद्रित होता है , एक अंतरिक्ष के बीच में मजबूर करता है। जब xशून्य Greyप्रिंट हो जाता है और मोडुलो आधारित यादृच्छिक संख्या जनरेटर त्रुटियों के लिए अगले इनपुट का मूल्यांकन शून्य से विभाजित करने का प्रयास 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.