Vịt, vịt, ngỗng!


58

Hãy nhớ trò chơi trẻ em, 'Vịt, Vịt, Ngỗng' không? Không? Tôi cũng không.

Các thách thức

  • In từ 'vịt' trên các dòng riêng lẻ với số lần không xác định.
  • In từ 'ngỗng'.
  • Chương trình của bạn kết thúc.

Những quy định

  • Cố gắng chơi trò chơi trong một vài byte.
  • Phải có ít nhất một con vịt.
  • Phải có chính xác một con ngỗng, ở cuối danh sách.
  • Phải có chính xác một con chim trên mỗi dòng. Không có dòng trống.
  • Trường hợp của các chuỗi xuất ra là không liên quan.
  • Không gian trắng trong một dòng là tốt.
  • Chương trình của bạn phải kết thúc.
  • Chương trình của bạn không nhất quán phải sản xuất cùng một số vịt.

Chúc vui vẻ!


Xin lưu ý: Câu hỏi này không phải là bản sao của Mã ngắn nhất để tạo đầu ra không xác định

Lý do bao gồm:

  • Sự liên kết với trò chơi của trẻ em
  • Các yêu cầu bắt đầu và kết thúc được xác định của chuỗi kết quả. Không có đầu ra được chỉ định trong các thách thức khác.
  • Câu trả lời Đối với các thách thức khác, không trùng lặp là trong một số byte một chữ số. Trung bình cho cái này là khoảng 30, hoặc có khoảng.
  • Theo số lượng trùng lặp giữa thử thách này và thử thách đó, bất kỳ câu hỏi golf-code nào bao gồm thẻ 'ngẫu nhiên' đều trùng lặp. Chúng ta có nên xóa tất cả?
  • Các câu trả lời mã cho thử thách này sẽ phù hợp với thử thách khác (theo cách bực bội), nhưng câu trả lời cho thử thách đó sẽ không phù hợp với thử thách này.

11
Bạn có thể định nghĩa không xác định? Nó có thể có nghĩa là không hoặc một?
đệ quy

1
Vui lòng xác định cách tạo ngẫu nhiên này. Đồng phục trong phạm vi hoặc với sự suy giảm theo cấp số nhân?
HyperNeutrino

@recursive Không, nhưng chúng ta hãy đi với một định nghĩa làm việc ... Chương trình không nhất quán trình bày cùng một số vịt.
AJFaraday

2
Nói như một Minnesotan, nếu tôi in "vịt, vịt, vịt xám" thì sao? :)
Mike Hill

1
@ jpmc26 Tôi chắc chắn có những người khác. Bạn đã phải chơi nó với những người khác, để bắt đầu.
AJFaraday

Câu trả lời:


9

Thạch , 13 byte

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

Hãy thử trực tuyến!

Giải trình:

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

Phiên bản dễ đọc hơn: Hãy thử trực tuyến!

Sẽ luôn trả lại 1 hoặc 2 con vịt.


Chúc mừng! Tôi thực sự không biết làm thế nào điều này hoạt động!
AJFaraday 16/03/18

@AJFaraday Tôi đã tiếp tục và thêm một lời giải thích cho bạn
PunPun1000

@ PunPun1000 Xin lỗi, nhưng ngăn xếp là gì? Jelly là một ngôn ngữ lập trình ngầm.
dùng202729

@ user202729 Rất tiếc, tôi đã nhận được Jelly và 05AB1E trong đầu, bạn có thể chỉnh sửa nó để sửa lỗi đó không? Xin lỗi về điều đó
PunPun1000 16/03/18

Có một sự kết hợp ngầm trong Jelly? Yay!
MilkyWay90

43

Hoạt động ngôn ngữ kịch bản Flashpoint , 48 byte

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

Luôn luôn in một hoặc hai con vịt.

random 1trả về một số (dấu phẩy động) trong khoảng từ 0 đến 1. Số đó được truyền dưới dạng đối số selectcùng với mảng [s,""]. Số ngẫu nhiên sau đó được làm tròn đến số nguyên gần nhất (0 hoặc 1) và phần tử mảng tại chỉ mục đó được chọn từ mảng.

