Fizz Buzz Lightyear


9

Son zamanlarda PPCG'de yayınlanan birçok (iki?) FizzBuzz ile ilgili zorluğun ardından, kendiminkini ortaya çıkarmak istedim. Seyretmek...

Fizz Buzz Lightyear

Tamsayı alan nve FizzBuzz15'e Fizzbölünebilen herhangi bir sayı için, 3'e Buzzbölünebilen herhangi bir sayı için ve 5'e kadar (ve dahil) bölünebilen herhangi bir sayı için yazdırılan bir program veya işlev yazın n. Herkesin içıktısını bir satırsonu takip etmelidir. Ama bir bükülme var!

BuzzBuzz Lightyear, yazdırdığınız her üçüncü seferde , programınızdaki arama ve çökme alanlarınıza kulak verir. Daha sonra kendini tanıtır - ancak çöktüğü için söylediklerinden bazıları programınızın çıktısıyla karışır:

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

(bu sadece ekleme olduğu  Lightyear, Space Ranger, Universe Protection Unit.için Buzzya FizzBuzz- bu başka türlü görüntülenen olurdu ne olursa olsun lider boşluğu unutmayın.)

Ancak, Buzz Lightyear, öyle Uzay Polisi olmak çok akut işitme vardır ve bu yüzden baskı FizzBuzzsizin için hesaba katılacaktır Buzzsayım .

Ardından, Buzz, bilgisayarınızı 5 ile bölünebilen başka bir numaraya (veya 5'e bölünebildiğinden) kadar tüm bu kötü çıkıştan korumak için takılır. Bunun anlamı, tekrar yazdırmanız Buzz(veya FizzBuzz) yapmanız gerekene kadar hiçbir şey yazdırmamanızdır.

Sonunda bu duruma ulaştığınızda, Buzz yola çıkar:

To infinity and beyond!

Örnek Çıktı

Bu beklenen çıktı n = 25: (16'dan 19'a nasıl atladığına dikkat edin)

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

kurallar

İsteğe bağlı sondaki yeni satır kabul edilebilir.

Bu kod golf; bu nedenle, bayt cinsinden en kısa kod kazanır.

Verilen varsayımın ngeçerli ve 15'ten büyük veya ona eşit olduğu varsayılır (bu, meydan okumanın standart fizzbuzz'dan ilk kez saptığı zamandır)

"Buzz sayacı" (her ikisini de sayar Buzzve FizzBuzz) 3'e ulaştığında Buzz sizi karşılar ; bir sonraki Buzz(tekrar, her ikisi Buzzve dahil FizzBuzz) yazdırıldığında yola çıkar .

Kalkış sayısı bir sonraki "Buzz sayacı" na dahil değildir; Bunun yerine es'leri Buzz0'dan tekrar saymaya başlamalısınız. Örneğin, n = 25(örnek çıktı) ile çalışan bir programın 1 "Buzz sayacı" ile bitmesi gerekir, çünkü bu Buzzson ayrılışından bu yana kaç kez yazdırıldığıdır.

Durumda nBuzz'ın gelenler bir ve onun gidiş biri arasında düşer (yani Hala orada - Bir şeye baskı değiliz), zarif sonlandırma bekleniyor. Bu nedenle, son çıktı satırı onun tanıtımı olacaktır

Standart boşluklar yasaktır.


1
nBuzz Lightyear'ın gelişi ile gidişi arasına girdiğinde beklenen davranışı netleştirebilir misiniz ?
nderscore

Sadece programdan çıkın. Kuralları bir saniyede düzenleyeceğim
osuka_

Yanıtlar:


5

JavaScript (ES6), 182 175 bayt

  • -7 bayt : Buzz Lightyear mantığını Buzz üçlü ifadesine taşıdı.

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 bayt

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

Çevrimiçi deneyin!

açıklama

Gözlemleyin: Buzz Lightyear üçüncü "vızıltı" numarasına ulaşır ve dördüncü olarak ayrılır. "Buzz sayıları" beşin katlarıdır. Böylece, Buzz'ın hareketleri 20 uzunluklu bir döngüde gerçekleşir.

i0'dan giriş-1'e kadar her biri üzerinde döngü yapıyoruz . (Bu i, her zaman düşündüğümüz gerçek sayıdan daha az olduğu anlamına gelir .)

Kullanımı -~iiçin bir kısayol olarak i+1, if-~i%20<16:kontrol, eğer i+1, mod 20, 15 ya da altındadır. (16 ile 19 arasındaysa, Buzz Lightyear mevcut ve hiçbir şey çıktı almak istemiyoruz.)

Eğer açıklamada İçinde, biz yazdırmak istediğiniz To infinity and beyond!20 her katları olacak - olduğunu her zaman i%2019. (unutmayın olduğunu iaz gerçek sayıdan biridir.) Bu yana i%20, 19 daha büyük olmayacak i%20/19arzu içinde 1 olacak durum, aksi takdirde <1. Python 2, uygun olarak, dizelerle çarpıldığında yüzer keser, bu nedenle 19 i%20/19*"..."ise tam dizeyi verir i%20, aksi takdirde "".

Yukarıdaki durum geçerliyse, başka bir şey yazdırmıyoruz. Ama eğer ilk ifade ""(ki bu falsili) ise, ordevam etmek için kullanırız . İçin ifadeleri Fizz, Buzzve tanıtım yukarıda benzer şekilde hesaplanabilir ve toplanır.

Son olarak, bu durumlardan hiçbiri geçerli değilse, numarayı kendisi ile basarız -~i.


2

05AB1E , 97 93 90 bayt

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

Çevrimiçi deneyin!

Daha fazla golf sonrası gelecek açıklama.

Alternatif 97 baytlık sürüm

>G"FizzBuzz"2ä” Lightyear,‡²ìÓ,ªÜŠí‰¿.”)˜N•9¨•3äR%15%_ÏJ“To infinity€ƒ—°!“)N20ÖèN)˜é®èN20%15›i\},
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.