เป็ดเป็ดห่าน!


58

จำเกมสำหรับเด็ก'เป็ดเป็ดห่าน' ได้ไหม ไม่มี? ฉันก็ไม่เหมือนกัน.

ความท้าทาย

  • พิมพ์คำว่า 'เป็ด' ในแต่ละบรรทัดในจำนวนครั้งที่ไม่แน่นอน
  • พิมพ์คำว่า 'ห่าน'
  • โปรแกรมของคุณจะจบลง

กฎระเบียบ

  • พยายามเล่นเกมด้วยจำนวนไบต์น้อยที่สุด
  • จะต้องมีเป็ดอย่างน้อยหนึ่งตัว
  • จะต้องมีห่านหนึ่งตัวในตอนท้ายของรายการ
  • จะต้องมีหนึ่งนกแน่นอนในแต่ละบรรทัด ไม่มีบรรทัดว่างเปล่า
  • กรณีของสตริงเอาท์พุทไม่เกี่ยวข้อง
  • พื้นที่สีขาวภายในหนึ่งบรรทัดนั้นใช้ได้
  • โปรแกรมของคุณจะต้องเสร็จสิ้น
  • โปรแกรมของคุณจะต้องไม่ผลิตเป็ดในจำนวนที่เท่ากัน

มีความสุข!


โปรดทราบ: คำถามนี้ไม่ได้ซ้ำกับรหัสที่สั้นที่สุดในการสร้างผลลัพธ์ที่ไม่ได้กำหนดไว้

เหตุผลประกอบด้วย:

  • การเชื่อมโยงกับเกมของเด็ก
  • ข้อกำหนดการเริ่มต้นและสิ้นสุดที่กำหนดไว้ของสตริงผลลัพธ์ ไม่มีผลลัพธ์ที่ระบุในการท้าทายอื่น ๆ
  • รู้รอบสำหรับความท้าทายอื่น ๆ ที่ไม่ซ้ำกันนั้นมีจำนวนไบต์เดียว ค่าเฉลี่ยสำหรับอันนี้ประมาณ 30 หรือประมาณนั้น
  • ด้วยจำนวนของการซ้อนทับกันระหว่างความท้าทายนี้และคำถามนั้นคำถามเกี่ยวกับการเล่นกอล์ฟรวมถึงแท็ก 'สุ่ม' นั้นซ้ำกัน เราควรจะลบพวกเขาทั้งหมดหรือไม่
  • รหัสคำตอบสำหรับความท้าทายนี้จะตรงกับความท้าทายอื่น ๆ (ในทาง bloated ขัน) แต่คำตอบของความท้าทายนั้นจะไม่ตรงกับความท้าทายนี้

11
คุณช่วยกำหนดไม่แน่นอนได้ไหม มันอาจหมายถึงศูนย์หรือหนึ่ง?
เรียกซ้ำ

1
โปรดกำหนดว่าควรสร้างสิ่งนี้แบบสุ่มอย่างไร เหมือนกันในช่วงหรือมีการลดลงชี้แจง?
HyperNeutrino

@recursive Nope แต่ไปด้วยคำจำกัดความที่ใช้งานได้ ... โปรแกรมไม่แสดงเป็ดจำนวนเท่าเดิม
AJFaraday

2
พูดเป็น Minnesotan จะเป็นอย่างไรถ้าฉันพิมพ์"เป็ดเป็ดเป็ดเทา"แทน? :)
Mike Hill

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 ขออภัย แต่สแต็คคืออะไร เยลลี่เป็นภาษาโปรแกรมโดยปริยาย
user202729

@ user202729 โอ๊ะฉันได้รับ Jelly และ 05AB1E เกิดความผิดพลาดขึ้นในหัวของฉันคุณช่วยแก้ไขมันเพื่อแก้ไขข้อผิดพลาดนั้นได้ไหม? ขออภัยเกี่ยวกับที่
PunPun1000

