La densidad de dígitos de números cuadrados (SNDD) de un número, inventada por mí mismo, es la relación entre el recuento de números cuadrados encontrados en dígitos consecutivos y la longitud del número. Por ejemplo, 169 es un número de 3 dígitos que contiene 4 números cuadrados (1, 9, 16, 169) y, por lo tanto, tiene una densidad de dígitos de 4/3 o 1,33. El número de 4 dígitos 1444 tiene 6 cuadrados (1, 4, 4, 4, 144, 1444) y, por lo tanto, una relación de 6/4 o 1.5. Observe en el ejemplo anterior que los cuadrados pueden repetirse. Además, 441 no está permitido, porque no se puede encontrar consecutivamente dentro del número 1444.
Su tarea es escribir un programa que busque un rango dado A - B (inclusive) para el número con la mayor densidad de dígitos del número cuadrado. Su programa debe cumplir con las siguientes especificaciones:
- Tome la entrada A, B en el rango de 1 a 1,000,000,000 (1 billón). Ejemplo:
sndd 50 1000
- Devuelve como resultado el número con el mayor SNDD. En caso de empate, devuelva el número más pequeño.
- 0 no cuenta como un cuadrado en ninguna forma, 0, 00, 000, etc. Tampoco los cuadrados que comienzan con 0, como 049 o 0049.
- Tenga en cuenta que el número completo no tiene que ser un número cuadrado.
Ejemplos:
sndd 14000 15000
Output: 14441
sndd 300 500
Output: 441
Bonificación: ¿Cuál es el número con el mayor SNDD entre 1 y 1,000,000,000? ¿Puede probar si este es el más grande posible o si podría haber uno más grande en un rango más alto?
Puntuaciones actuales:
- Rubí: 142
- Windows PowerShell: 153
- Scala: 222
- Python: 245
Ahora que se ha seleccionado una respuesta, aquí está mi implementación de referencia (sin golf) en JavaScript: http://jsfiddle.net/ywc25/2/