Contexte
De nombreux langages de programmation ésotériques n'ont pas de nombres intégrés aux littéraux, vous devez donc les calculer au moment de l'exécution; et dans beaucoup de ces cas, la représentation numérique peut être très intéressante. Nous avons déjà eu du mal à représenter les nombres pour Underload. Ce défi consiste à représenter les nombres dans SNUSP modulaire . (Notez que vous n'avez pas besoin d'apprendre SNUSP pour relever ce défi - toutes les informations dont vous avez besoin se trouvent dans les spécifications - mais vous pourriez trouver l'arrière-plan intéressant.)
La tâche
Aux fins de ce défi, un certain nombre modulaire SNUSP est une chaîne formée à partir des caractères @
, +
et =
, à l' exception que le dernier caractère est un #
, et que l'avant - dernier caractère doit être +
ou =
(il ne peut pas être @
). Par exemple, les numéros valides comprennent @+#
, ==#
et @@+@=#
; des exemples de numéros non valides comprennent +=
, @@#
et +?+#
.
La valeur d'un numéro SNUSP modulaire est calculée récursivement comme suit:
#
a une valeur de 0 (c'est le cas de base).- Si le nombre a la forme
=x
, pour n'importe quelle chaînex
, sa valeur est égale à la valeur dex
. - Si le nombre a la forme
+x
, pour n'importe quelle chaînex
, sa valeur est égale à la valeur dex
, plus 1. - Si le nombre a la forme
@cx
, pour tout caractère uniquec
et toute chaînex
, sa valeur est égale à la valeur dex
, plus la valeur decx
.
Pour ce défi, vous devez écrire un programme qui prend un entier non négatif en entrée et génère une chaîne qui est le plus petit nombre SNUSP modulaire possible qui a une valeur égale à l'entrée.
Clarifications
- Il est tout à fait possible qu'il y ait plus d'une chaîne avec la même valeur, et en particulier, pour certains entiers, il y aura une égalité pour le numéro SNUSP modulaire le plus court avec cette valeur. Dans un tel cas, vous pouvez sortir n'importe quel nombre impliqué avec la cravate.
- Il n'y a aucune restriction sur l'algorithme que vous utilisez pour trouver le nombre; par exemple, forcer des chaînes et les évaluer est une tactique légale, mais il en va de même pour réduire l'espace de recherche.
- Comme d'habitude sur PPCG, votre soumission peut être soit un programme complet soit une fonction (choisissez celle qui est la plus concise dans votre langue).
- Ce n'est pas un problème de gestion des formats d'entrée et de sortie, vous pouvez donc utiliser tous les moyens raisonnables pour entrer un entier non négatif et sortir une chaîne. Il existe un guide complet sur les méta , mais les méthodes juridiques les plus couramment utilisées incluent les arguments / retours de fonction, les arguments de ligne de commande et les entrées / sorties standard.
Cas de test
Voici les représentations les plus courtes des premiers nombres:
- 0 :
#
- 1 :
+#
- 2 :
++#
- 3 :
+++#
ou@++#
- 4 :
++++#
ou+@++#
ou@=++#
- 5 :
@+++#
ou@@++#
- 6 :
+@+++#
ou+@@++#
ou@=+++#
ou@=@++#
ou@@=++#
- 7 :
@++++#
ou@+@++#
- 8 :
@@+++#
ou@@@++#
- 9 :
+@@+++#
ou+@@@++#
ou@+++++#
ou@++@++#
ou@+@=++#
ou@@=+++#
ou@@=@++#
- 10 :
@=@+++#
ou@=@@++#
ou@@@=++#
( c'est un cas de test assez important à vérifier , comme toutes les réponses possibles incluent=
) - 11 :
@+@+++#
ou@+@@++#
ou@@++++#
ou@@+@++#
- 12 :
+@+@+++#
ou+@+@@++#
ou+@@++++#
ou+@@+@++#
ou@=+@+++#
ou@=+@@++#
ou@=@=+++#
ou@=@=@++#
ou@=@@=++#
ou@@=++++#
ou@@=+@++#
ou ou@@=@=++#
- 13 :
@@@+++#
ou@@@@++#
- 14 :
+@@@+++#
ou+@@@@++#
ou@=@++++#
ou@=@+@++#
ou@@+++++#
ou@@++@++#
ou@@+@=++#
- 15 :
@+@++++#
ou@+@+@++#
ou@@=@+++#
ou@@=@@++#
ou@@@=+++#
ou@@@=@++#
En cas d'essai plus grande, la sortie de l' entrée 40 doit être @@@=@@+++#
, @@@=@@@++#
, @@@@=@+++#
, ou @@@@=@@++#
.
Condition de victoire
En tant que défi de code-golf , le gagnant est l'entrée la plus courte, mesurée en octets.
=
ne se produira de manière optimale que@=
, non?