มีการต่อข้อมูลโดยนัยใน Jelly หรือไม่? เย้!
MilkyWay90

43

ภาษาสคริปต์การทำงานของ Flashpointขนาด 48 ไบต์

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

พิมพ์เป็ดหนึ่งหรือสองตัวเสมอ

random 1ส่งกลับตัวเลข (floating point) ระหว่าง 0 และ 1 ตัวเลขที่ถูกส่งผ่านเป็นอาร์กิวเมนต์ไปพร้อมกับอาร์เรย์select [s,""]หมายเลขสุ่มจะถูกปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด (เป็น 0 หรือ 1) และองค์ประกอบอาร์เรย์ที่ดัชนีนั้นจะถูกเลือกจากอาร์เรย์

โทรด้วย:

hint call f

เอาท์พุท:

ทางเลือกรุ่น 56 ไบต์:

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

3
มันทำให้ฉันดีใจเสมอเมื่อมีคนใช้สิ่งนี้ใน PCG
Nit

ฉันลืมเกมนี้ไปแล้ว
Caimen

38

World of Warcraft 81 Bytes

นี่คือแมโครที่คุณสามารถเรียกใช้ใน World of Warcraft

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

11
โอ้ท่านข้า ... ทำไมข้าไม่เคยคิดถึงเรื่องนี้เลย
Magic Octopus Urn

4
PVCG (การเขียนโปรแกรมวิดีโอเกมและ Code Golf) Operation Flashpoint เป็นอะไร แต่ WoW ฉันกำลังรอการแก้ปัญหา Minecraft และ Factorio ของสิ่งนี้
Brain Guider

2
@AderderBiguri ฉันสงสัยว่า Minecraft คนหนึ่งจะทำสิ่งที่เลวร้ายยิ่งกว่า 81 ไบต์ (บล็อก?);)
Chris

5
สิ่งนี้น่าจะช่วยให้คุณทำงานได้ถึง 58 bytes:/run for x=1,random(1,9)do print("Duck")end print("Goose")
Gastropner

35

Minecraft <1.13, 72 54 ไบต์

ขอโทษฉันต้อง

คำแนะนำ:

  • สร้างโลก Minecraft ใหม่ในโหมดสร้างสรรค์
  • ค้นหาโฟลเดอร์บันทึกสำหรับโลกนั้นและวางรหัสต่อไปนี้ใน data/functions/minecraft/ddg.mcfunction
  • ทำงาน/function ddgในเกมคอนโซล

มันทำงานอย่างไร:

ส่งออกคำว่า "เป็ด" สำหรับทุกเอนทิตีในโลกจากนั้นส่งออกคำว่า "ห่าน" เนื่องจากเอนทิตีจะวางไข่และหมดหวังอยู่ตลอดเวลาจำนวนของ "เป็ด" จึงไม่สอดคล้องกัน ฉันใช้tellrawแทนสั้นกว่ามากsayเพราะsayเอาท์พุทชื่อของเอนทิตีในขณะที่tellrawเอาท์พุทสิ่งที่มันบอกว่า

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

ภาพหน้าจอ

enter image description here

แก้ไข: เปลี่ยน {"text": "duck"} เป็น "duck" (เช่นเดียวกับ "goose")


1
สวย. เราต้องการ Minecraft เพิ่มเติมใน PPCG
BradC

9
น่าจะกล่าวถึงว่าคุณ (ผู้เล่น) เป็นนิติบุคคลในโลกดังนั้นจำนวนเป็ดไม่สามารถเป็น 0 (แม้ว่าจะไม่มีกลุ่มคนที่ไม่เป็นมิตรหรือไม่โต้ตอบ)
BradC

1
@BradC น่าจะมีความท้าทายทั้งหมดอยู่ที่ Minecraft
tox123


14

อ็อกเท38 38ไบต์

