Gęstość cyfr liczby kwadratowej (SNDD) pewnej liczby - wynalezionej przeze mnie - jest stosunkiem liczby liczb kwadratowych znalezionych w kolejnych cyfrach do długości liczby. Na przykład 169 jest trzycyfrową liczbą zawierającą 4 liczby kwadratowe - 1, 9, 16, 169 - a zatem ma gęstość cyfr liczby kwadratowej 4/3 lub 1,33. 4-cyfrowy numer 1444 ma 6 kwadratów - 1, 4, 4, 4, 144, 1444 - a zatem stosunek 6/4 lub 1,5. Zwróć uwagę w poprzednim przykładzie, że kwadraty mogą się powtarzać. Również 441 nie jest dozwolone, ponieważ nie można go znaleźć kolejno pod numerem 1444.
Twoim zadaniem jest napisanie programu, który będzie wyszukiwał w danym zakresie od A do B (włącznie) liczbę o największej gęstości cyfr kwadratowych. Twój program powinien być zgodny z następującymi specyfikacjami:
- Weź dane wejściowe A, B w zakresie od 1 do 1 000 000 000 (1 miliard). Przykład:
sndd 50 1000
- W rezultacie zwróć liczbę o największym SNDD. W przypadku remisu zwróć najmniejszą liczbę.
- 0 nie jest liczone jako kwadrat w żadnej formie, 0, 00, 000 itd. Nie należy również kwadratów rozpoczynających się od 0, takich jak 049 lub 0049.
- Zauważ, że cały numer nie musi być liczbą kwadratową.
Przykłady:
sndd 14000 15000
Output: 14441
sndd 300 500
Output: 441
Premia: jaka jest liczba przy największym SNDD od 1 do 1 000 000 000? Czy możesz udowodnić, czy jest to największy możliwy, czy może być większy w wyższym zakresie?
Aktualne wyniki:
- Rubin: 142
- Windows PowerShell: 153
- Scala: 222
- Python: 245
Teraz, gdy wybrano odpowiedź, oto moja (nie golfowa) referencyjna implementacja w JavaScript: http://jsfiddle.net/ywc25/2/