La densité numérique des nombres carrés (SNDD) d'un nombre - inventé par moi-même - est le rapport entre le nombre de nombres carrés trouvés en chiffres consécutifs et la longueur du nombre. Par exemple, 169 est un nombre à 3 chiffres contenant 4 nombres carrés - 1, 9, 16, 169 - et a donc une densité de chiffres de nombre carré de 4/3, ou 1,33. Le nombre à 4 chiffres 1444 a 6 carrés - 1, 4, 4, 4, 144, 1444 - et donc un rapport de 6/4, ou 1,5. Notez dans l'exemple précédent que les carrés peuvent être répétés. En outre, 441 n'est pas autorisé, car il ne peut pas être trouvé consécutivement à l'intérieur du numéro 1444.
Votre tâche consiste à écrire un programme qui recherche dans une plage donnée A - B (inclus) le nombre ayant la densité de chiffres du nombre carré le plus élevé. Votre programme doit respecter les spécifications suivantes:
- Prenez l'entrée A, B dans la plage de 1 à 1 000 000 000 (1 milliard). Exemple:
sndd 50 1000
- Renvoyez en conséquence le nombre avec le plus grand SNDD. En cas d'égalité, renvoyez le plus petit nombre.
- 0 ne compte pas comme un carré sous quelque forme que ce soit, 0, 00, 000, etc. Pas plus que les carrés commençant par 0, comme 049 ou 0049.
- Notez que le nombre entier ne doit pas nécessairement être un nombre carré.
Exemples:
sndd 14000 15000
Output: 14441
sndd 300 500
Output: 441
Bonus: Quel est le nombre avec le plus grand SNDD entre 1 et 1 000 000 000? Pouvez-vous prouver si c'est le plus grand possible, ou s'il pourrait y en avoir un plus grand dans une gamme plus élevée?
Scores actuels:
- Rubis: 142
- Windows PowerShell: 153
- Scala: 222
- Python: 245
Maintenant qu'une réponse a été sélectionnée, voici mon implémentation de référence (non golfée) en JavaScript: http://jsfiddle.net/ywc25/2/