นี่ไม่ใช่สั้นที่สุด (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 มกราคม 0000จนถึงวันนี้

randส่งกลับจำนวนสุ่มในช่วง(0, 1) ดังนั้นจึง1/randส่งกลับจำนวนขนาดใหญ่กว่า1 ตั้งแต่ช่วง1:fที่fเป็นลอยสุ่มขนาดใหญ่กว่า1เป็นเหมือน1:floor(f), 1:1/randสร้างช่วง1 .. xที่x> = 1

ฉันจะพยายามอธิบายสิ่งนี้ราวกับว่า 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'])? ไม่แน่ใจว่านี่เป็น "ไม่แน่นอน" เพียงพอหรือไม่
Luis Mendo

12

Perl 5 , 20 ไบต์

เริ่มแรกใช้งานได้ 26 ไบต์:

เป็ด 1 ถึง 9 ครั้งก่อนที่จะถูกห่าม

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

ลองออนไลน์!

แต่ถ้าคุณมีหน่วยความจำและเวลามากมายขนาด 20 ไบต์ (ตามที่Chrisแนะนำ) ก็ใช้งานได้เช่นกัน:

say"Duck
"x$^T,Goose

สิ่งนี้จะถือว่าปัญหาปี 2038จะได้รับการแก้ไขสำหรับPerl 5มิฉะนั้นจะไม่ถูกต้องสำหรับ 1 วินาที 20 ปีดังนั้น


หากคุณเปลี่ยน1+$^T%9เป็นเพียง$^Tมันยังคงใช้งานได้และคุณบันทึก 4 ไบต์
Chris

@chris เห็นได้ชัดว่าคุณมีหน่วยความจำมากกว่าที่ฉันทำ แต่ถึงกระนั้นฉันจะใช้ข้อเสนอแนะของคุณเนื่องจากมีคอมพิวเตอร์ที่เหมาะสมที่จะทำงาน ขอบคุณ
Ton Hospel

12

Python 2 , 36 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)กำจัดวงเล็บ เคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา>และเคล็ดลับสำหรับการเล่นกอล์ฟใน Pythonอาจน่าสนใจในการอ่าน เพลิดเพลินไปกับการพักผ่อนของคุณ!
Kevin Cruijssen

1
id(id)ไม่สามารถเป็นid(0)หรือฉันขาดอะไรไป?
Jonathan Frech

@Johnathan ดูid(0)คอมพิวเตอร์สองเครื่องที่แตกต่างกันแสดงให้เห็นว่ามันคงที่
user2699

1
id([])เล็กน้อยที่ใช้งานง่ายและไม่มีไบต์จะโทร สิ่งนี้ควรเริ่มต้นรายการที่แตกต่างกันทุกครั้งที่โปรแกรมทำงานซึ่งในทางทฤษฎีควรส่งผลให้ที่อยู่หน่วยความจำแตกต่างกัน
jpmc26

11

Z Shell (+ 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 ต่อปัญหาอื่น )

สคริปต์นี้สร้างภาพ PPM ที่มีระหว่างเป็ด 1-8 ภาพและรูปภาพของห่านที่ด้านล่างของเอาต์พุตมาตรฐาน มันดาวน์โหลดรูปภาพต้นฉบับสองภาพจาก Wikipedia ดังนั้นอินเทอร์เน็ตจึงจำเป็นสำหรับการทำงาน

เอาต์พุตตัวอย่างแปลงเป็น JPEG ผ่านpnmtojpeg :

enter image description here


1
นี่ทำให้ฉันหมดวัน!
AJFaraday

ฉันเพิ่งรู้ว่าคุณเป็นคนเดียวกันที่เสนอความท้าทายอื่นที่ฉันเชื่อมโยง xD ฉันดีใจที่คุณชอบสิ่งนี้! = D
lucasb

ใช่มีบางรูปแบบในการแข่งขันกอล์ฟรหัสของฉัน :) ฉันควรให้คะแนนโบนัสสำหรับคำตอบแบบรูปภาพ
AJFaraday