Gọi với:

hint call f

Đầu ra:

Phiên bản 56 byte thay thế:

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

3
Nó luôn khiến tôi vui mừng khi ai đó sử dụng điều này trên PCG.
Nit

Vâng, tôi quên trò chơi này tồn tại.
Caample

38

Thế giới Warcraft 81 byte

Đây là một macro mà bạn có thể chạy trong World of Warcraft.

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

11
Chúa ơi ... Tại sao tôi chưa bao giờ nghĩ về điều này.
Bạch tuộc ma thuật Urn

4
PVCG (Trò chơi điện tử lập trình và Code Golf). Hoạt động Flashpoint là một điều, nhưng WoW? Tôi đang chờ đợi các giải pháp Minecraft và Factorio về điều này.
Brain Guider

2
@AnderBiguri Tôi nghi ngờ Minecraft sẽ làm tồi tệ hơn 81 byte (khối?);)
Chris

5
Điều này sẽ hoạt động và giúp bạn giảm xuống còn 58 byte:/run for x=1,random(1,9)do print("Duck")end print("Goose")
gastropner 15/03/18

35

Minecraft <1.13, 72 54 byte

Xin lỗi, tôi đã phải.

Hướng dẫn:

  • Tạo một thế giới Minecraft mới trong Chế độ sáng tạo
  • Tìm thư mục lưu cho thế giới đó và đặt đoạn mã sau vào data/functions/minecraft/ddg.mcfunction
  • Chạy /function ddgtrong bảng điều khiển trò chơi

Làm thế nào nó hoạt động:

Xuất ra từ "vịt" cho mọi thực thể trên thế giới, sau đó xuất ra từ "ngỗng". Vì các thực thể liên tục sinh sản và xuất hiện, số lượng "vịt" sẽ không nhất quán. Tôi đã sử dụng tellrawthay vì ngắn hơn nhiều saysayđầu ra tên của thực thể, trong khi tellrawđầu ra chính xác những gì nó được nói.

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

Ảnh chụp màn hình

nhập mô tả hình ảnh ở đây

Chỉnh sửa: Đã thay đổi {"văn bản": "vịt"} thành "vịt" (và tương tự với "ngỗng")


1
Đẹp. Chúng tôi cần thêm Minecraft trong PPCG.
BradC

9
Đáng nói là bạn (người chơi) là một thực thể trên thế giới, vì vậy số lượng vịt không bao giờ có thể là 0 (ngay cả khi không có mob thù địch hoặc mob thụ động).
BradC

1
@BradC nên có toàn bộ thử thách dựa trên Minecraft.
tox123

17

JavaScript, 45 44 42 39 37 byte

Có khả năng tạo ra lỗi tràn.

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

Kiểm tra nó

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


14

Tháng mười , 38 33 byte

Đây không phải là ngắn nhất (36 byte), nhưng nó là sở thích của tôi. Lời giải thích nằm ở phía dưới.

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

Hãy thử trực tuyến!


Một số biến thể ngắn hơn:

Điều này hoạt động trên nguyên tắc (33 byte), nhưng trình thông dịch trực tuyến hết thời gian:

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

Thêm một số byte để làm cho đầu ra ngắn hơn làm cho nó 35 hoặc 36 byte:

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

Giải trình:

Tôi sẽ chỉ giải thích cái ngẫu nhiên cuối cùng. Những cái khác tương tự, nhưng sử dụng số ngày kể từ ngày 1 tháng 1 năm 0000 cho đến ngày hôm nay.

randtrả về một số ngẫu nhiên trên khoảng (0, 1) . Do đó, 1/randtrả về một số lớn hơn 1 . Vì một phạm vi 1:f, trong đó fmột số float ngẫu nhiên lớn hơn 1 giống hệt nhau 1:floor(f), 1:1/randtạo ra một phạm vi 1 .. x , trong đó x> = 1 .

