Wprowadzenie
Środkowy kwadrat metoda służy do generowania liczb pseudolosowych o. Nie jest to jednak dobra metoda w praktyce, ponieważ okres ten jest zwykle bardzo krótki i ma poważne słabości. Jak to działa? Weźmy przykład:
Jako nasiona wybieramy 123456
:
Seed 123456
Kwadrat nasion (ziarno × ziarno) jest równy:
Seed² 15241383936
Zaczęliśmy od 6-cyfrowego numeru. Oznacza to, że ziarno do kwadratu powinno dostarczyć 12-cyfrową liczbę. Jeśli tak nie jest, dodawane są zera wiodące w celu skompensowania:
Seed² 015241383936
Następnie bierzemy środkową część liczby o tym samym rozmiarze co ziarno:
Seed² 015241383936
^^^^^^
Jest to nasz nowy materiał siewny : 241383
. Powtarzamy ten sam proces, jak pokazano powyżej. Otrzymujemy następujące:
0: 123456
015241383936
| |
1: 241383
058265752689
| |
2: 265752
070624125504
| |
3: 624125
389532015625
| |
4: 532015
283039960225
| |
5: 039960
001596801600
| |
6: 596801
I to trwa przez jakiś czas ... Teraz wiemy, co to jest metoda średniego kwadratu, przejdźmy do wyzwania:
Zadanie
Każde ziarno ma się okres . Okres nasion n- cyfrowych nie może być dłuższy niż 8 n . Na przykład ziarno 82
. To dałoby następującą sekwencję:
82 > 72 > 18 > 32 > 02 > 00 > 00 > 00 > 00 > 00
|____|____|____|____|____|____|____|____|____|___...
0 1 2 3 4 5 6 7 8 9
Widać, że okres jest równy 5 , zanim ponownie zawiera tę samą cyfrę. Twoim zadaniem jest, jeśli otrzyma ziarno większe niż 0, nie zawierające zer wiodących, wypisz okres nasion . W takim przypadku musisz wygenerować dane wyjściowe 5
.
Innym przykładem jest 24
:, który daje:
24 > 57 > 24
|____|____|___...
0 1 2
Jak widać, nie wszystkie sekwencje kończą się na 0
. Ten cykl ma okres 1 .
Przypadki testowe
Input > Output
24 > 1
82 > 5
123456 > 146
8989 > 68
789987 > 226
Pastebiny z sekwencjami dla 123456 , 8989 , 789987
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Możesz założyć, że dane wejściowe nigdy nie będą miały nieparzystej liczby cyfr.
24
jest okresowy (z okresem 2, powiedziałbym),82
jest w końcu okresowy (z okresem 1).Odpowiedzi:
Galaretka,
262418 bajtówWypróbuj online!
Jak to działa
źródło
Pure Bash,
162 131 116 113107Zapisano 3 bajty, używając
$c
...Dzięki @Dennis za pomoc w oszczędzeniu 6 dodatkowych bajtów.
---- begin middleSquare ----
---- end middleSquare ----
Formowany kwadrat, 131
---- begin middleSquare ----
---- end middleSquare ----
Stare, ale z fantazyjną produkcją, 162
---- begin middleSquare ----
---- end middleSquare ----
źródło
JavaScript (ES7), 82 bajty
Akceptuje dane wejściowe w postaci ciągu, np. „82”, i zwraca liczbę całkowitą. Prosta technika rekurencyjna ogona, aby sprawdzić kolejno każde ziarno z hasłem nasion, które już widzieliśmy. Dodam 100 ** l do kwadratu, aby zapewnić stałą długość.
źródło
Python
32,13911497 bajtówDzięki Seeq za grę w golfa z 25 bajtów i dzięki Dennisowi za grę w golfa z 17 bajtów! Kod:
Zdecydowanie można dalej grać w golfa. Był to również kod użyty do wykonania przypadków testowych: P.
źródło
Pyth, 21 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
edycja: Znaleziono przypadek krawędzi
1000
, który nie działał z moim poprzednim kodem. Naprawiono to dla 1 bajtu.Wyjaśnienie:
źródło
sz
zamiastQ
?Q
, muszę wymienić wszystkichlz
zl`Q
s.input
. Wydaje mi się, że to naprawdę ma na celu powtórzenie standardowego odczytu…?.z
i.Q
, chociaż czytają wiele wierszy danych wejściowych i przechowują je na listach. Ale tak naprawdę nie widziałem, żeby ktoś korzystał z tej funkcji. Jest to tylko 1 bajt, aby ocenić ciąg lub skreślić liczbę.Qz.Q.z
?MATL , 33
3540bajtówWypróbuj online!
źródło
Oracle SQL 11.2, 184 bajty
Nie grał w golfa
Wykorzystuje wbudowane wykrywanie cyklu, aby zatrzymać rekurencyjność.
źródło
Julia, 64 bajty
Wypróbuj z Coding Ground .
źródło
Mathematica, 80 bajtów
źródło
CJam, 37 bajtów
Natknąłem się na irytujący problem z kolejnością stosów, którego nie mogę od razu zobaczyć, jak rozwiązać. Jest także niesamowicie wolny.
Jak to działa: każda iteracja wypycha nową wartość na stos, następnie zawijamy stos do tablicy i sprawdzamy, czy jest on taki sam jak jego połączenie ze sobą (aby sprawdzić, czy ma zduplikowane elementy). Gdy ma zduplikowane elementy, zatrzymaj się i sprawdź, ile elementów jest na stosie.
źródło
Python 2, 82 bajty
Wypróbuj na Ideone .
źródło
Python, 124 bajty
źródło
VBSCRIPT, 131 bajtów
Najlepsze, co mogłem zrobić z vbscript, plakat po raz pierwszy, więc spokojnie!
źródło