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 n
und FizzBuzz
für jede durch 15 teilbare Zahl, Fizz
für jede durch 3 teilbare Zahl und Buzz
für jede durch 5 teilbare Zahl bis (einschließlich) druckt n
. Auf die Ausgabe für alle i
muss eine neue Zeile folgen. Aber es gibt eine Wendung!
Bei jedem dritten Druck Buzz
beachtet 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 Buzz
oder 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 FizzBuzz
zu Ihrer Buzz
Zä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 n
ist 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 Buzz
als auch FizzBuzz
) 3 trifft; Er fährt ab, wenn das nächste Buzz
(einschließlich Buzz
und 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 Buzz
es 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 Buzz
seit seiner letzten Abreise gedruckt wurde.
Falls n
zwischen 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.
n
zwischen der Ankunft von Buzz Lightyear und seiner Abreise klären ?Antworten:
Javascript (ES6),
182175 Bytesquelle
Python 2 ,
185178172 BytesProbieren 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
i
durchlaufen jeweils 0 von Eingang 1. (Dies bedeutet, dass diesi
immer eins weniger ist als die tatsächliche Zahl, die wir in Betracht ziehen.)Wenn Sie
-~i
als Verknüpfung für verwendeni+1
, wirdif-~i%20<16:
überprüft, obi+1
Mod 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 Mali%20
ist es 19. (Denken Sie daran, dass diesi
eins weniger als die tatsächliche Zahl ist.) Dai%20
niemals größer als 19 sein wird,i%20/19
wird 1 im gewünschten Wert sein Fall <1 sonst. In Python 2 werden Floats beim Multiplizieren mit Zeichenfolgen abgeschnitten , andernfallsi%20/19*"..."
wird die vollständige Zeichenfolge angegeben, wenn siei%20
19 ist, andernfalls""
.Wenn der obige Fall zutrifft, drucken wir nichts anderes. Aber wenn der erste Ausdruck
""
(was falsch ist) ist, verwenden wir,or
um weiterzumachen. Die Ausdrücke fürFizz
,Buzz
und 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
.quelle
05AB1E ,
979390 BytesProbieren Sie es online aus!
Erklärung nach weiterem Golfen.
Alternative 97-Byte-Version
quelle