Tôi sẽ cố gắng giải thích điều này như thể Octave là một ngôn ngữ dựa trên ngăn xếp.

      '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'])? Không chắc chắn nếu điều này là "không xác định" đủ
Luis Mendo

12

Perl 5 , 20 byte

Đầu tiên là 26 byte thực tế:

Vịt 1 đến 9 lần trước khi bị nguyền rủa.

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

Hãy thử trực tuyến!

Nhưng nếu bạn có nhiều bộ nhớ và thời gian thì phiên bản 20 byte này (theo đề xuất của Chris ) cũng hoạt động:

say"Duck
"x$^T,Goose

Điều này cũng cho rằng Vấn đề Năm 2038 sẽ được giải quyết cho Perl 5 , nếu không, nó sẽ không có hiệu lực trong 1 giây 20 năm do đó.


Nếu bạn thay đổi 1+$^T%9thành chỉ $^T, nó vẫn hoạt động và bạn lưu 4 byte.
Chris

@chris Bạn rõ ràng có nhiều bộ nhớ hơn tôi. Tuy nhiên, tôi sẽ lấy đề xuất của bạn vì có những máy tính hợp lý mà nó sẽ hoạt động. Cảm ơn.
TonMedel 13/03/18

12

Python 2 , 36 34 byte

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

Dùng thử trực tuyến!

Đề xuất của Kevin Cruijssen đưa chúng ta tới 34 byte:

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

3
Chào mừng đến với trang web, và câu trả lời đầu tiên tốt đẹp!
caird coinheringaahing

Chào mừng đến với PPCG! Bạn có thể chơi golf hai byte bằng cách thay đổi ((id(id)%5)+1)để -~(id(id)%5)thoát khỏi dấu ngoặc đơn. Mẹo chơi gôn bằng <tất cả các ngôn ngữ>Mẹo chơi gôn trong Python có thể rất thú vị để đọc qua. Tận hưởng kì nghỉ của bạn!
Kevin Cruijssen

1
Tôi id(id)không thể id(0)hoặc tôi đang thiếu một cái gì đó?
Jonathan Frech

@ John, nhìn id(0)vào một vài máy tính khác nhau cho thấy đó là một hằng số.
dùng2699

1
Trực quan hơn một chút và sẽ không có nhiều byte hơn để gọi id([]). Điều này sẽ khởi tạo một danh sách riêng biệt mỗi khi chương trình chạy, theo lý thuyết sẽ luôn dẫn đến các địa chỉ bộ nhớ khác nhau.
jpmc26

11

Z Shell (+ wget & Netpbm), 168 160 150 148 145 135 120 byte

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

Không phải là giải pháp ngắn nhất, nhưng tôi cảm thấy muốn đưa ra một loạt các thách thức cho thử thách này (lấy cảm hứng từ giải pháp của @ AlexG cho vấn đề khác này ).

Kịch bản này tạo ra một hình ảnh PPM chứa từ 1-8 hình ảnh con vịt và hình ảnh con ngỗng ở phía dưới trên đầu ra tiêu chuẩn. Nó tải xuống hai hình ảnh nguồn từ Wikipedia, vì vậy việc truy cập internet là cần thiết để nó hoạt động.

Đầu ra mẫu được chuyển đổi thành JPEG thông qua pnmtojpeg :

nhập mô tả hình ảnh ở đây


1
Điều này đã hoàn toàn làm cho ngày của tôi!
AJFaraday 23/03/18

Tôi vừa nhận ra rằng bạn là người đã đề xuất thử thách khác mà tôi liên kết. xD Vâng, tôi rất vui vì bạn thích điều này! = D
lucasb

Đúng, có một số chủ đề trong các thử thách golf mã của tôi :) Tôi chắc chắn nên cho điểm thưởng cho câu trả lời bằng hình ảnh.
AJFaraday 23/03/18

Đây không phải là một lỗ hổng tiêu chuẩn, để có được tài nguyên bên ngoài?
MilkyWay90

10

R , 35 byte

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

Hãy thử trực tuyến!

