Flavour-Text
Die stapelbasierte esolang- Unterlast weist einige interessante Bindungen zur funktionalen Programmierung auf. Eine davon ist die Behandlung des numerischen Datentyps - wie beim Lambda-Kalkül stellen Sie die natürliche Zahl N durch eine Funktion dar, die eine Aktion N-mal ausführt.
Zur Vereinfachung betrachten wir nur die folgende Untermenge von Unterlastbefehlen:
:
- Dieser Befehl dupliziert das oberste Element auf dem Stapel.*
- Dieser Befehl verknüpft die beiden obersten Elemente auf dem Stapel zu einem einzelnen Element.
Wir definieren eine Unterlastungszahl N als eine Zeichenfolge von :
und *
die, wenn sie ausgeführt wird, das oberste Element auf dem Stapel verbraucht und N Kopien dieses Elements erzeugt, die miteinander verkettet sind. Einige Beispiele:
- Es gibt keine Unterlastnummern 0, -1, 1/2, π.
- Die leere Zeichenfolge
hat die Unterlastnummer 1, da der Stapel unberührt bleibt.
:*
ist die Unterlastzahl 2, da sie das oberste Element dupliziert und diese beiden Kopien dann zu einem einzigen Element zusammenfügt:(A):*
=(A)(A)*
=(AA)
.::**
ist die Unterlastzahl 3:(A)::**
=(A)(A):**
=(A)(AA)*
=(AAA)
.:::***
ist die Unterlastzahl 4.:*:*
ist auch die Unterlastzahl 4:(A):*:*
=(AA):*
=(AA)(AA)*
=(AAAA)
.
Im Allgemeinen werden Sie feststellen, dass, wenn M
und N
die Unterlastzahlen M und N sind, dann :N*
die Zahl N + 1 ist und MN
die Zahl M × N ist.
Die Herausforderung
Ihre Aufgabe ist es, das kürzeste Programm (Eingabe über STDIN) oder die kürzeste Funktion (Eingabe über Argument) zu schreiben, die die kürzeste Darstellung der Unterlastzahl für ihre Eingabe als Zeichenfolge erzeugt. Das heißt, wenn die Eingabe eine positive natürliche Zahl N> 1 ist, müssen Sie eine Unterlastzahl N erzeugen, deren Länge in Zeichen kleiner oder gleich der jeder anderen Unterlastzahl N ist.
Beispiele für Ein- und Ausgänge: ("Input - OUTPUT
.")
- 1 -
.
- 2 -
:*
. - 5 -
::*:**
(2 × 2 + 1). - 7 -
::*::***
(2 × 3 + 1) oder:::**:**
(3 × 2 + 1). - 33 -
::*:*:*:*:**
(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***
(16 × 3 + 1, Länge 14), aber nicht::*::***::*::***
(7 × 7, Länge 16).
Wenn es sich bei der Eingabe nicht um eine positive natürliche Zahl handelt, können Sie einen Fehler zurückgeben, undefiniertes Verhalten erzeugen oder die Eingabe sogar nicht beenden. Wir freuen uns über eine Erläuterung der Methode, mit der Sie die Antwort gefunden haben.
Es gelten die üblichen Lückenbeschränkungen: Keine zusätzlichen Eingaben, keine Webanfragen, Ausgabe- / Rückgabewerte müssen genau die Antwort sein und kein unendlicher Zufallsstrom von :
und *
usw.
x
dort, 2*A117498(x)
wo A117498 die optimale Kombination von Binär- und Faktormethoden zum Auffinden einer Additionskette ergibt.