Premissa
Uma noite, eu estava apenas pensando em números. Descobri algo único sobre números como 7, 10, 12, 13 e mais. Eles são quadrados de quadrados! O que significa que, ao quadrado, são compostos pelos próprios quadrados. O OEIS os chama de quadrados, que são uma concatenação decimal de dois ou mais quadrados.
Exemplos de tais números incluem 7 (49 tem 2 2 e 3 2 ) 13 (169 tem 4 2 e 3 2 ) e 20 (400 tem 2 2 e 0 2 ). Outros exemplos incluem 37, pois 1369 é um termo que pode ser particionado como 1, 36 e 9. 1444 (38 2 ) é um termo que pode ser particionado como 1, 4, 4, 4. Perguntei sobre isso em Matemática .SE, e recebeu o nome de mim!
Desafio
Crie um programa que imprima os números do TanMath. Dado o número n (começando em 1), imprima o enésimo número do TanMath, T (n).
Como um exemplo de código:
>> 1
>> 7
ou
>> 4
>> 13
Referência à implementação do Python (obrigado @ MartinBüttner e @ Sp3000!):
from math import sqrt
n = input()
def r(digits, depth):
z = len(digits)
if z < 1:
return (depth > 1)
else:
for i in range(1, z+1):
t = int(digits[:i])
if sqrt(t).is_integer() and r(digits[i:], depth+1):
return True
return False
i=0
t=0
while t < n:
i += 1
if r(str(i**2), 0):
t += 1
print i
Aqui está uma lista dos 100 primeiros números:
7 10 12 13 19 20 21 30 35 37 38 40 41 44 50 57 60 65 70 80 90 95 97 100 102 105 107 108 110 112 119 120 121 125 129 130 138 140 150 160 170 180 190 191 200 201 204 205 209 210 212 220 223 230 240 250 253 260 270 280 285 290 300 305 306 310 315 320 325 330 340 342 343 345 348 350 350 369 370 375 379 380 390 397 400 402 405 408 410 413 420 430 440 441 450 460 470 475 480 487
Este é um código de golfe, então o código mais curto vence!
Boa sorte!
Respostas:
Pitão,
232120 bytesGraças a @isaacg por jogar fora 1 byte!
Experimente online.
Como funciona
fonte
t
é desnecessário, porque^R2Z
não conterá^Z2
. É o mesmo que o intervalo do Python, não inclui o topo.Julia,
189145 bytesIsso cria uma função sem nome que aceita um número inteiro e retorna um número inteiro. Para chamá-lo, dê um nome, por exemplo
f=n->...
.Ungolfed:
Agradecemos a Dennis por alguma ajuda e idéias e a Glen O por salvar 44 bytes!
fonte
JavaScript ES6, 126
127A implementação de referência, convertida em Javascript com algum truque de golfe.
Usando eval para evitar retorno explícito.
Teste a execução do snippet abaixo em um navegador compatível com EcmaScript 6, com operador de propagação, parâmetros padrão e funções de seta (eu uso o Firefox)
fonte
JavaScript (ES6), 143 bytes
Uso
Explicação
fonte
Lua, 148 bytes
Lua 5.3 é necessária
fonte
Python 3,
283243 bytesEsta é uma implementação de força bruta. Sugestões de golfe são bem-vindas.
Ungolfed:
fonte