Texte de saveur
L'esolang Underload basé sur la pile a des liens intéressants avec la programmation fonctionnelle. L'un d'eux est son traitement du type de données numérique - comme le calcul lambda, vous représentez le nombre naturel N par une fonction qui effectue une action N fois.
Pour simplifier les choses, nous ne considérerons que le sous-ensemble suivant de commandes Underload:
:
- Cette commande duplique l'élément supérieur de la pile.*
- Cette commande concatène les deux premiers éléments de la pile en un seul élément.
Nous définissons un nombre de sous-charge N comme une chaîne de :
et *
qui, lorsqu'il est exécuté, consomme l'élément supérieur de la pile et produit N copies de cet élément concaténées ensemble. Quelques exemples:
- Il n'y a pas de chiffres de sous-charge 0, -1, 1/2, π.
- La chaîne vide
est le chiffre Underload 1, car elle laisse la pile intacte.
:*
est le nombre de sous-charge 2, car il duplique l'élément supérieur, puis concatène ces deux copies ensemble en un seul élément:(A):*
=(A)(A)*
=(AA)
.::**
est le chiffre de sous-charge 3:(A)::**
=(A)(A):**
=(A)(AA)*
=(AAA)
.:::***
est le chiffre de sous-charge 4.:*:*
est également le chiffre de sous-charge 4:(A):*:*
=(AA):*
=(AA)(AA)*
=(AAAA)
.
En général, vous constaterez que, si M
et N
sont les nombres de sous-charge M et N, alors :N*
est le chiffre N + 1, et MN
est le chiffre M × N.
Le défi
Votre tâche consiste à écrire le programme le plus court (en prenant l'entrée sur STDIN) ou la fonction (en prenant l'entrée via un argument) qui produit la représentation la plus courte du nombre de sous-charge pour son entrée sous forme de chaîne. Autrement dit, si l'entrée est un nombre naturel positif N> 1, vous devez produire un nombre de sous-charge N dont la longueur en caractères est inférieure ou égale à celle de tous les autres nombres de sous-charge N.
Exemples d'entrées et de sorties: ("Input - OUTPUT
.")
- 1 -
.
- 2 -
:*
. - 5 -
::*:**
(2 × 2 + 1). - 7 -
::*::***
(2 × 3 + 1) ou:::**:**
(3 × 2 + 1). - 33 -
::*:*:*:*:**
(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***
(16 × 3 + 1, longueur 14) mais pas::*::***::*::***
(7 × 7, longueur 16).
Si l'entrée n'est pas un nombre naturel positif, vous êtes libre de renvoyer une erreur, de produire un comportement indéfini ou même de ne pas terminer. Une explication de la méthode de votre soumission pour trouver la réponse est appréciée.
Des restrictions d'échappatoire standard s'appliquent: aucune entrée supplémentaire, aucune demande Web, la valeur de sortie / retour doit être exactement la réponse et non un flux aléatoire infini de :
et *
, etc.
x
est celle 2*A117498(x)
où A117498 donne la combinaison optimale de méthodes binaires et factorielles pour trouver une chaîne d'addition.