Fizz Buzz Lightyear


9

Trước nhiều thách thức liên quan đến FizzBuzz (hai?) Được đăng gần đây trên PPCG, tôi đã cố gắng tự mình nghĩ ra. Hãy chứng kiến...

Fizz Buzz Lightyear

Viết chương trình hoặc hàm lấy một số nguyên nvà in ra FizzBuzzcho bất kỳ số nào chia hết cho 15, Fizzcho bất kỳ số nào chia hết cho 3 và Buzzcho bất kỳ số nào chia hết cho 5, tối đa (và bao gồm) n. Đầu ra cho tất cả iphải được theo sau bởi một dòng mới. Nhưng có một thay đổi!

Đối với mỗi lần thứ ba bạn in Buzz, Buzz Lightyear cuối cùng cũng thực hiện cuộc gọi của bạn và gặp sự cố trong chương trình của bạn. Sau đó anh ta tự giới thiệu - nhưng kể từ khi anh ta hạ cánh, một số điều anh ta nói bị lẫn lộn với đầu ra của chương trình:

Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.

(nghĩa là chỉ thêm  Lightyear, Space Ranger, Universe Protection Unit.vào Buzzhoặc FizzBuzz- bất cứ thứ gì bạn đã hiển thị theo cách khác. Lưu ý không gian hàng đầu)

Tuy nhiên, Buzz Lightyear, trở thành Space Ranger, anh ta có thính giác rất nhạy bén, và vì vậy việc in ấn FizzBuzzsẽ được tính vào Buzzsố lượng của bạn .

Sau đó, Buzz quanh quẩn để bảo vệ máy tính của bạn khỏi tất cả đầu ra xấu xa đó, cho đến khi bạn đạt được một số khác chia hết cho 5 (hoặc 15, vì chúng cũng chia hết cho 5). Điều đó có nghĩa là cho đến khi bạn phải in Buzz(hoặc FizzBuzz) một lần nữa, bạn hoàn toàn không in bất cứ thứ gì.

Khi bạn cuối cùng đạt được điều kiện đó, Buzz khởi hành:

To infinity and beyond!

Ví dụ đầu ra

Đây là đầu ra dự kiến ​​cho n = 25: (chú ý cách nó bỏ qua 16 đến 19)

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
To infinity and beyond!
Fizz
22
23
Fizz
Buzz

Quy tắc

Dòng mới tùy chọn là chấp nhận được.

Đây là mã golf; như vậy, mã ngắn nhất, tính bằng byte, sẽ thắng.

Giả sử được đưa ra nlà hợp lệ và lớn hơn hoặc bằng 15 (đó là khi thử thách lần đầu tiên lệch khỏi fizzbuzz tiêu chuẩn)

Buzz chào đón bạn khi "Bộ đếm Buzz" (tính cả hai BuzzFizzBuzz) chạm 3; anh ta khởi hành khi bản tiếp theo Buzz(bao gồm, một lần nữa, cả hai BuzzFizzBuzz) được in.

Số mà anh ta khởi hành không được tính vào "bộ đếm Buzz" tiếp theo; thay vào đó, bạn nên bắt đầu đếm lại Buzzes từ 0. Ví dụ, một chương trình chạy với n = 25(đầu ra ví dụ) sẽ kết thúc bằng "bộ đếm Buzz" là 1, vì đó là số lần Buzzđược in kể từ lần cuối cùng anh ấy khởi hành.

Trong trường hợp nrơi vào giữa một trong những lần đến của Buzz và một trong những lần khởi hành của anh ấy (tức là anh ấy vẫn ở đó - bạn không in bất cứ điều gì), việc chấm dứt duyên dáng được mong đợi. Do đó, dòng đầu ra cuối cùng sẽ là phần giới thiệu của anh ấy

Sơ hở tiêu chuẩn bị cấm.


1
Bạn có thể làm rõ hành vi dự kiến ​​khi nrơi vào giữa sự xuất hiện của Buzz Lightyear và sự ra đi của anh ấy không?
nderscore

Đơn giản chỉ cần bỏ chương trình. Tôi sẽ chỉnh sửa các quy tắc trong một giây
osuka_

Câu trả lời:


5

Javascript (ES6), 182 175 byte

  • -7 byte : Đã chuyển logic Buzz Lightyear thành biểu thức ternary Buzz.

f=(n,s=i=b=_='')=>i++<n?f(n,s+`${(i%3?_:'Fizz')+(i%5?_:`Buzz${++b%3?_:` Lightyear, Space Ranger, Universe Protection Unit.${(i+=5)>n?_:`
To infinity and beyond!`}`}`)||i}
`):s
<!-- snippet demo: -->
<input oninput=o.innerHTML=f(this.value)>
<pre id=o>


3

Python 2 , 185 178 172 byte

for i in range(input()):
 if-~i%20<16:print i%20/19*"To infinity and beyond!"or i%3/2*"Fizz"+i%5/4*"Buzz"+i%20/14*" Lightyear, Space Ranger, Universe Protection Unit."or-~i

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

Giải trình

Quan sát: Buzz Lightyear đến "số buzz" thứ ba và khởi hành vào thứ tư. "Số Buzz" là bội số của năm. Do đó, chuyển động của Buzz xảy ra theo chu kỳ dài 20.

Chúng tôi lặp qua từng itừ 0 đến đầu vào-1. (Điều này có nghĩa ilà luôn luôn ít hơn một con số thực tế mà chúng tôi đang xem xét.)

Sử dụng -~ilàm lối tắt cho i+1, if-~i%20<16:kiểm tra nếu i+1, mod 20, là 15 hoặc thấp hơn. (Nếu là 16 đến 19, Buzz Lightyear có mặt và chúng tôi không muốn xuất bất cứ thứ gì.)

Bên trong câu lệnh if, chúng tôi muốn in To infinity and beyond!trên mỗi bội số của 20 - tức là mỗi lần i%20là 19. (Hãy nhớ rằng đó ilà một ít hơn số thực tế.) Vì i%20sẽ không bao giờ lớn hơn 19, i%20/19sẽ là 1 trong mong muốn trường hợp, <1 nếu không. Python 2, thuận tiện, cắt ngắn nổi khi nhân với các chuỗi, do đó, i%20/19*"..."cung cấp cho chuỗi đầy đủ nếu i%20là 19, nếu không "".

Nếu trường hợp trên áp dụng, chúng tôi không in bất cứ điều gì khác. Nhưng nếu biểu thức đầu tiên là ""(đó là giả), chúng tôi sử dụng orđể tiếp tục. Các biểu thức cho Fizz, Buzzvà phần giới thiệu được tính tương tự như trên và được cộng lại với nhau.

Cuối cùng, nếu không có trường hợp nào được áp dụng, chúng tôi sẽ tự in số đó -~i.


2

05AB1E , 97 93 90 byte

>GN"FizzBuzz"2äN35SÖÏJ)˜1(è“To infinity€ƒ—°!“)N20%©_è®15Q” Lightyear,‡²ìÓ,ªÜŠí‰¿.”×J®16‹i,

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

Giải thích để đến sau khi chơi golf.

Phiên bản 97 byte thay thế

>G"FizzBuzz"2ä” Lightyear,‡²ìÓ,ªÜŠí‰¿.”)˜N•9¨•3äR%15%_ÏJ“To infinity€ƒ—°!“)N20ÖèN)˜é®èN20%15›i\},
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.