นี่ไม่ใช่ช่องโหว่มาตรฐานเพื่อรับทรัพยากรภายนอกใช่หรือไม่
MilkyWay90

10

R , 35 ไบต์

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

ลองออนไลน์!

rexp()สร้างตัวเลขสุ่มจากฟังก์ชั่นการสลายตัวแบบเอ็กซ์โพเนนเชียล +1เพื่อให้แน่ใจว่าอย่างน้อยหนึ่งเป็ด ทุกบรรทัดหลังจากที่แรกรวมถึงช่องว่างนำหน้า (ซึ่งเป็นตัวคั่นเริ่มต้นสำหรับcat) แต่สิ่งนี้ได้รับอนุญาต


1
ความน่าจะเป็นของการส่งออกมากกว่าหนึ่งเป็ดอยู่ที่exp(-1)ประมาณ 36.8%
Giuseppe

มันขอให้พิมพ์ในแต่ละบรรทัด ฉันคิดว่าคุณควรเพิ่ม "\ n" ลงใน "duck" ของคุณ
stuart stevenson

3
@ Stuartstevenson ที่นี่ฉันได้ใช้ตัวอักษรขึ้นบรรทัดใหม่มากกว่า\nเพราะมันสั้นกว่าหนึ่งไบต์ หากคุณไปที่ "ลองออนไลน์!" ลิงค์คุณจะเห็นว่าผลเหมือนกัน
user2390246

บนกล่อง DOS / Windows บรรทัดใหม่นั้นจะยังคงเป็นสอง (2) ไบต์ 0x0d0a
สว่าง

10

Bash , 39 38 37 ไบต์

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

ลองออนไลน์!

พิมพ์เป็ดจำนวนหนึ่งเท่ากับจำนวนตัวเลขในจำนวนเต็มสม่ำเสมอบน [0,32767] (ดังนั้นบ่อยกว่าไม่เป็ดห้าตัว (เป็ดจำนวนมาก))

-1 ไบต์แต่ละตัวต้องขอบคุณ @Chris และ @sch ชี้ให้เห็นคู่ของราคาที่ไม่ได้ดึงน้ำหนักของพวกเขา


1
ยินดีต้อนรับสู่ PPCG!
Steadybox

1
คุณสามารถบันทึกหนึ่งไบต์โดยการกำจัดของคำพูดที่เดียวตราบเท่าที่คุณแทนที่ด้วย\n \\n
Chris

1
ความคิดดี. คุณสามารถทำสิ่งที่คล้ายกับเพียงแค่การทุบตีสร้างและไม่มีความลำบากใจสำหรับ 30 ไบต์
บาดเจ็บทางดิจิตอล

1
sed s/[0-9]/duck\\n/g<<<$RANDOM\gooseสามารถโกนหนึ่งไบต์
sch

1
sedไม่ได้เป็นแบบพกพาอย่างสิ้นเชิง \nบนแพลตฟอร์มบางอย่างที่คุณอาจได้รับไปด้วยเครื่องหมายเดียวใน คุณจะไม่ได้รับการขึ้นบรรทัดใหม่ไม่ว่าคุณจะทำอะไร
tripleee

9

Pure Bash (ไม่มียูทิลิตี้ภายนอก), 25

จากคำตอบของ @ SophiaLechnerสิ่งนี้จะพิมพ์เป็ดจำนวนมาก

ความคิดของ @ OlivierDulac เพื่อใช้เชลล์สคริปต์ PID ที่เก็บไว้ใน$พารามิเตอร์จะบันทึก 5 ไบต์

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

ลองมันออนไลน์


1
ถ้าเราสมมติว่าคุณเปิดโปรแกรมมันจะได้ pid ที่แตกต่างกันทุกครั้ง บ่อยครั้งที่มันจะมีความยาว 5 หลัก แต่ไม่เสมอไป ด้วยเหตุนี้: เปลี่ยนRANDOMเป็นการ$โกน 5 ไบต์ใช่ไหมและอีกอย่างหนึ่งสามารถทำเป็ดยาว:yes duck|head -n $$;echo goose
Olivier Dulac

