Ce défi de code vous fera calculer le nombre de façons d'atteindre partir de utilisant des cartes de la forme (avec un entier non négatif), et cela en un minimum d'étapes.
(Remarque, cela est lié à la séquence OEIS A307092 .)
Exemple
Ainsi, par exemple, car trois cartes sont requises, et il existe deux séquences distinctes de trois cartes qui enverront de à 13 :
Résultat: ou .
Exemples de valeurs
f(2) = 1 (via [])
f(3) = 1 (via [0])
f(4) = 1 (via [1])
f(5) = 1 (via [1,0])
f(12) = 2 (via [0,2] or [2,1])
f(13) = 2 (via [0,2,0] or [2,1,0], shown above)
f(19) = 1 (via [4,0])
f(20) = 2 (via [1,2] or [3,1])
f(226) = 3 (via [2,0,2,1,0,1], [3,2,0,0,0,1], or [2,3,0,0,0,0])
f(372) = 4 (via [3,0,1,0,1,1,0,1,1], [1,1,0,2,0,0,0,1,1], [0,2,0,2,0,0,0,0,1], or [2,1,0,2,0,0,0,0,1])
Défi
Le défi est de produire un programme qui prend un entier en entrée, et génère le nombre de chemins distincts de à via un nombre minimal de cartes de la forme .
Il s'agit de code-golf , donc le moins d'octets gagne.
code-golf
sequence
combinatorics
Peter Kagey
la source
la source
^
symbole indique l'exponentiation. Il peut également s'agir de XOR (par exemple, C utilise^
pour XOR au niveau du bit).x -> x + x^j
Réponses:
Gelée , 16 octets
Essayez-le en ligne!
Un programme complet prenant comme argumentn et renvoyant le nombre de façons d'atteindre n utilisant la longueur de chemin minimale. Inefficace pour les n plus grands .
la source
JavaScript (ES6),
111 ... 8480 octetsRenvoie vrai plutôt que1 pour n = 2 .
Essayez-le en ligne!
Commenté
la source
Haskell ,
7875 octetsCette implémentation utilise une recherche à couper le souffle dans «l'arborescence» de tous les mappages nécessaires
x -> x + x^j
.Essayez-le en ligne!
Explication
la source
05AB1E , 17 octets
Essayez-le en ligne!
la source
Python 2 , 72 octets
Essayez-le en ligne!
la source
Perl 5 (
-lp
), 79 octetsTIO
la source
CJam (27 octets)
Démo en ligne
Attention: cela devient très gourmand en mémoire très rapidement.
Dissection:
Les bonus
2
s (pour gérer le cas particulier de l'entrée2
, car leswhile
boucles sont plus chères que lesdo-while
boucles) signifient que la taille de la liste augmente très rapidement, et l'utilisation d'exposants jusqu'àn-1
signifie que les valeurs des plus grands nombres de la liste augmentent très vite.la source
Haskell , 65 octets
Essayez-le en ligne!
L'étendue de la recherche en premier sur les défauts du golf . J'ai aussi essayé de reculer
n
, mais c'était plus long:73 octets
Essayez-le en ligne!
la source
R ,
7877 octetsEssayez-le en ligne!
Utilisation d'une recherche simplifiée en largeur
Code déroulé avec explication:
Version plus courte avec une énorme allocation de mémoire (échec pour les cas plus gros):
R ,
7069 octetsEssayez-le en ligne!
-1 octet grâce à @RobinRyder
la source
!(a<-sum(x==n))
pourrait être!{a=sum(x==n)}
de -1 octet dans les deux cas.Pyth , 24 octets
Essayez-le en ligne!
Cela devrait produire la sortie correcte, mais est très lent (le scénario de test 372 expire sur TIO). Je pourrais le raccourcir en le remplaçant
.lQ2
parQ
, mais cela rendrait le temps d'exécution horrible.Remarque: ne produit aucune sortie pour les numéros inaccessibles( n ≤ 1 )
Explication
la source