Fizz Buzz Lightyear

9

Nach den vielen (zwei?) FizzBuzz-bezogenen Herausforderungen, die kürzlich auf PPCG veröffentlicht wurden, war ich versucht, meine eigenen zu entwickeln. Erblicken...

Fizz Buzz Lightyear

Schreiben Sie ein Programm oder eine Funktion, die eine Ganzzahl verwendet nund FizzBuzzfür jede durch 15 teilbare Zahl, Fizzfür jede durch 3 teilbare Zahl und Buzzfür jede durch 5 teilbare Zahl bis (einschließlich) druckt n. Auf die Ausgabe für alle imuss eine neue Zeile folgen. Aber es gibt eine Wendung!

Bei jedem dritten Druck Buzzbeachtet Buzz Lightyear endlich Ihren Anruf und stürzt in Ihrem Programm ab. Dann stellt er sich vor - aber seit er abgestürzt ist, wird einiges von dem, was er gesagt hat, mit der Ausgabe Ihres Programms verwechselt:

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

(das heißt, nur  Lightyear, Space Ranger, Universe Protection Unit.an Buzzoder anhängen FizzBuzz- was auch immer Sie sonst angezeigt hätten. Beachten Sie das führende Leerzeichen)

Buzz Lightyear ist jedoch der Space Ranger, der er ist, und hat ein sehr akutes Gehör. Daher zählt das Drucken FizzBuzzzu Ihrer BuzzZählung .

Dann bleibt Buzz herum, um Ihren Computer vor all diesen bösen Ausgaben zu schützen, bis Sie eine andere Zahl treffen, die durch 5 teilbar ist (oder 15, da diese auch durch 5 teilbar sind). Das heißt, bis Sie erneut drucken Buzz(oder FizzBuzz) müssen, drucken Sie überhaupt nichts.

Wenn Sie diesen Zustand erreicht haben, geht Buzz:

To infinity and beyond!

Beispielausgabe

Dies ist die erwartete Ausgabe für n = 25: (Beachten Sie, wie 16 bis 19 übersprungen werden)

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

Regeln

Optionaler nachfolgender Zeilenumbruch ist zulässig.

Das ist Code Golf; als solches gewinnt der kürzeste Code in Bytes.

Angenommen, die angegebene nist gültig und größer oder gleich 15 (wenn die Herausforderung zum ersten Mal vom Standard-Fizzbuzz abweicht).

Buzz begrüßt Sie, wenn der "Buzz Counter" (der sowohl zählt Buzzals auch FizzBuzz) 3 trifft; Er fährt ab, wenn das nächste Buzz(einschließlich Buzzund FizzBuzz) gedruckt wird.

Die Nummer, in der er abreist, zählt nicht für den nächsten "Buzz Counter"; Sie sollten stattdessen erneut mit dem Zählen der Buzzes von 0 beginnen. Beispielsweise sollte ein Programm, das mit n = 25(Beispielausgabe) ausgeführt wird, mit einem "Buzz-Zähler" von 1 enden, da so oft Buzzseit seiner letzten Abreise gedruckt wurde.

Falls nzwischen einer der Ankünfte von Buzz und einer seiner Abflüge liegt (dh er ist immer noch da - Sie drucken nichts), wird eine ordnungsgemäße Kündigung erwartet. Daher wäre die letzte Ausgabezeile seine Einführung

Standardlücken sind verboten.

osuka_
quelle
1
Können Sie das erwartete Verhalten nzwischen der Ankunft von Buzz Lightyear und seiner Abreise klären ?
Nderscore
Beenden Sie einfach das Programm. Ich werde die Regeln in einer Sekunde bearbeiten
osuka_

Antworten:

5

Javascript (ES6), 182 175 Bytes

  • -7 Bytes : Die Buzz Lightyear-Logik wurde in den ternären Buzz-Ausdruck verschoben.

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>

nderscore
quelle
3

Python 2 , 185 178 172 Bytes

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

Probieren Sie es online aus!

Erläuterung

Beachten Sie: Buzz Lightyear kommt bei der dritten "Buzz-Nummer" an und fährt bei der vierten ab. "Buzz-Zahlen" sind Vielfache von fünf. Somit finden die Bewegungen von Buzz in einem Zyklus der Länge 20 statt.

Wir idurchlaufen jeweils 0 von Eingang 1. (Dies bedeutet, dass dies iimmer eins weniger ist als die tatsächliche Zahl, die wir in Betracht ziehen.)

Wenn Sie -~ials Verknüpfung für verwenden i+1, wird if-~i%20<16:überprüft, ob i+1Mod 20 15 oder weniger ist. (Wenn es 16 bis 19 ist, ist Buzz Lightyear vorhanden und wir möchten nichts ausgeben.)

In der if-Anweisung möchten wir To infinity and beyond!auf jedes Vielfache von 20 drucken - das heißt, jedes Mal i%20ist es 19. (Denken Sie daran, dass dies ieins weniger als die tatsächliche Zahl ist.) Da i%20niemals größer als 19 sein wird, i%20/19wird 1 im gewünschten Wert sein Fall <1 sonst. In Python 2 werden Floats beim Multiplizieren mit Zeichenfolgen abgeschnitten , andernfalls i%20/19*"..."wird die vollständige Zeichenfolge angegeben, wenn sie i%2019 ist, andernfalls "".

Wenn der obige Fall zutrifft, drucken wir nichts anderes. Aber wenn der erste Ausdruck ""(was falsch ist) ist, verwenden wir, orum weiterzumachen. Die Ausdrücke für Fizz, Buzzund die Einführung sind in ähnlicher Weise zu der oben und addiert berechnet.

Wenn keiner dieser Fälle zutrifft, drucken wir die Nummer selbst mit -~i.

DLosc
quelle
2

05AB1E , 97 93 90 Bytes

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

Probieren Sie es online aus!

Erklärung nach weiterem Golfen.

Alternative 97-Byte-Version

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