Prémisse
Une nuit, je réfléchissais simplement aux chiffres. J'ai découvert quelque chose d'unique au sujet des nombres comme 7, 10, 12, 13 et plus. Ce sont des carrés de carrés! Cela signifie que lorsqu'ils sont au carré, ils sont eux-mêmes composés de carrés. L'OEIS les appelle des carrés qui sont une concaténation décimale de deux carrés ou plus.
Des exemples de tels nombres incluent 7 (49 a 2 2 et 3 2 ) 13 (169 a 4 2 et 3 2 ) et 20 (400 a 2 2 et 0 2 ). D'autres exemples incluent 37, car 1369 est un terme car il peut être partitionné en 1, 36 et 9. 1444 (38 2 ) est un terme car il peut être partitionné en 1, 4, 4, 4. J'ai demandé à ce sujet sur Math .SE, et il a été nommé d'après moi!
Défi
Concevez un programme qui imprime les nombres TanMath. Étant donné le nombre n (à partir de 1), imprimez le nième nombre TanMath, T (n).
Comme exemple de code:
>> 1
>> 7
ou
>> 4
>> 13
Référence à l'implémentation de Python (merci @ MartinBüttner et @ 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
Voici une liste des 100 premiers numéros:
7 10 12 13 19 20 21 30 35 37 38 40 41 44 50 57 60 65 70 80 90 95 97100 102 105 107 108 110 112 119 120 121 125 129 130 138 140 150 160 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 360 369 370 375 379 380 390 397 400 402 405 408 410 413 420 430 440 441 450 460 470 475 480 487
C'est un golf de code, donc le code le plus court gagne!
Bonne chance!
Réponses:
Pyth,
232120 octetsMerci à @isaacg d'avoir joué au golf sur 1 octet!
Essayez-le en ligne.
Comment ça marche
la source
t
n'est pas nécessaire, car^R2Z
ne contiendra pas^Z2
. C'est la même chose que la gamme Python, elle n'inclut pas l'extrémité supérieure.Julia,
189145octetsCela crée une fonction sans nom qui accepte un entier et renvoie un entier. Pour l'appeler, donnez-lui un nom, par exemple
f=n->...
.Non golfé:
Merci à Dennis pour son aide et ses idées et merci à Glen O pour avoir économisé 44 octets!
la source
JavaScript ES6, 126
127L'implémentation de référence, convertie en Javascript avec quelques astuces de golf.
Utiliser eval pour éviter un retour explicite.
Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript 6, avec l'opérateur d'étalement, les paramètres par défaut et les fonctions fléchées (j'utilise Firefox)
la source
JavaScript (ES6), 143 octets
Usage
Explication
la source
Lua, 148 octets
Lua 5.3 est requis
la source
Python 3,
283243 octetsIl s'agit d'une implémentation par force brute. Suggestions de golf bienvenues.
Non golfé:
la source