Willkommen in der Welt des Compiler-Golfs. Ihre Aufgabe ist es, ein Programm zu schreiben, das ein anderes Programm generiert, um eine Variante von FizzBuzz nach Spezifikation abzuspielen.
Dein Compiler
Schreiben Sie einen Compiler, der nach Spezifikation Varianten des FizzBuzz-Programms generiert. Die Spezifikation dieser Variante wird in Form eines Arrays von Integer / String-Paaren ausgedrückt.
- Die Eingabe kann in jeder für Ihre Sprache geeigneten Form erfolgen. (In meinen Beispielen wird n: xxxx verwendet, dies dient jedoch nur zur Veranschaulichung.)
- Jede Ganzzahleingabe darf nur einmal pro Aufruf Ihres Compilers verwendet werden.
- Die ganze Zahl jedes Paares hat einen Wert von mindestens eins.
- Die Zeichenfolge jedes Paares besteht nur aus genau vier ASCII-Buchstaben.
- Die Ausgabe muss ein einzelnes vollständiges Programm sein, das den folgenden Regeln entspricht.
- Die Ausgabe kann in beliebiger Form erfolgen, sofern es sich um ein Textprogramm handelt. (Also keine zurückgegebenen Lambda-Ausdrücke.)
Das Verhalten ist für Eingaben, die nicht den obigen Regeln entsprechen, undefiniert.
Ihr generiertes FizzBuzz-Programm
Das von Ihrem Compiler generierte Programm verwendet eine einzelne Ganzzahl n als Eingabe. Es wird eine Folge von Zahlen von eins bis einschließlich n ausgegeben, wobei die Zahlen bei Bedarf durch FizzBuzz-Zeichenfolgen ersetzt werden.
- Das generierte Programm muss in derselben Sprache wie der Compiler sein.
- Die Eingabe n kann in jeder für Ihre Sprache geeigneten Form erfolgen.
- n hat einen Wert von mindestens eins.
- Eine Zahl, die ein Vielfaches von mindestens einer der in den Compiler eingegebenen Ganzzahlen ist, muss durch alle Zeichenfolgen ersetzt werden, die mit diesen zusammengefügten Ganzzahlen gepaart sind.
- Eine Zahl, die nicht durch einen FizzBuzz-String ersetzt werden soll, muss in dezimalem ASCII ausgegeben werden.
Beispielsweise;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
Wertung
Ihre Eingabe wird anhand der Länge der von Ihrem Compiler generierten Programme bewertet, die zur Länge Ihres Compilers addiert werden. Führen Sie Ihren Compiler mehrmals mit den folgenden Parametern aus und addieren Sie die Länge der generierten Programme zusammen mit der Länge des Compilers, um Ihre Punktzahl zu ermitteln.
- Zähle einfach. (Keine Eingaben - Das generierte Programm zählt 1 bis n ohne Ersetzungen.)
- Nur Golf. (1: Golf - Das generierte Programm gibt n- mal "Golf" aus .)
- Klassischer FizzBuzz. (3: Fizz, 5: Buzz)
(Beachten Sie, dass Ihr Compiler Code für jede gültige Eingabe generieren muss, nicht nur für diese.)