Liczba Kaprekara jest liczbą n-cyfrową k, która po dodaniu pierwszych n lub n-1 cyfr k ^ 2 do drugich n cyfr N ^ 2 daje wynik N.
Przykłady:
9^2 = 81. 8+1 = 9.
45^2 = 2025. 20+25 = 45.
297^2 = 88,209. 88+209 = 297
Sekwencja Kaprekara zaczyna się od 1.
Napisz program, który oblicza i generuje pierwsze n liczb Kaprekara, przy czym n znajduje się w zakresie od 1 do 100, ale nie ogranicza się do tego zakresu. Każda liczba Kaprekara musi być oddzielona spacjami i niczym więcej.
Więcej liczb Kaprekara można znaleźć tutaj, aby sprawdzić swój program, ale ten zasób NIE MOŻE być użyty w żaden sposób, aby pomóc w obliczeniach - innymi słowy, nie należy kodować na stałe, czytać z tego źródła ani używać go w żadnym innym exploicie sposób - wszystkie liczby muszą zostać wygenerowane przez Twój program.
Najkrótszy kod wygrywa.
n
maksymalnie 100.Odpowiedzi:
Perl - 63 bajty
Licząc shebang jako jeden bajt. Dane wejściowe są pobierane z
stdin
.Ma to akceptowalny czas działania dla n ≤ 50 , po czym robi się nieco wolniejszy.
Przykładowe użycie:
źródło
C,
109106n
maksymalnie 17 byłoby dobrze, aby usunąćlong long
,1
są głupie ...źródło
(i-i*i/x-i*i%x)||printf(...)
.x
ii
w zasięgu globalnym zamiast wfor
pętli, aby zapisać kilka znaków.Mathematica
144154Test
źródło
JavaScript 96
Wynik :
źródło
for(i=0,n=prompt(s='');n;i++){t=''+i*i;if(t.substr(0,l=t.length/2)==i-t.substr(l))n--,s+=i+' '}s
python - 98
Użyłem fajnego krojenia Pythona, aby zgolić kilka znaków.
źródło
C # - 255 znaków.
x jest liczbą liczb Kaprekara, które ma znaleźć kod. Zostało to przetestowane w zakresie od 1 do 100, ale powinno obsługiwać znacznie więcej. Powrót do 100 liczb zajął dwie i kwadrans, chociaż pierwsze 50 zajęło około 1 sekundy - potem stopniowo zwalniało.
Wynik:
Ułożono ten kod w następujący sposób;
Chciałbym wiedzieć, czy można to jeszcze bardziej skrócić.
źródło
C,
907675 bajtówźródło
Python 2.7, 144 (w tym nowe wiersze)
Dane wyjściowe dla c = 10:
Wyjście dla u = 20:
źródło
R, 99 znaków
Ponieważ
i
jest to połowa liczbyk^2
zaokrąglonych w górę, ocena mokra k jest liczbą Kaprekara wykonywaną tutaj przez dodanie ilorazu, a pozostałą część liczby całkowitejk^2
przez10^i
(iloraz to lewa połowa cyfr zaokrąglona w dół i pozostała część prawa zaokrąglona w górę).źródło
bash + sed, 75 znaków
Bash wykonuje arytmetykę tylko liczb całkowitych i reprezentuje liczby jako ciągi dziesiętne; atrybuty te są przydatne do gry w golfa. Przyjmuje się, że również niezadeklarowane / nieprzypisane zmienne mają wartość 0 podczas wykonywania arytmetyki.
Zirytowało mnie, żebym tam włożył
10#
, ale coś takiego jest konieczne, jeśli druga połowa podziału zaczyna się od0
. Podczas wykonywania arytmetyki bash traktuje takie liczby jak ósemkowe, chyba że podstawa jest wyraźnie określona.źródło
Python 3.3 - 117 znaków
Każdy poziom wcięcia i każda nowa linia z wyjątkiem ostatniego liczy się 1 znak. Myślę, że jest to sprawiedliwe dla kodu Python. Skrypt oczekuje, że użytkownik wprowadzi liczbę liczb Kaprekara do obliczenia.
źródło
J - 64
Trochę brzydkie, ale nadal. Sprawdza wszystkie liczby do miliona, a następnie bierze
n
je, więc działa tylko dla n <= 50.n
jest gdzie umieścić dane wejścioweźródło