@OlivierDulac ใช่ฉันคิดว่าใช้งานได้$$เป็นที่ยอมรับ - ขอบคุณ!
บาดเจ็บทางดิจิทัล

ยินดี! ฉันโพสต์เวอร์ชันอื่นของฉัน ( yes duck | head -n $$;echo goose) เป็นทางเลือก (ยาวกว่าของคุณ แต่มีหนึ่งเป็ดที่ได้รับมากสำหรับ 5 ตัวอักษรพิเศษ ^^)
Olivier Dulac


8

Bash + Coreutils, 36 27 ไบต์

yes duck|sed $$q;echo goose

พิมพ์เป็ดมากเกินไป (ระหว่าง 2 ถึงcat /proc/sys/kernel/pid_max) จากนั้นห่านตัวเดียว

บันทึกเก้าไบต์ด้วย Digital Trauma และ Olivier Dulac

ลองออนไลน์! (แต่โปรดจำไว้ว่าอาจถูกตัดทอนบางครั้ง)

ความยาวเท่ากัน แต่ไม่มีecho:

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

ลองออนไลน์!

aเป็นคำสั่งผนวกในsedและqออกจาก ทั้งสองทำงานเฉพาะบนบรรทัด$$ซึ่งสอดคล้องกับ PID


Bash มีโมดูโลแม้ว่ามันจะเพิ่มขนาด ลองhead -n $((1+(RANDOM % 5)))
tripleee

@tripleee เนื่องจากนี่คือโค้ดกอล์ฟการเพิ่มขนาดของเอาต์พุตจึงดีกว่าการเพิ่มขนาดของโค้ด และเป็ด 1,27,767 มีเหตุผลอย่างจริงจังเมื่อเทียบกับหลายพันล้านหรือมากกว่าที่คุณเห็นที่อื่น ๆ )
Chris

1
แน่นอนว่าหวังว่าจะเป็นประโยชน์ในกรณีที่มีคนต้องการใช้งานวิจัยที่ก้าวล้ำในทางปฏิบัติในหนึ่งวัน ชอบTIO 44 ไบต์โดยมีการเว้นวรรคบางส่วน
tripleee

@OlivierDulac แนะนำให้ใช้$$แทน$RANDOMสำหรับคำตอบของฉัน ฉันคิดว่าคุณสามารถใช้สิ่งเดียวกันนี้เพื่อช่วยคุณประหยัด 5 ไบต์ โอ้และลองsedด้วย:yes duck|sed 1$$q;echo goose
บาดเจ็บทางดิจิทัล

ในความyes duck|sed $$q;echo gooseเป็นจริงก็ดี - ฉันไม่คิดว่าสคริปต์ของคุณจะได้รับ PID <1
Digital Trauma

7

PowerShell , 35 30 28 ไบต์

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

ลองออนไลน์! (เวอร์ชั่นที่แก้ไข)

สร้างอาร์เรย์Get-Randomจำนวนรายการ มันอาจจะใช้เวลาสักครู่. นี่เป็นการเพิ่ม+1เพื่อให้มั่นใจว่าเราจะได้รับอย่างน้อยหนึ่งduckรายการ เวอร์ชันที่แก้ไขยังมีการ-maกำหนดแฟล็ก ximum 5เพื่อให้คุณเห็นโปรแกรมทำงานตามที่คาดไว้ (เวอร์ชันที่แก้ไขจะพิมพ์ 1, 2, 3 หรือ 4 duckวินาทีก่อนหน้าgoose)

อาร์เรย์และgooseสตริงโดดเดี่ยวถูกทิ้งไว้บนไพพ์ไลน์และค่าปริยายWrite-Outputจะให้ค่าที่คั่นด้วยบรรทัดใหม่ให้เราฟรี