rexp()tạo ra một số ngẫu nhiên từ hàm phân rã theo cấp số nhân. +1để đảm bảo ít nhất một con vịt. Tất cả các dòng sau đầu tiên bao gồm một không gian hàng đầu (là dấu phân cách mặc định cho cat) nhưng điều này được cho phép.


1
Xác suất xuất ra nhiều hơn một con vịt là exp(-1)khoảng 36,8%.
Giuseppe

Nó yêu cầu in nó trên mỗi dòng. Tôi nghĩ bạn nên thêm "\ n" vào "con vịt" của mình
stuart stevenson

3
@stuartstevenson Ở đây tôi đã sử dụng một dòng mới theo nghĩa đen chứ không phải \nlà nó ngắn hơn một byte. Nếu bạn truy cập "Thử trực tuyến!" liên kết bạn có thể thấy rằng hiệu ứng là như nhau.
dùng2390246

Trên hộp DOS / Windows, dòng mới đó vẫn sẽ là hai (2) byte. 0x0d0a
sáng

10

Bash , 39 38 37 byte

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

Hãy thử trực tuyến!

In một số vịt bằng số chữ số trong một số nguyên được phân bố đồng đều trên [0,32767] (vì vậy, thường xuyên hơn không, năm vịt (một số vịt tốt)).

Mỗi byte 1 nhờ vào @Chris và @sch chỉ ra các cặp trích dẫn không kéo theo trọng số của chúng.


1
Chào mừng đến với PPCG!
Steadybox

1
Bạn có thể lưu một byte bằng cách loại bỏ các dấu ngoặc đơn miễn là bạn thay thế \nbằng \\n.
Chris

1
Ý kiến ​​hay. Bạn có thể làm một cái gì đó tương tự chỉ với các cấu trúc bash và không có sed trong 30 byte.
Chấn thương kỹ thuật số

1
sed s/[0-9]/duck\\n/g<<<$RANDOM\goosecó thể tắt một byte
sch

1
Các sedkhông phải là hoàn toàn di động. Trên một số nền tảng, bạn có thể thoát khỏi một dấu gạch chéo ngược \n. Về những người khác, bạn sẽ không nhận được một dòng mới cho dù bạn làm gì.
tripleee

9

Pure Bash (không có tiện ích bên ngoài), 25

Dựa trên câu trả lời của @ SophiaLechner , điều này cũng in ra một số lượng lớn vịt .

Ý tưởng của @ OlivierDulac là sử dụng bộ mã script shell như được lưu trong $tham số tiết kiệm 5 byte.

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

Hãy thử trực tuyến .


1
nếu chúng tôi giả sử bạn khởi chạy một chương trình, nó sẽ nhận được một số tiền khác nhau mỗi lần. rất nhiều thời gian nó sẽ dài 5 chữ số, nhưng không phải lúc nào cũng vậy. do đó: thay đổi RANDOMđể $cạo 5 byte? Và người ta cũng có thể làm một chuỗi vịt rất dài:yes duck|head -n $$;echo goose
Olivier Dulac

@OlivierDulac vâng, tôi nghĩ việc sử dụng $$là chấp nhận được - cảm ơn!
Chấn thương kỹ thuật số

không có gì! Tôi đã đăng phiên bản khác của mình ( yes duck | head -n $$;echo goose) dưới dạng thay thế (dài hơn phiên bản của bạn, nhưng người ta nhận được RẤT NHIỀU vịt cho 5 ký tự thêm ^^)
Olivier Dulac


8

Bash + Coreutils, 36 27 byte

yes duck|sed $$q;echo goose

In quá nhiều vịt (giữa 2 và cat /proc/sys/kernel/pid_max), sau đó một con ngỗng.

Đã lưu chín byte nhờ Digital Trauma và Olivier Dulac.

Hãy thử trực tuyến! (nhưng hãy nhớ rằng đôi khi nó có thể bị cắt ngắn)

Cùng chiều dài, nhưng không có echo:

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

Hãy thử trực tuyến!

alà lệnh chắp thêm sedqthoát. Cả hai chỉ chạy trên dòng $$, tương ứng với PID.


