Hintergrund
In vielen esoterischen Programmiersprachen sind keine Zahlen in Literalen integriert, daher müssen Sie diese zur Laufzeit berechnen. und in vielen dieser Fälle kann die Zahlendarstellung sehr interessant sein. Wir hatten bereits eine Herausforderung , Zahlen für Unterlast darzustellen. Bei dieser Herausforderung geht es darum, Zahlen in Modular SNUSP darzustellen . (Beachten Sie, dass Sie SNUSP nicht lernen müssen, um diese Herausforderung abzuschließen. Alle Informationen, die Sie benötigen, sind in der Spezifikation enthalten. Möglicherweise finden Sie den Hintergrund jedoch interessant.)
Die Aufgabe
Für die Zwecke dieser Herausforderung ist eine modulare SNUSP-Nummer eine Zeichenfolge, die aus den Zeichen gebildet @
wird +
, und =
mit der Ausnahme, dass das letzte Zeichen a #
ist und das vorletzte Zeichen sein muss +
oder =
(es kann nicht sein @
). Zum Beispiel gültige Zahlen sind @+#
, ==#
und @@+@=#
; Beispiele für ungültige Nummern enthalten +=
, @@#
und +?+#
.
Der Wert einer modularen SNUSP-Nummer wird rekursiv wie folgt berechnet:
#
hat einen Wert von 0 (dies ist der Basisfall).- Wenn die Zahl
=x
für eine Zeichenfolge die Form hatx
, entspricht ihr Wert dem Wert vonx
. - Wenn die Zahl
+x
für eine Zeichenfolge die Form hatx
, entspricht ihr Wert dem Wertx
plus 1. - Wenn die Zahl die Form
@cx
für ein einzelnes Zeichenc
und eine beliebige Zeichenfolge hatx
, entspricht ihr Wert dem Wert vonx
plus dem Wert voncx
.
Für diese Herausforderung müssen Sie ein Programm schreiben, das eine nichtnegative Ganzzahl als Eingabe verwendet und eine Zeichenfolge ausgibt, die die kürzestmögliche modulare SNUSP-Nummer ist und deren Wert der Eingabe entspricht.
Klarstellungen
- Es ist durchaus möglich, dass es mehr als eine Zeichenfolge mit demselben Wert gibt, und insbesondere für einige Ganzzahlen gibt es einen Gleichstand für die kürzeste modulare SNUSP-Nummer mit diesem Wert. In einem solchen Fall können Sie eine der beteiligten Zahlen mit dem Gleichstand ausgeben.
- Der Algorithmus, mit dem Sie die Nummer ermitteln, ist nicht eingeschränkt. Zum Beispiel ist es eine legale Taktik, Strings brutal zu erzwingen und zu bewerten, aber auch etwas Klügeres zu tun, um den Suchraum zu verkleinern.
- Wie bei PPCG üblich, kann Ihre Einreichung entweder ein vollständiges Programm oder eine Funktion sein (wählen Sie das aus, was in Ihrer Sprache prägnanter ist).
- Dies ist kein Problem bei der Verarbeitung von Eingabe- und Ausgabeformaten. Sie können also alle angemessenen Mittel verwenden, um eine nichtnegative Ganzzahl einzugeben und eine Zeichenfolge auszugeben. Es gibt eine vollständige Anleitung zu Meta , aber die am häufigsten verwendeten rechtlichen Methoden umfassen Funktionsargumente / -rückgaben, Befehlszeilenargumente und Standardeingabe / Standardausgabe.
Testfälle
Hier sind die kürzesten Darstellungen der ersten Zahlen:
- 0 :
#
- 1 :
+#
- 2 :
++#
- 3 :
+++#
oder@++#
- 4 :
++++#
oder+@++#
oder@=++#
- 5 :
@+++#
oder@@++#
- 6 :
+@+++#
oder+@@++#
oder@=+++#
oder@=@++#
oder@@=++#
- 7 :
@++++#
oder@+@++#
- 8 :
@@+++#
oder@@@++#
- 9 :
+@@+++#
oder+@@@++#
oder@+++++#
oder@++@++#
oder@+@=++#
oder@@=+++#
oder@@=@++#
- 10 :
@=@+++#
oder@=@@++#
oder@@@=++#
( dies ist ein ziemlich wichtiger Testfall , da alle möglichen Antworten beinhalten=
) - 11 :
@+@+++#
oder@+@@++#
oder@@++++#
oder@@+@++#
- 12 :
+@+@+++#
oder+@+@@++#
oder+@@++++#
oder+@@+@++#
oder@=+@+++#
oder@=+@@++#
oder@=@=+++#
oder@=@=@++#
oder@=@@=++#
oder@@=++++#
oder@@=+@++#
oder@@=@=++#
- 13 :
@@@+++#
oder@@@@++#
- 14 :
+@@@+++#
oder+@@@@++#
oder@=@++++#
oder@=@+@++#
oder@@+++++#
oder@@++@++#
oder@@+@=++#
- 15 :
@+@++++#
oder@+@+@++#
oder@@=@+++#
oder@@=@@++#
oder@@@=+++#
oder@@@=@++#
Als größerer Testfall ist der Ausgang vom Eingang 40 soll @@@=@@+++#
, @@@=@@@++#
, @@@@=@+++#
, oder @@@@=@@++#
.
Siegbedingung
Als Code-Golf- Herausforderung ist der Gewinner der kürzeste Eintrag, gemessen in Bytes.
=
wird optimalerweise nur als auftreten@=
, oder?