Dado um número inteiro não negativo ou uma lista de dígitos, determine de quantas maneiras o número pode ser formado concatenando números quadrados, que podem ter zeros à esquerda.
Exemplos
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]
Regras
- As brechas padrão se aplicam
- Isso é código-golfe, então a resposta mais curta em bytes vence
code-golf
math
number
combinatorics
set-partitions
HyperNeutrino
fonte
fonte
Respostas:
Haskell , 135 bytes
Experimente online!
Provavelmente ainda não está bem jogado, mas esse é um problema surpreendentemente difícil
fonte
Gelatina , 8 bytes
Um link monádico que obtém uma lista de dígitos e retorna um número inteiro não negativo.
Experimente online! ou veja a suíte de testes .
Quão?
fonte
Haskell , 88 bytes
Define uma função
f
que pega uma string e retorna um float. Muito devagar. Experimente online!Explicação
Estou usando minha dica Haskell para calcular todas as partições de uma string com
mapM
ewords
. O trechomapM(\c->[[c],c:" "])x
substitui todos os caracteres'c'
de uma cadeia de caracteres pela cadeia dex
um elemento"c"
ou pela cadeia de dois elementos"c "
e retorna a lista de todas as combinações possíveis. Se eu pegar um dos resultadosy
, concatene-o e chame s em vez de s; é por isso que o tipo de resultado é flutuante.words
o resultado, ele será dividido nos espaços inseridos pormapM
. Dessa maneira, eu obtenho todas as partições dex
em substrings contíguos. Depois, apenas conto os resultados em que cada elemento da partição é um quadrado perfeito (encontrando-o na lista[0,1,4,9,..,x^2]
). Uma ressalva é que cada partição é contada duas vezes, com e sem espaço à direita, então eu tomo a soma de0.5
1
fonte
Pitão , 16 bytes
Conjunto de teste .
fonte
Python 3 ,
148139135134 bytes10 bytes graças a Arnold Palmer.
Experimente online!
fonte
%1
efor
...[[a[0]]]
com[a[:1]]
vai salvar um byteMathematica, 141 bytes
entrada (uma lista de dígitos)
fonte
{1,64,9}
,{16,4,9}
e{16,49}
), mas seus função retorna 4.Table[(function of s[[i]]),{i,Length[s=(stuff)]}]
algumas vezes; normalmente você pode jogar isso até(function of #)&/@(stuff)
.Python 2 ,
173163 bytesExperimente online!
Editar: salvou 10 bytes devido ao ArnoldPalmer
fonte
.5
vez de0.5
?