A densidade de dígitos numéricos quadrados (SNDD) de um número - inventado por mim mesmo - é a razão entre a contagem de números quadrados encontrados em dígitos consecutivos e o comprimento do número. Por exemplo, 169 é um número de 3 dígitos contendo 4 números quadrados - 1, 9, 16, 169 - e, portanto, possui uma densidade de dígitos numéricos quadrados de 4/3 ou 1,33. O número de 4 dígitos 1444 possui 6 quadrados - 1, 4, 4, 4, 144, 1444 - e, portanto, uma proporção de 6/4 ou 1,5. Observe no exemplo anterior que os quadrados podem ser repetidos. Além disso, 441 não é permitido, porque não pode ser encontrado consecutivamente dentro do número 1444.
Sua tarefa é escrever um programa que procure um determinado intervalo A - B (inclusive) pelo número com a maior densidade de dígitos do número quadrado. Seu programa deve obedecer às seguintes especificações:
- Considere a entrada A, B no intervalo de 1 a 1.000.000.000 (1 bilhão). Exemplo:
sndd 50 1000
- Retorne como resultado o número com o maior SNDD. Em caso de empate, retorne o menor número.
- 0 não conta como um quadrado de qualquer forma, 0, 00, 000, etc. Nem os quadrados que começam com 0, como 049 ou 0049.
- Observe que o número inteiro não precisa ser um número quadrado.
Exemplos:
sndd 14000 15000
Output: 14441
sndd 300 500
Output: 441
Bônus: Qual é o número com o maior SNDD entre 1 e 1.000.000.000? Você pode provar se essa é a maior possível ou se pode haver uma maior em uma faixa maior?
Pontuações atuais:
- Ruby: 142
- Windows PowerShell: 153
- Scala: 222
- Python: 245
Agora que uma resposta foi selecionada, eis a minha implementação de referência (não destruída) em JavaScript: http://jsfiddle.net/ywc25/2/