คุณไม่รู้ว่ามันยากขนาดไหนสำหรับฉันที่จะไม่เปลี่ยนบรรทัดสุดท้ายเป็น"เป็ดสีเทา" ...


ตัวแปรนั้นฟังดูสนุกและคุ้มค่ากับการท้าทายของรหัส ... ฉันแนะนำให้คุณรอสองสามวันแล้วโพสต์เป็นความท้าทายของคุณเอง :)
AJFaraday

1
@AdmBorkBork, Minnesotan นี้เข้าร่วมกลุ่มนี้เพื่อ +1 เป็ดสีเทาของคุณ
Milwrdfan

0..(random)|%{'duck'};'goose'ดูเหมือนจะเป็น 29 และจะสร้างบางส่วนได้ถึง [int] :: MaxValue (2.1 พันล้าน) เป็ดก่อนห่าน (และ0..0จะพิมพ์เป็ด)
TessellatingHeckler

@TessellatingHeckler ขอบคุณ แต่ฉันเพิ่งมาพร้อมกับรุ่น 28 ไบต์ :)
AdmBorkBork



6

Brachylog , 24 21 ไบต์

-3 ไบต์ขอบคุณ Erik the Outgolfer

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

ลองออนไลน์!

ในการเฉลิมฉลองภาษาของเดือนโพสต์ brachylog แรกของฉัน การควบคุมการไหลในภาษานี้ยอดเยี่ยม

มันทำงานอย่างไร:

"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

ถ้าฉันอ่านทางขวานี่มันอ่านจากซ้ายไปขวาล่างจากบนลงล่าง?
AJFaraday

2
ภาษาพยายามค้นหาความจริงเชิงตรรกะโดยใช้เพียงบรรทัดแรกของโปรแกรม โปรแกรมของฉันบอกว่า "ตรวจสอบบรรทัดที่สองจากนั้นพิมพ์ห่าน" จากนั้นบรรทัดที่สองบอกว่า "เป็ดพิมพ์แล้วตรวจสอบหมายเลขสุ่ม 0 ถึง 4 คือ 0 หรือตรวจสอบบรรทัดนี้อีกครั้ง" ดังนั้นในทางเทคนิคจากซ้ายไปขวาเพียงแค่บรรทัดบนสุดจากนั้น predicates ใด ๆ ที่คุณโทรจากที่นั่น
PunPun1000

เยี่ยมมากมันเป็นเรื่องที่น่าสนใจมากในการค้นหาว่าภาษาใหม่ทำงานอย่างไร มันมาถึงกล่องจดหมายของฉัน แต่ฉันไม่แน่ใจว่าเป็นเพราะฉันโพสต์คำถามหรือเพราะฉันได้แสดงความคิดเห็นที่นี่แล้ว
AJFaraday

คุณสามารถรวมเพรดิเคตทั้งสองแบบนี้และผูกฉันได้
Erik the Outgolfer

6

Geometry Dash World 2.2 Editor - 4 วัตถุ

Picture of Geometry Dash Level

คำอธิบาย:

ทริกเกอร์ BG เป็นทริกเกอร์แบบสุ่มของ 2.2 ปัจจุบันดังนั้นมันจึงสลับ Group ID 1 หรือ 2

"DUCK" ตัวแรกมีรหัสกลุ่ม 1 ซึ่งทำให้มีโอกาส 50% ที่จะถูกลบออกหรือไม่ (สลับ)

ไม่มีวัตถุที่มี ID กลุ่ม 2 ในระดับนี้ดังนั้นจึงมีโอกาส 50% ที่ 2 "เป็ด" จะถูกแสดง

วิธีทำซ้ำสิ่งนี้:

"DUCK" ตัวแรกมี ID กลุ่มเป็น 1

enter image description here

ห่านและเป็ดตัวที่ 2 ไม่มีรหัสประจำตัว enter image description here

ภายในทริกเกอร์แบบสุ่ม enter image description here


ฉันรู้สึกถึงหัวข้อสำหรับความท้าทายนี้
Benjamin Urquhart

