Spécifications Mathemania:
Chaque morceau de code Mathemania commence par le numéro 2
. Depuis le 2
, vous pouvez effectuer les opérations suivantes:
e
: Exponentiation. La valeur par défaut de cette commande est la quadrature du nombre.f
: Factorielle. La valeur par défaut de cette commande utilise la factorielle unique sur le nombre (using f on 2 = 2! = 2
).r
: Racine. La valeur par défaut de cette commande est la racine carrée du nombre.c
: Fonction plafond.l
: Fonction plancher.
Pour générer un nombre dans Mathemania, vous devez enchaîner ces commandes, qui sont exécutées de gauche à droite sur le nombre 2
.
Exemples:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
Les e
, f
et les r
commandes peuvent être modifiées par des commandes supplémentaires (Esta + qui commencent également hors avec 2
comme numéro « de base ») pour générer différents exponentiations, factorielles et des racines en plaçant entre parenthèses après la fonction altérée et en plaçant les commandes Esta + à l' intérieur.
Par exemple, pour cube un nombre au lieu de le mettre au carré, vous pouvez mettre la commande pour 3
après e
comme ceci:
e(efrrc) -> cube a number, "efrrc" = 3
REMARQUE: pour notre objectif, la commande factorielle ( f
) commence par 2
une seule factorielle. Donc, si vous le faites f(efrrc)
, cela sera évalué à une double factorielle, pas à une triple factorielle.
Pour les n
factorielles (par exemple, factorielles doubles = factorielles 2, factorielles triples = factorielles 3, etc.), le nombre de base est multiplié par le nombre qui est n
inférieur à celui-ci, et n
inférieur à cela, et ainsi de suite jusqu'à ce que le nombre final ne puisse pas être soustrait par n
sans devenir 0
ou négatif.
Par exemple:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Pour plus d'informations, voir ici .
Vous pouvez l'insérer n'importe où et il sera traité par Mathemania comme une fonction unique:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Vous pouvez également les imbriquer les uns dans les autres:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Pour un interprète du code Mathemania, cliquez ici (cheers, @ BradGilbertb2gills!)
Tâche:
Votre tâche consiste à créer un programme qui, lorsqu'il reçoit un entier positif n
en entrée, génère un programme Mathemania qui, une fois exécuté, revient n
.
Cependant, les programmes Esta + que vous générez doit être aussi petit (golfed) que possible, et votre score final est déterminé par la somme du nombre d'octets dans les programmes générés Esta + de l'échantillon, qui sont les entiers 10,000
à 10,100
. Le score le plus bas l'emporte.
Règles et spécifications:
- Votre programme doit générer un programme Mathemania valide pour tout entier positif, mais seuls les nombres compris entre
10,000
et10,100
seront testés. - Vous n'êtes pas autorisé à générer des programmes Mathemania qui n'entraînent pas de nombre entier. Si vous le faites, votre programme est disqualifié.
- Pour les commandes
e
,f
etr
, le code Mathemania à l'intérieur de ces fonctions (par exemplee(efrrc)
, oùefrrc
est le code à l'intérieur de la fonction) doit correspondre à un entier positif ci-dessus2
. Si votre programme ne respecte pas cette règle, il est également disqualifié. - Votre programme doit renvoyer un programme Mathemania pour l'un des 101 nombres entiers de test en 30 minutes maximum sur un ordinateur portable moderne.
- Votre programme doit renvoyer la même solution pour tout entier à chaque exécution. Par exemple, lorsqu'un programme reçoit une entrée
5
et qu'il sortefrc
, il doit sortir cela à chaque fois que l'entrée5
est donnée. - Vous ne pouvez coder en dur aucune solution pour un entier positif.
- Afin de maximiser pleinement le potentiel de golf dans votre sortie, votre programme devrait être capable de gérer des entiers arbitrairement grands. Ce n'est pas une exigence, mais bonne chance si votre langue ne le supporte pas.
C'est le métagolf , donc le score le plus bas gagne!
ef
par exemple, le code est-il autorisé à "sauter" et à simplement sortir le résultat avant l'ef
opération?Réponses:
Python 3.5, Score de ??
Pour l'instant, je n'ai pas de sortie pour les 101 entrées, mais une fois que j'exécuterai le programme pour tous les cas de test, je mettrai à jour mon score.
De plus, je n'ai pas pu vérifier les sorties de certains des cas de test que j'ai essayés en raison de la taille du nombre, et à ce moment l'interprète en ligne de @ BradGilbertb2gills a expiré. Espérons que toutes les sorties fonctionnent.
la source