Étant donné un entier non négatif ou une liste de chiffres, déterminez de combien de façons le nombre peut être formé en concaténant des nombres carrés, qui peuvent avoir des zéros en tête.
Exemples
input -> output # explanation
164 -> 2 # [16, 4], [1, 64]
101 -> 2 # [1, 01], [1, 0, 1]
100 -> 3 # [100], [1, 00], [1, 0, 0]
1 -> 1 # [1]
0 -> 1 # [0]
164900 -> 9 # [1, 64, 9, 0, 0], [1, 64, 9, 00], [1, 64, 900], [16, 4, 900], [16, 4, 9, 0, 0], [16, 4, 9, 00], [16, 49, 0, 0], [16, 49, 00], [16, 4900]
Règles
- Les échappatoires standard s'appliquent
- Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte
code-golf
math
number
combinatorics
set-partitions
HyperNeutrino
la source
la source
Réponses:
Haskell , 135 octets
Essayez-le en ligne!
Probablement pas encore bien joué mais c'est un problème étonnamment difficile
la source
Gelée , 8 octets
Un lien monadique prenant une liste de chiffres et renvoyant un entier non négatif.
Essayez-le en ligne! ou consultez la suite de tests .
Comment?
la source
Haskell , 88 octets
Définit une fonction
f
qui prend une chaîne et renvoie un flottant. Très lent. Essayez-le en ligne!Explication
J'utilise mon astuce Haskell pour calculer toutes les partitions d'une chaîne avec
mapM
etwords
. L'extrait de codemapM(\c->[[c],c:" "])x
remplace chaque caractère'c'
d'une chaînex
par la chaîne à un élément"c"
ou la chaîne à deux éléments"c "
et renvoie la liste de toutes les combinaisons possibles. Si je prends l'un des résultats, ley
concatène et appellewords
le résultat, il sera divisé aux espaces insérés parmapM
. De cette façon, j'obtiens toutes les partitions dex
en sous-chaînes contiguës. Ensuite, je compte simplement les résultats où chaque élément de partition est un carré parfait (en le trouvant dans la liste[0,1,4,9,..,x^2]
). Une mise en garde est que chaque partition est comptée deux fois, avec et sans espace de fin, donc je prends la somme de0.5
s au lieu de1
s; c'est pourquoi le type de résultat est un flottant.la source
Pyth , 16 octets
Suite de tests .
la source
Python 3 ,
148139135 135134 octets10 octets grâce à Arnold Palmer.
Essayez-le en ligne!
la source
%1
etfor
...[[a[0]]]
par[a[:1]]
permettra d'économiser un octetMathematica, 141 octets
entrée (une liste de chiffres)
la source
{1,64,9}
,{16,4,9}
et{16,49}
) mais votre fonction retourne 4.Table[(function of s[[i]]),{i,Length[s=(stuff)]}]
plusieurs fois; vous pouvez généralement jouer au golf jusqu'à(function of #)&/@(stuff)
.Python 2 ,
173163 octetsEssayez-le en ligne!
Edit: 10 octets enregistrés grâce à ArnoldPalmer
la source
.5
au lieu de0.5
?