Votre tâche consiste à écrire un programme qui, sur l'entrée n, génère l' expression minimale de chaque nombre de 1 à n dans l'ordre. Le programme le plus court en octets gagne.
Une expression minimale combine 1 avec addition et multiplication pour donner le nombre donné, en utilisant le moins de 1 possible. Par exemple, 23
est exprimé 23=((1+1+1)(1+1)+1)(1+1+1)+1+1
avec onze unités, ce qui est minime.
Exigences:
- Le programme doit prendre en entrée un nombre naturel positif n.
- La sortie doit être dans ce format:
20 = ((1+1+1)(1+1+1)+1)(1+1)
- Votre sortie peut ne pas avoir de parenthèses inutiles, comme
8 = ((1+1)(1+1))(1+1)
. - Le signe de multiplication
*
est facultatif. - Les espaces sont facultatifs.
- Vous n'avez pas à sortir toutes les équations possibles pour une valeur donnée: Par exemple, vous avez le choix de sortir
4=1+1+1+1
ou4=(1+1)(1+1)
. Vous n'avez pas besoin de sortir les deux. - Le programme le plus court (en octets) dans chaque langue gagne.
1 = 1 2 = 1 + 1 3 = 1 + 1 + 1 4 = 1 + 1 + 1 + 1 5 = 1 + 1 + 1 + 1 + 1 6 = (1 + 1 + 1) (1 + 1) 7 = (1 + 1 + 1) (1 + 1) +1 8 = (1 + 1 + 1 + 1) (1 + 1) 9 = (1 + 1 + 1) (1 + 1 + 1) 10 = (1 + 1 + 1) (1 + 1 + 1) +1 11 = (1 + 1 + 1) (1 + 1 + 1) + 1 + 1 12 = (1 + 1 + 1) (1 + 1) (1 + 1) 13 = (1 + 1 + 1) (1 + 1) (1 + 1) +1 14 = ((1 + 1 + 1) (1 + 1) +1) (1 + 1) 15 = (1 + 1 + 1 + 1 + 1) (1 + 1 + 1) 16 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) 17 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) +1 18 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) 19 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) +1 20 = ((1 + 1 + 1) (1 + 1 + 1) +1) (1 + 1)
Voici quelques cas de test supplémentaires: (rappelez-vous, que d'autres expressions avec le même nombre de 1 sont également autorisées)
157=((1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1
444=((1+1+1)(1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)
1223=((1+1+1)(1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)(1+1+1+1+1)+1+1+1
15535=((((1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)((1+1+1)(1+1)+1)+1)(1+1+1)+1)(1+1+1)(1+1+1)+1
45197=((((1+1+1)(1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1+1)+1+1
Bonne chance! - La tortue 🐢
code-golf
math
arithmetic
La tortue
la source
la source
n=20
) et 2) vous dites au début que la complexité entière, qui est distincte de l'équation, doit être sortie, mais vous ne l'incluez pas dans l'un des exemples, sauf le tout premier.Réponses:
Pyth, 60 octets
Manifestation
Le compilateur en ligne peut atteindre 1223 avant l'expiration, grâce à la mémorisation automatique des fonctions de Pyth.
Dans une note abrégée,
Celui-ci utilise une fonction récursive
'
, qui calcule tous les produits possibles et les sommes qui pourraient donner la sortie souhaitée, trouve la chaîne la plus courte à chaque opération finale, puis les compare en1
nombre et renvoie la première.Il utilise une fonction d'assistance
y
, qui met entre parenthèses une expression uniquement si elle doit être mise entre parenthèses.Hors ligne, j'exécute le programme avec l'entrée
15535
, et il est presque terminé. Les résultats sont imprimés progressivement, il est donc facile de voir la progression.Lignes finales de la sortie:
En notation abrégée,
la source
CJam,
1051029896 octetsEssayez-le en ligne dans l' interpréteur CJam .
Essai
L'interpréteur en ligne est trop lent pour les cas de test plus volumineux. Même avec l'interpréteur Java, les cas de test plus volumineux prendront beaucoup de temps et nécessiteront une quantité importante de mémoire.
Avec suffisamment de temps, il produirait ces solutions pour les prochains cas de test:
la source
Julia, 229 octets
C'est en fait assez rapide. L'affectation
f
et l'exécution de la fonction@time f(15535)
donnent la sortie (deux dernières lignes uniquement)et pour
@time f(45197)
, ça donneAlors, que fait le code? Simple -
C
contient le nombre actuelC
pour le nombre,K
est un tableau d'indicateurs permettant de savoir si l'expression est, fondamentalement, une somme ou un produit, aux fins du traitement entre crochets, etE
contient l'E
xpression elle-même. En remontant des=1
à enn
, le code recherche la représentation minimale du nombres
en termes de valeurs inférieures, en recherchant soit une somme, soit un produit. S'il s'agit d'un produit, il vérifie les deux composants et place des crochets autour d'eux s'ils sont des sommes. Cette vérification est effectuée en fonctionF
, pour économiser des octets (car elle doit être effectuée deux fois, pour les deux facteurs).la source