@BenjaminUrquhart อะไรนะ?
MilkyWay90

มีการส่งผลงานสำหรับ Word of Warcraft, Minecraft และเกมอื่น ๆ เช่นกัน
Benjamin Urquhart

2
@BenjaminUrquhart ดีกว่าค้นหาเกมอื่น ๆ เพื่อตอบใน
MilkyWay90

5

05AB1E , 15 14 ไบต์

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

ลองออนไลน์!

จะพิมพ์ 2, 5 หรือ 6 เป็ดแล้วห่าน

-1 ไบต์ต้องขอบคุณ @Emigna ที่ใช้ 'สำหรับคำที่บีบอัดเดี่ยว (เป็ด)


1
คุณสามารถใช้'Ðœเนื่องจากเป็ดเป็นคำเดียว
Emigna

1
Beats mine:['ÐœTΩ#].•zíΘ•»
Magic Octopus Urn

@ MagicOctopusUrn ฉันชอบวิธีวนลูปไม่สิ้นสุดของคุณ คำตอบของคุณนั้นแน่นอนมากขึ้นในจิตวิญญาณของความท้าทาย (หรือสิ่งที่ควรจะเป็น?) เนื่องจากมันสามารถส่งออกเป็ดได้ไม่ จำกัด จำนวน
Kaldo

@Kaldo ยังคง, 15 ไบต์สูญเสียของคุณ;)
Magic Octopus Urn

1
ตัวเลือก 14-byter:'Ðœ₁Ω.D.•zíΘ•»
Magic Octopus Urn


5

เรติน่า 17 ไบต์

?\\K`duck
K`goose

ลองออนไลน์!

ลองออนไลน์!

พิมพ์ 1 หรือ 2 เป็ดด้วยความน่าจะเป็นที่เท่ากัน

คำอธิบาย

?\\K`duck

ตั้งค่าสตริงการทำงานเป็นduckและพิมพ์ด้วย linefeed ต่อท้าย ( \) จากนั้นนี่จะถูกห่อในอีกเอาต์พุตหนึ่ง แต่อันนี้มีการใช้ธงสุ่ม ( ?) กับมันดังนั้นมันจึงพิมพ์ด้วยความน่าจะเป็น 50% เท่านั้น

K`goose

แทนที่duckด้วยgooseซึ่งจะถูกพิมพ์โดยปริยายในตอนท้ายของโปรแกรม

นี่คือทางเลือกสนุก ๆ ที่พิมพ์เป็ด 1 ตัวที่มีความน่าจะเป็น 50% เป็ด 2 ตัวที่ 25% เป็ด 3 ตัวที่มี 12.5% ​​... :

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

5

เป็นกลุ่ม (สคริปต์) บน Linux, 46 43 ไบต์ (4946 :เมื่อเริ่มบรรทัด)

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

ดำเนินการเป็น vim -S filenameหรือวางเพื่อทำงานvimด้วย:ก่อนแต่ละบรรทัด


2
ยินดีต้อนรับสู่ PPCG! คุณควรจะสามารถที่จะใช้มากกว่า\d [0-9]นอกจากนี้ดูเหมือนว่ากลุ่มไม่จำเป็นต้องขึ้นบรรทัดใหม่เพื่อให้สามารถมีขนาด 45 ไบต์ :)
H.PWiz

ยินดีต้อนรับสู่ PPCG!
Steadybox

5

> <> , 31 22 ไบต์

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

ลองออนไลน์!

-9 ไบต์ขึ้นอยู่กับไม่แก้ไขของต้นไม้


1
คุณสามารถลบl?!;และออกโดยมีข้อผิดพลาด
Emigna

1
และคุณสามารถประหยัดได้มากกว่านี้
Emigna

1
หรือชอบนี้
ไม่ใช่ต้นไม้

3
@Notatree ฉันได้รับสิ่งนั้นเป็นบางครั้งเพื่อพิมพ์ "\ nkcud \ nkcud ... " มันทำงานไม่ค่อยถูกต้อง
เพิ่ม

