Die Square Number Digit Density (SNDD) einer von mir erfundenen Zahl ist das Verhältnis der Anzahl der in aufeinanderfolgenden Ziffern gefundenen Square Numbers zur Länge der Zahl. Beispielsweise ist 169 eine dreistellige Zahl mit 4 Quadratzahlen - 1, 9, 16, 169 - und hat somit eine Quadratzahlendichte von 4/3 oder 1,33. Die 4-stellige Zahl 1444 hat 6 Quadrate - 1, 4, 4, 4, 144, 1444 - und damit ein Verhältnis von 6/4 oder 1,5. Beachten Sie im vorherigen Beispiel, dass Quadrate wiederholt werden dürfen. Außerdem ist 441 nicht zulässig, da es nicht fortlaufend innerhalb der Nummer 1444 gefunden werden kann.
Ihre Aufgabe ist es, ein Programm zu schreiben, das einen bestimmten Bereich von A bis B (einschließlich) nach der Zahl mit der höchsten Dichte von Quadratziffern durchsucht. Ihr Programm sollte die folgenden Spezifikationen einhalten:
- Nehmen Sie Input A, B im Bereich von 1 bis 1.000.000.000 (1 Milliarde). Beispiel:
sndd 50 1000
- Geben Sie als Ergebnis die Nummer mit der größten SNDD zurück. Im Falle eines Unentschieden geben Sie die kleinste Zahl zurück.
- 0 zählt in keiner Form als Quadrat, 0, 00, 000 usw. Ebenso wenig wie Quadrate, die mit 0 beginnen, wie z. B. 049 oder 0049.
- Beachten Sie, dass die gesamte Zahl kein Quadrat sein muss.
Beispiele:
sndd 14000 15000
Output: 14441
sndd 300 500
Output: 441
Bonus: Was ist die Nummer mit dem größten SNDD zwischen 1 und 1.000.000.000? Können Sie nachweisen, ob dies der größtmögliche Wert ist oder ob es einen größeren Wert in einem höheren Bereich gibt?
Aktuelle Ergebnisse:
- Rubin: 142
- Windows PowerShell: 153
- Scala: 222
- Python: 245
Nachdem eine Antwort ausgewählt wurde, ist hier meine (ungolfed) Referenzimplementierung in JavaScript: http://jsfiddle.net/ywc25/2/