Otrzymujesz nonaralną (podstawową 9) nieujemną liczbę całkowitą składającą się z cyfr od 0 do 8, jak zwykle. Jednak liczba cyfr w tej liczbie (bez zer wiodących) jest kwadratem prefektury.
Z tego powodu liczba może być ułożona w kwadratową siatkę (z zachowaną kolejnością odczytu).
Przykład z 1480 (1125 podstawa 10):
14
80
Teraz niech każda cyfra na takiej niejednorodnej siatce wskazuje ruch do innej przestrzeni siatki (z okresowymi warunkami brzegowymi ):
432
501
678
To tak mówi
0 = stay still
1 = move right
2 = move right and up
3 = move up
...
8 = move right and down
Tak więc, jeśli na siatce 1480 zaczynasz od 4, następnie przesuwasz się w górę (pamiętaj PBC) i w lewo do 8, co oznacza, że przesuwasz się w prawo i w dół do 4, rozpoczynając cykl z okresem 2.
Ogólnie proces ten jest kontynuowany, aż dojdziesz do zera lub cykl zostanie zauważony. (Za 0 uważa się cykl z okresem 1.)
W przypadku 1480 okres ostatecznie osiągnięty dla każdej z 4 cyfr początkowych wynosi 2 2 2 1
odpowiednio.
W przypadku większej siatki liczby te mogą być większe niż 8, ale nadal możemy ich używać jako „cyfr” w nowej liczbie nonary (po prostu współczynniki 9 ^ n, jakby były cyframi):
2*9^3 + 2*9^2 + 2*9 + 1 = 1639 (base 10) = 2221 (base 9)
Nazwiemy to siłą oryginalnego numeru nonary. Zatem siła 1480 wynosi 1639 (podstawa 10) lub równoważnie 2221 (podstawa 9).
Wyzwanie
Napisz najkrótszy program, który mówi, czy siła liczby nonary jest większa niż, mniejsza niż lub równa samej liczbie nonary. (Nie musisz obliczać siły).
Dane wejściowe będą nieujemną liczbą nonaralną, która zawiera kwadratową liczbę cyfr (i żadnych zer wiodących poza specjalnym przypadkiem samego 0). Powinien pochodzić z wiersza poleceń lub standardowego wejścia.
Dane wyjściowe powinny przejść do standardowego wyjścia jako:
G if the strength is larger than the original number (example: 1480 -> strength = 2221)
E if the strength is equal to the original number (example: 1 -> strength = 1)
L if the strength is less than the original number (example: 5 -> strength = 1)
Zabawne wyzwanie bonusowe:
Jaki jest najwyższy możliwy wkład, który jest równy jego sile? (Czy istnieje limit?)
Odpowiedzi:
Python 2,
213209202Edycja: Usunięto zwarcie, które czasami jest nieprawidłowe. Patrz poniżej.
(W dużej mierze) Ten sam algorytm co @KSab, ale bardzo mocno golfowy.
Golfy:
213: Zwarcie, wadliwe rozwiązanie.
209: Pierwsze działające rozwiązanie.
202: Połączono dwa wyszukiwania łańcuchów w jeden.
Edycja: Właśnie zdałem sobie sprawę, że ten program, a więc także KSab, miał wady, ponieważ ignorowały długości cykli wielocyfrowych. Przykładowa awaria:
Chociaż 3 ma długość cyklu 2, a zatem powyższy algorytm zwiera do „L”, to w rzeczywistości powinno zwrócić „G”, ponieważ długość cyklu 14 na drugiej cyfrze jest większa niż to. Dlatego zmieniłem program. Zabawnie też stało się krótsze. Aby przetestować swój program, użyj
3117275531177455
. Powinien powrócićG
.źródło
Python 296
Nie jest zbyt mało wydajny, sprawdza tylko tyle cyfr, ile potrzebuje.
Jeśli chodzi o liczby równe ich sile, myślę, że jedynym rozwiązaniem jest, dla każdego N x N kwadratu do N = 8 kwadrat zawierający N w każdym miejscu. Myślę, że ponieważ każda liczba w pętli musi być taka sama (długość pętli), każda pętla musiałaby być w jednym kierunku. To oczywiście oznacza, że rozmiar pętli musi wynosić N (a każdy element musi mieć N). Jestem prawie pewien, że tę logikę można zastosować do kwadratów i pętli o dowolnym rozmiarze, co oznacza, że nie ma kwadratów równych ich sile oprócz pierwszych 8.
źródło
3117275531177455
, ponieważ rozmiary pętli są większe niż 8. Zobacz mój post.cmp
.CJam - 81
Wypróbuj na http://cjam.aditsu.net/
Prawdopodobnie można go jeszcze zagrać w golfa.
źródło
Lua - Jeszcze nie grałem w golfa
Po prostu umieszczam się tutaj w celu przechowywania. Gra w golfa (i zaimplementuję „W przypadku większej siatki liczby te mogą być większe niż 8, ale nadal możemy ich używać jako„ cyfr ”) później. Działa jednak.
źródło