1
@Suppen เพียงแค่ใช้ลูกศรแทนการแก้ไขมิเรอร์ ดูการแก้ไข
KSmarts

5

Befunge 98 , 38 30 25 ไบต์

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

ลองออนไลน์!

  • ขอบคุณ @JoKing สำหรับการลอกแทรมโพลีนที่ไร้ประโยชน์
  • การเปลี่ยนมาใช้ Befunge 98 เพื่อการขึ้นบรรทัดใหม่ที่สั้นลง - ในตอนนี้Duckเหมาะกับสายเดี่ยว

1
คุณไม่จำเป็นต้องใช้#ในบรรทัดที่สอง
Jo King

และ "ทางเทคนิค" whitespace within a line is fineเพื่อให้คุณสามารถตัดเครื่องหมายคำพูดออกสองสามคำ (แม้ว่าผลลัพธ์จะดูแปลก ๆ )
Jo King

@JoKing ขอบคุณดูการแก้ไขของฉัน
Vincent

5

T-SQL , 70 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 ถ้าคุณเปลี่ยนselectเป็นprintและแทนที่รอบสุดท้าย'duck'select'goose'ด้วย'duck(linebreak)goose'(ด้วยการเรียงตัวอักษรตามจริง)
BradC

จริงๆแล้วคุณสามารถทำwhile rand()<.5print'duck'print'duck(linebreak)goose'เพื่อ 43.
BradC

เยี่ยมมากขอบคุณ @BradC มีวิธีอื่นในการแสดงการแบ่งบรรทัดในสตริงอื่นที่ไม่ใช่การเพิ่มอักขระ char (13) หรือไม่?
อาจจะ

ใช่เพียงแค่ใส่คืนในเครื่องหมายคำพูดฉันจะแก้ไขโพสต์ของคุณเพื่อแสดงให้คุณเห็น (ความคิดเห็นจะไม่แสดงผลตอบแทน)
BradC

1
บันทึก 3 ไบต์เพิ่มเติมได้ที่: เปลี่ยนคนแรกที่ไปwhile ifพิมพ์ (สุ่ม) อย่างใดอย่างหนึ่งหรือสองเป็ดซึ่ง (ฉันเชื่อว่า) ยังคงตอบสนองความท้าทาย
BradC

5

Powershell - 31 30 ไบต์

คำเตือน : คุณมีโอกาสมากที่สุดที่จะพบกับเป็ดจำนวนมาก Randomรวมถึงค่า 0 ถึงInt32.MaxValueดังนั้นขึ้นอยู่กับว่าคุณเป็นหมายเลขสุ่มนี่อาจเป็นจำนวนมาก

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

คุณไม่ควรจะต้องใช้ในด้านหน้าของ$ ลองออนไลน์! (Random)
AdmBorkBork

@AdmBorkBork ขอบคุณสำหรับการจับ!
SomeShinyObject



4

Befunge

57 35 ไบต์ (เส้นรอบวงของเขตข้อมูลทั้งหมดคือตัวอักษรขนาด 19x3 17x2) ขอบคุณ karhell สำหรับการปรับปรุง

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

บรรทัดที่สองวางเป็ดและบรรทัดใหม่บนสแต็ก (ย้อนหลัง) และส่งออกเป็นสตริง หลังจากนั้นโอกาส 75% ที่จะกลับไปที่จุดเริ่มต้นและพิมพ์เป็ดอีกครั้ง 25% (เมื่อเครื่องหมายคำถามตัดสินใจลงไป) เพื่อพิมพ์ห่านและหยุด


หากโอกาส 50% ที่จะยอมรับห่านนั้น55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"< จะลดรหัสของคุณลงเหลือ 35 bytes
karhell

อาล้อมรอบหวาน คุณพูดถูกฉันจะโพสต์การอัปเดตในภายหลัง!
rael_kid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.