Bash có modulo, mặc dù điều đó sẽ tăng kích thước. Hãy thửhead -n $((1+(RANDOM % 5)))
tripleee 13/03/18

@tripleee Vì đây là mã golf, nên tăng kích thước đầu ra là tốt hơn để tăng kích thước của mã. Và vịt 132767 hoàn toàn hợp lý so với tỷ hoặc nhiều hơn bạn thấy ở nơi khác;)
Chris

1
Chắc chắn, chỉ hy vọng sẽ hữu ích trong trường hợp ai đó thực sự muốn áp dụng nghiên cứu đột phá này vào thực tế một ngày nào đó. Giống như, TIO . 44 byte với một số khoảng trắng được lấy ra.
tripleee

@OlivierDulac đề nghị sử dụng $$thay vì $RANDOMcho câu trả lời của tôi . Tôi nghĩ bạn có thể sử dụng tương tự để tiết kiệm cho bạn 5 byte. Oh và cố gắng sedquá:yes duck|sed 1$$q;echo goose
Chấn thương kỹ thuật số

Trên thực tế yes duck|sed $$q;echo gooselà ổn - Tôi không nghĩ rằng kịch bản của bạn sẽ có được một PID <1.
Chấn thương kỹ thuật số

7

PowerShell , 35 30 28 byte

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

Hãy thử trực tuyến! (phiên bản được sửa đổi)

Tạo ra một loạt Get-Randomcác mục. Nó có thể mất một thời gian. Điều này thêm một +1để đảm bảo chúng tôi nhận được ít nhất một duck. Phiên bản sửa đổi cũng bao gồm một -macờ ximum 5để bạn có thể thấy chương trình hoạt động như mong đợi (phiên bản sửa đổi sẽ in 1, 2, 3 hoặc 4 duckgiây trước goose).

Mảng và goosechuỗi đơn độc được để lại trên đường ống và ẩnWrite-Output cho chúng ta các giá trị được phân tách bằng dòng mới miễn phí.

Bạn không biết làm thế nào khó khăn cho tôi để không thay đổi dòng cuối cùng thành "vịt xám" ...


Biến thể đó nghe có vẻ khá thú vị và chắc chắn đáng thử thách mã ... Tôi khuyên bạn nên đợi một vài ngày và đăng nó dưới dạng thử thách của chính mình :)
AJFaraday

1
@AdmBorkBork, Minnesotan này đã tham gia nhóm này để chỉ +1 con vịt xám của bạn.
Hình ảnh thứ

0..(random)|%{'duck'};'goose'trông giống như một con 29, và cũng sẽ tạo ra một nơi nào đó lên đến [int] :: MaxValue (2,1 tỷ) vịt trước một con ngỗng. (Và 0..0có in một con vịt)
TessellatingHeckler

@TessellatingHeckler Cảm ơn, nhưng tôi mới nghĩ ra phiên bản 28 byte. :)
admBorkBork 16/03/18



6

Brachylog , 24 21 byte

-3 byte nhờ Erik the Outgolfer

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

Hãy thử trực tuyến!

Kỷ niệm ngôn ngữ của tháng , bài đăng brachylog đầu tiên của tôi. Luồng điều khiển trong ngôn ngữ này là mát mẻ.

Làm thế nào nó hoạt động:

"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

Vì vậy, nếu tôi đọc bên phải, nó đọc từ trái sang phải, từ dưới lên trên?
AJFaraday

2
Ngôn ngữ cố gắng tìm một sự thật logic bằng cách chỉ sử dụng dòng đầu tiên của chương trình. Chương trình của tôi nói "Xác thực dòng thứ hai, sau đó in ngỗng". Sau đó, dòng thứ hai nói "in vịt, sau đó xác thực số ngẫu nhiên 0 đến 4 là 0 hoặc xác thực lại dòng này", vì vậy về mặt kỹ thuật từ trái sang phải chỉ là dòng trên cùng, sau đó bất kỳ vị từ nào bạn gọi từ đó
PunPun1000

