Inspiriert von Ziffern in ihren Gassen und 1, 2, Fizz, 4, Buzz
Einführung
Ihre Aufgabe ist es, genau die folgende Ausgabe zu generieren:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Herausforderung
Diese Herausforderung basiert auf der Fizz Buzz-Herausforderung. Hier ist eine Zusammenfassung: Geben Sie die Zahlen von 1 bis einschließlich 100 aus, wobei jede Zahl in einer eigenen Zeile steht. Wenn die Zahl jedoch ein Vielfaches von 3 ist, sollten Sie statt "Fizz" ausgeben Wenn die ursprüngliche Nummer ein Vielfaches von 5 ist, sollten Sie "Buzz" anstelle der ursprünglichen Nummer ausgeben. Wenn die Zahl ein Vielfaches von 15 ist, sollten Sie "FizzBuzz" anstelle der ursprünglichen Zahl ausgeben.
Zusätzlich zu der obigen Anforderung sollten Sie jedoch jede Zeile mit Leerzeichen einrücken, damit jede Spalte nur eindeutige Zeichen enthält (mit Ausnahme von Leerzeichen und Zeilenumbrüchen). Die Leerzeichen vor jeder Zeile stellen das Minimum dar, das erforderlich ist, damit alle Zeilen angezeigt werden, bevor sie (einschließlich) eindeutige Zeichen in jeder Spalte enthalten.
Zum Beispiel 1,2,Fizz,4
braucht keine Vertiefung , weil sie bereits eindeutige Zeichen in jeder Spalte (Spalte 1: 12F4
, column2: i
, column3: z
, Column4: z
), aber beim Hinzufügen Buzz
müssen wir Gedankenstrich durch zwei Räume , weil sonst hätten wir zwei haben z
‚s in der 3. und 4. Spalte. Da zwei Leerzeichen ausreichen, um das Ziel zu erreichen, sollten Sie es nicht um drei Leerzeichen einrücken. 7
und 8
benötigt keine Einrückung, aber bei der Ausgabe müssen 11
wir um ein Leerzeichen einrücken, da die erste Spalte bereits eine hat 1
. 13
muss dann um drei Leerzeichen eingerückt werden, da nun die 1., 2. und 3. Spalte alle ein1
. Einrückungen für die restlichen Zeilen folgen der gleichen Regel.
Um die Herausforderung zu vereinfachen, wurde die Obergrenze auf 50 geändert.
Technische Daten
Sie können ein Programm oder eine Funktion schreiben. Keiner von beiden sollte eine nicht leere Eingabe annehmen. Leere Eingaben sind in Ordnung.
Da dies eine KC-Herausforderung ist, müssen Sie die im Abschnitt Einführung angegebene Ausgabe erstellen. Eine einzelne nachgestellte Zeile ist in Ordnung. Keine Zeilenumbrüche oder zusätzliche Leerzeichen. Keine zusätzlichen Leerzeichen für jede Zeile.
Ihr Programm kann mit einem Fehler beendet werden oder eine nicht leere STDERR-Ausgabe haben, solange STDOUT der Spezifikation entspricht.
Dies ist Intra-Language- Code-Golf , das Programm mit der niedrigsten Anzahl von Bytes gewinnt in seiner Sprache.
Es gelten Standardlücken .
quelle
Antworten:
Python 2 , 127 Bytes
Probieren Sie es online!
Eine 50-Byte-Nachschlagetabelle scheint die Codegröße weniger zu beeinträchtigen als die Logik, die erforderlich ist, um zu verfolgen, welche Zeichen in jeder Spalte aufgetreten sind.
quelle
Python 2 ,
167166163161157 BytesProbieren Sie es online!
Bearbeitungen:
while
ist kürzer alsfor..range()
1 Byte.exec
...i%3/2
Trick aus Lynns Antwort (-2 Bytes).a=map(set,[[]]*99)
, aber ich fand einen anderen Weg miteval
undrepr
mit den gleichen Bytes (-4 Bytes).Verwenden Sie eine Liste von Sätzen, um die Zeichen zu verfolgen, die für jede Spalte verwendet werden, und legen Sie die Ungleichheit für die Mitgliedschaft fest. Der Rest folgt der genauen Spezifikation.
quelle
C (gcc) ,
145144 Bytes (143 für hex)Probieren Sie es online!
quelle
Ruby , 129 Bytes
Probieren Sie es online!
Lynn erhält hier eine doppelte Gutschrift für den Lookup-Table-Ansatz und den Fizzbuzz-Algorithmus .
Der FizzBuzz-Algorithmus ist sehr interessant und hängt von dem bemerkenswerten Zufall ab, dass alle positiven, nicht zusammengesetzten Zahlen unter 15 (außer 3 und 5), wenn sie auf die 4. Potenz angehoben werden, 1 mehr als ein Vielfaches von 15 sind Tatsache:
Die Werte
3**4%15
und5**4%15
sind genau 4 auseinander: die Länge der Zeichenfolge "Fizz". Wir können dies ausnutzen, indem wir sie verwenden, um ab dem Ende einer Zeichenfolge mit einer Länge von mindestens 9 Zeichen zu indizieren. Ein Vielfaches von 3 indiziert ab dem Anfang der Zeichenfolge und ein Vielfaches von 5 indiziert ab dem Ende ab 5 Zeichen. Jede andere Zahl wird versuchen, vor dem Anfang der Zeichenfolge zu indizieren, und schlägt fehl, und kehrt zurücknil
. Dann indiziert 15 natürlich ab dem 0. Zeichen. Die Tatsache, dass "FizzBuzz" nur 8 Zeichen lang ist, ist ein kleines Hindernis. Wir verwenden ein Newline-Zeichen, um es aufzufüllen, das später von ignoriert wirdputs
.Es ist möglich, dass die Nachschlagetabelle durch einen prozeduralen Ansatz ausgelagert werden kann, aber mein Versuch lag in der Nähe von 190 Bytes.
quelle
[JavaScript (Node.js) REPL], 144 Byte
`
Probieren Sie es online!
Das Warnprogramm selbst führt eine inakzeptable Zeit aus
JavaScript (Node.js) , 132 Bytes von Arnauld
Probieren Sie es online!
quelle
Java (JDK 10) , 185 Byte
Probieren Sie es online!
Credits
quelle
Haskell ,
190 187 186 178176 BytesProbieren Sie es online!
Die etwas besser lesbare (und kommentierte) Version:
Bearbeiten: Ich habe einige Funktionen in der Golf-Version eingefügt, um mehr Bytes zu sparen.
quelle
Jstx , 122 Bytes
Probieren Sie es online!
quelle