Votre tâche consiste à construire un nombre naturel en utilisant le plus petit nombre possible et uniquement les opérateurs +
ou -
. Par exemple, le nombre sept peut être écrit 1+1+1+1+1+1+1=7
, mais il peut également s'écrire 11-1-1-1-1=7
. Le premier utilise 7
ceux, tandis que le dernier utilise uniquement 6
. Votre tâche est de renvoyer le nombre minimum de ceux qui peuvent être utilisés compte tenu de l'entrée d' un certain nombre naturel, n
.
Il s'agit du code golf, donc le code valide le plus court en octets l'emporte.
Cas de test
Entrée => Sortie
0 => 2 (since 1-1=0)
7 => 6
121 => 6
72 => 15
1000 => 7
2016 => 21
code-golf
number-theory
ordinateur de code
la source
la source
VALID OUTPUTS
. C'est votre choix, mais généralement les gens aiment le gras ou l' italique au lieu des LETTRES MAJUSCULES (ils donnent l'impression de crier au lieu de mettre l'accent). Les caractères gras sont les caractères**bold text**
italiques*italics text*
. Vous pouvez également utiliser### Text
pour du texte en gras. Quoi qu'il en soit, bienvenue chez PPCG!Réponses:
JavaScript (ES6),
12712687 octetsDevrait fonctionner à environ 10
1415 à quel point vous commencez à courir dans les limites entières de JavaScript. Explication:Cela utilise la
n*9
magie deux fois; premièrement, cela me donne la longueur de la prochaine répétition, deuxièmement, si les deux premiers chiffres den*9
sont55
ou plus, alors nous devons soustrairen
de cette prochaine répétition, sinon nous devons soustraire la répétition précédente (qui est calculée en soustrayant 1 et en divisant par 10). Cela devrait fonctionner jusqu'à 10 15 .la source
Pyth,
1916 octetsSuite de tests
Algorithme de force brute. Les chaînes nécessaires sont générées en prenant toutes les listes dont les éléments sont
['+', '-', '']
de longueur égale au nombre de 1 testés, en ajoutant un 1 à chacun et en concaténant à une seule chaîne. Ces chaînes sont ensuite évaluées et comparées à l'entrée. Cette opération est répétée jusqu'à ce qu'une chaîne réussie soit trouvée.Certaines chaînes avec un interligne
+
ou-
sont testées, mais ce n'est pas un problème. Ce serait le cas si l'entrée était négative.Il peut atteindre une longueur de 9 avant de devenir trop lent.
Explication:
la source
JavaScript (ES6), 92 octets
Explication
Fonction récursive. Cela génère toutes les permutations possibles de
1
s séparées par soit+
,-
soit rien. Il le fait en incrémentant un nombre en base 3, en le transformant en un tableau de chiffres, en convertissant chaque chiffre0
en-
,1
en+
et2
en une chaîne vide, puis en les joignant avec1
s. La chaîne résultante esteval
d comme une instruction JavaScript qui renvoie le résultat de l'équation.Parce que les opérateurs sont joints avec
1
s entre (comme+1+1+1+
), il y alength - 1
1
s. Le premier opérateur est ignoré (parce que+1
=1
,<nothing>1
=1
et c'est un nombre donc il n'y aura jamais de début0
pour-
) et l'opérateur final est également ignoré (en ajoutant.0
à l'équation).Version à sortie plus élevée, 96 octets
L'autre version ne peut pas renvoyer des sorties supérieures à ~ 10 en raison de la limite de pile d'appels de récursivité. Cette version utilise une boucle for au lieu d'une récursivité, elle peut donc renvoyer des sorties jusqu'à ~ 33. Le temps requis augmente de façon exponentielle, donc je ne recommande pas de le tester.
la source