Thật tuyệt, thật thú vị khi tìm hiểu làm thế nào các ngôn ngữ mới hoạt động. Nó đã đến hộp thư đến của tôi, nhưng tôi không chắc là do tôi đặt câu hỏi hay vì tôi đã nhận xét ở đây.
AJFaraday

Bạn có thể hợp nhất hai vị từ như thế này và ràng buộc tôi.
Erik the Outgolfer 13/03/18

6

Geometry Dash World 2.2 Editor - 4 đối tượng

Hình ảnh về mức độ hình học Dash

Giải trình:

Trình kích hoạt BG là trình kích hoạt ngẫu nhiên 2.2 hiện tại, do đó, nó sẽ tắt ID nhóm 1 hoặc 2.

"Ducks" đầu tiên có id nhóm là 1, khiến nó có 50% cơ hội bị xóa hoặc không (bật / tắt).

Không có đối tượng nào có ID nhóm 2 ở cấp độ này, do đó, có 50% cơ hội 2 "Ducks" được hiển thị.

Làm thế nào để sao chép này:

"Ducks" đầu tiên có ID nhóm là 1.

nhập mô tả hình ảnh ở đây

Ngỗng và vịt thứ 2 không có ID nhóm nhập mô tả hình ảnh ở đây

Bên trong kích hoạt ngẫu nhiên. nhập mô tả hình ảnh ở đây


Tôi cảm nhận được một chủ đề cho thử thách này
Benjamin Urquhart

@BenjaminUrquhart Gì?
MilkyWay90

Có những bài nộp cho Word of Warcraft, Minecraft và một số trò chơi khác nữa.
Benjamin Urquhart

2
@BenjaminUrquhart Tốt hơn nên tìm nhiều trò chơi để trả lời
MilkyWay90

5

05AB1E , 15 14 byte

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

Hãy thử trực tuyến!

Sẽ in 2, 5 hoặc 6 con vịt rồi ngỗng.

-1 byte nhờ @Emigna sử dụng 'cho một từ được nén (vịt)


1
Bạn có thể sử dụng 'Ðœvì vịt là một từ duy nhất.
Emigna

1
Beats mine:['ÐœTΩ#].•zíΘ•»
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Tôi thực sự thích cách tiếp cận vòng lặp vô hạn của bạn. Câu trả lời của bạn chắc chắn là nhiều hơn trong tinh thần của thử thách (hoặc nó nên là gì?) Vì nó có thể tạo ra một số lượng vịt vô hạn.
Kaldo

@Kaldo vẫn còn, 15 byte thua bạn;)
Bạch tuộc ma thuật Urn

1
Người thay thế 14 người:'Ðœ₁Ω.D.•zíΘ•»
Bạch tuộc ma thuật Urn


5

Võng mạc , 17 byte

?\\K`duck
K`goose

Hãy thử trực tuyến!

Hãy thử trực tuyến!

In 1 hoặc 2 con vịt, với xác suất bằng nhau.

Giải trình

?\\K`duck

Đặt chuỗi làm việc thành duckvà in nó với một linefeed ( \). Sau đó, nó được bọc trong một giai đoạn đầu ra khác, nhưng cái này có cờ ngẫu nhiên ( ?) được áp dụng cho nó, vì vậy nó chỉ in với xác suất 50%.

K`goose

Thay thế duckbằnggoose , được in ngầm ở cuối chương trình.

Đây là một thay thế thú vị in 1 con vịt với xác suất 50%, 2 con vịt với 25%, 3 con vịt với 12,5% ...:

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

5

Vim (tập lệnh) trên Linux, 46 43 byte (4946 với :ở đầu dòng)

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

Được thực hiện như vim -S filenamehoặc dán vào chạy vimvới :trước mỗi dòng.


2
Chào mừng đến với PPCG! Bạn sẽ có thể sử dụng \dhơn [0-9]. Ngoài ra, có vẻ như vim không yêu cầu dòng mới, vì vậy đây có thể là 45 byte :)
H.PWiz

Chào mừng đến với PPCG!
Steadybox

5

> <> , 31 22 byte

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

