Fizz Buzz Lightyear


9

จากความท้าทายที่เกี่ยวข้องกับ FizzBuzz จำนวนมาก (สองรายการ) ที่โพสต์เมื่อเร็ว ๆ นี้ทาง PPCG ฉันถูกล่อลวงให้คิดหาตัวเอง ดูเถิด ...

Fizz Buzz Lightyear

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เป็นจำนวนเต็มnและพิมพ์ออกมาFizzBuzzสำหรับหารจำนวนใด ๆ โดย 15 Fizzสำหรับหารจำนวนใด ๆ โดย 3 และBuzzสำหรับหารจำนวนใด ๆ โดย 5 ขึ้นไป n(และรวม) เอาต์พุตสำหรับทุกคนiจะต้องตามด้วยการขึ้นบรรทัดใหม่ แต่มีการบิด!

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

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

(นั่นคือเพียงผนวก Lightyear, Space Ranger, Universe Protection Unit.ไปBuzzหรือFizzBuzz- สิ่งที่เป็นคุณจะมีการแสดงมิฉะนั้นหมายเหตุพื้นที่ชั้นนำ.)

แต่เสียงพึมพำ Lightyear, เป็นเรนเจอร์พื้นที่เขาเป็นมีการได้ยินเฉียบพลันมากและเพื่อให้การพิมพ์FizzBuzzจะนับของคุณBuzzนับ

จากนั้น Buzz แขวนรอบเพื่อปกป้องคอมพิวเตอร์ของคุณจากผลลัพธ์ที่ชั่วร้ายทั้งหมดจนกว่าคุณจะกดหมายเลขอื่นที่หารด้วย 5 (หรือ 15 เนื่องจากตัวเลขเหล่านั้นหารด้วย 5 ด้วย) หมายความว่าจนกว่าคุณจะต้องพิมพ์Buzz(หรือFizzBuzz) อีกครั้งคุณจะไม่พิมพ์อะไรเลย

ในที่สุดเมื่อคุณถึงสภาพที่เหมาะสม Buzz จะออก:

To infinity and beyond!

ตัวอย่างผลลัพธ์

นี่คือผลลัพธ์ที่คาดไว้สำหรับn = 25: (สังเกตว่ามันข้าม 16 ถึง 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

กฎระเบียบ

ขึ้นบรรทัดใหม่ที่เป็นตัวเลือกยอมรับได้

นี่คือรหัสกอล์ฟ เช่นรหัสสั้นที่สุดในไบต์ชนะ

สมมติให้nถูกต้องและมีค่ามากกว่าหรือเท่ากับ 15 (ซึ่งเป็นเมื่อความท้าทายครั้งแรกเบี่ยงเบนจาก fizzbuzz มาตรฐาน)

Buzz ทักทายคุณเมื่อ "ตัวนับ Buzz" (ซึ่งนับทั้งคู่BuzzและFizzBuzz) ฮิต 3; เขาออกเดินทางเมื่อมีการพิมพ์ถัดไปBuzz(รวมถึงอีกครั้งทั้งสองBuzzและFizzBuzz)

หมายเลขที่เขาออกจะไม่นับรวมใน "Buzz counter" ถัดไป คุณควรเริ่มนับBuzzes อีกครั้งจาก 0 ตัวอย่างเช่นโปรแกรมที่ทำงานด้วยn = 25(ตัวอย่างเอาต์พุต) ควรลงท้ายด้วย "Buzz counter" 1 ซึ่งเป็นจำนวนครั้งที่Buzzพิมพ์นับตั้งแต่ครั้งสุดท้ายที่เขาจากไป

ในกรณีที่nอยู่ระหว่างหนึ่งในการมาถึงของ Buzz และหนึ่งในการออกเดินทางของเขา (เช่นเขายังคงอยู่ที่นั่น - คุณไม่ได้พิมพ์อะไร) คาดว่าจะยุติอย่างสง่างาม ดังนั้นบรรทัดสุดท้ายของเอาต์พุตจะเป็นการแนะนำของเขา

ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม


1
คุณช่วยชี้แจงพฤติกรรมที่คาดหวังได้เมื่อnอยู่ระหว่างการมาถึงของ Buzz Lightyear และการจากไปของเขา?
2560

เพียงออกจากโปรแกรม ฉันจะแก้ไขกฎภายในไม่
กี่

คำตอบ:


5

Javascript (ES6), 182 175 ไบต์

  • -7 ไบต์ : ย้ายลอจิก Lightyear ของ Buzz เข้าสู่นิพจน์ประกอบไปด้วย 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 ไบต์

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

ลองออนไลน์!

คำอธิบาย

สังเกต: Buzz Lightyear มาถึง "หมายเลข Buzz" ครั้งที่สามและออกเดินทางครั้งที่สี่ "หมายเลข Buzz" คือทวีคูณของห้า ดังนั้นการเคลื่อนไหวของ Buzz จึงเกิดขึ้นในรอบความยาว 20

เราวนซ้ำiตั้งแต่ 0 ถึง input-1 (ซึ่งหมายความว่าiจะน้อยกว่าจำนวนจริงที่เราพิจารณาอยู่เสมอ)

ใช้-~iเป็นทางลัดสำหรับi+1, if-~i%20<16:การตรวจสอบถ้าi+1, พอควร 20 เป็น 15 หรือภายใต้ (ถ้าเป็น 16 ถึง 19 จะมี Buzz Lightyear แสดงอยู่และเราไม่ต้องการแสดงผลใด ๆ )

ภายในคำสั่ง if เราต้องการพิมพ์To infinity and beyond!ทุก ๆ 20 - นั่นคือทุกครั้งที่i%2019 (จำไว้ว่าiเป็นหนึ่งน้อยกว่าจำนวนจริง) เนื่องจากi%20จะไม่มากกว่า 19 i%20/19จะเป็น 1 ในที่ต้องการ กรณี <1 มิฉะนั้น Python 2 สะดวกตัดทอนเมื่อมีการคูณด้วยสตริงดังนั้นi%20/19*"..."ให้สตริงเต็มถ้าi%20เป็น 19 ""มิฉะนั้น

หากกรณีข้างต้นนำไปใช้เราจะไม่พิมพ์สิ่งอื่นใด แต่ถ้าการแสดงออกครั้งแรกคือ""(ซึ่งเป็นเท็จ) เราใช้orเพื่อดำเนินการต่อไป การแสดงออกสำหรับFizz,Buzzและการแนะนำจะถูกคำนวณเช่นเดียวกับข้างต้นและรวมเข้าด้วยกัน

-~iสุดท้ายหากไม่มีกรณีเหล่านี้มีผลบังคับใช้เราพิมพ์หมายเลขตัวเองด้วย


2

05AB1E , 97 93 90 ไบต์

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

ลองออนไลน์!

คำอธิบายที่จะเกิดขึ้นหลังจากเล่นกอล์ฟต่อไป

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

>G"FizzBuzz"2ä” Lightyear,‡²ìÓ,ªÜŠí‰¿.”)˜N•9¨•3äR%15%_ÏJ“To infinity€ƒ—°!“)N20ÖèN)˜é®èN20%15›i\},
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.