Hãy thử trực tuyến!

-9 byte dựa trên bản sửa đổi của cây


1
Bạn có thể loại bỏ l?!;và thoát với một lỗi.
Emigna

1
Và bạn có thể tiết kiệm thêm một số thứ như thế này
Emigna


3
@Notatree Tôi đôi khi in cái đó "\ nkcud \ nkcud ...". Nó hiếm khi cư xử đúng
Suppen 13/03/18

1
@Suppen Chỉ cần sử dụng một mũi tên thay vì gương sửa nó; xem chỉnh sửa.
KSmarts

5

Befunge 98 , 38 30 25 byte

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

Hãy thử trực tuyến!

  • Cảm ơn @JoKing đã tước tấm bạt lò xo vô dụng
  • Chuyển sang Befunge 98 cho dòng mới ngắn hơn - hiện Duckphù hợp với một chuỗi

1
Bạn không cần #dòng thứ hai
Jo vua

Và "về mặt kỹ thuật", whitespace within a line is finevì vậy bạn có thể cắt ra một vài trích dẫn (ngay cả khi đầu ra trông lạ)
Jo King

@JoKing Cảm ơn, xem chỉnh sửa của tôi.
Vincent

5

T-SQL , 70 44 43 byte (Nhiều con vịt)

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

Cảm ơn @Zac Faragher!

Phiên bản sửa đổi, 54 43 40 byte (1 hoặc 2 con vịt)

Cảm ơn @BradC!

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


Tôi dường như không thể có được điều này để chạy đúng trong SQL Fiddle , nhưng nó chỉ hoạt động tốt trong LINQPad và SSMS.

Không chắc đây là giới hạn đã biết của SQL Fiddle hay tôi chỉ đang làm gì đó sai


Đẹp. Xuống 61 nếu bạn thay đổi selectđể printvà thay thế các thức 'duck'select'goose'với 'duck(linebreak)goose'(với một linebreak đen, tất nhiên)
BradC

Trên thực tế, bạn chỉ có thể làm while rand()<.5print'duck'print'duck(linebreak)goose'trong 43.
BradC

Rất vui, cảm ơn @BradC. Có cách nào khác để biểu thị ngắt dòng trong chuỗi khác với việc thêm char (13) không?
Có lẽ là

Đúng, chỉ cần đặt trả lại theo nghĩa đen, tôi sẽ chỉnh sửa bài đăng của bạn để hiển thị cho bạn (bình luận không hiển thị lợi nhuận).
BradC

1
Lưu thêm 3 byte: thay đổi đầu tiên whilethành if. In (ngẫu nhiên) một hoặc hai con vịt, mà (tôi tin) vẫn đáp ứng thách thức.
BradC

5

Powershell - 31 30 byte

Cảnh báo : Rất có thể bạn sẽ kết thúc với rất nhiều vịt. Randombao gồm các giá trị từ 0 đến Int32.MaxValuenhư vậy, tùy thuộc vào số lượng ngẫu nhiên của bạn là bao nhiêu, điều này có thể gây ra nhiều sự đánh cắp.

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

Bạn không cần $ở phía trước (Random). Hãy thử trực tuyến!
admBorkBork 19/03/18

@AdmBorkBork cảm ơn vì đã bắt!
Một sốShinyObject



4

Befunge

57 35 byte (chu vi của toàn bộ trường là 19x3 17x2 charachters) Nhờ karhell cho sự cải tiến.

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

Dòng thứ hai đặt vịt và một dòng mới trên ngăn xếp (ngược) và xuất nó dưới dạng một chuỗi. Sau 75% cơ hội quay trở lại bắt đầu và in lại con vịt, 25% (khi dấu hỏi quyết định đi xuống) để in ngỗng và dừng lại.


Nếu cơ hội ngỗng 50% được chấp nhận, 55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"< sẽ cắt mã của bạn xuống còn 35 byte
karhell

Ah bao bọc ngọt ngào. Bạn nói đúng, cảm ơn, tôi sẽ đăng cập nhật sau!
rael_kid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.