Liczby powinny być drukowane z zerami wiodącymi w polu o długości = (liczba cyfr N ^ 2).
Wejście (N):
4
Wynik:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Interesuje mnie algorytm i czystość implementacji. Tak więc biała przestrzeń się nie liczy, a górna granica dla N wynosi 42.
atomic-code-golf
Hristo Hristov
źródło
źródło
L = floor(log10(N^2)) + 1
prawidłowa?N
?Odpowiedzi:
Pyton
Inne testy
źródło
W Ruby:
Test:
Inne rozwiązanie z wykorzystaniem obliczeń stąd :
Test:
źródło
W Python3:
Przykładowe dane wyjściowe dla 7:
edycja: Rozwiązanie rekurencyjne - 263 bajtów
źródło
Rozwiązanie Java
przykładowe wyjście dla wejścia 10
źródło
Perl, 178 znaków
Używa Math :: Complex i utrzymuje bieżący kierunek w zmiennej zespolonej (1 / i / -1 / .i). Biegnij z:
Umieścić
N
w$l
.źródło
do
źródło
Python 2.7:
źródło
PHP, 272 znaków, w tym komentarz
Oparta na Func, rekurencyjna wersja - dla mnie bardziej interesująca, ponieważ lepiej wyraża intencję. Działa również dla różnych szerokości i wysokości.
Wynik:
źródło
C #, 380-golfowy golf
Nie zawracałem sobie głowy wklejaniem w wersji golfowej, ponieważ byłem całkiem pewien, że nie pobije to żadnych rekordów. Ale chciałem spróbować, żeby pomyśleć o tym trochę inaczej. Zamiast wypisywać każdą linię lub pozycję, gdy do niej podchodzę, przesuwam kursor do pozycji, wypisuję początkową liczbę środkową i ruszam się spiralnie (co ilustruje interesujący wzór zmiany pozycji w zależności od zmiany kierunku ).
Zmarnowana została spora ilość znaków, aby bufor konsoli mógł zaakceptować większe wartości, a także obliczyć pozycję lewego górnego rogu (który z pewnością można poprawić).
W każdym razie było to interesujące ćwiczenie.
źródło
Rubin
Nie jest to szczególnie dobre rozwiązanie do gry w golfa, ale może mieć znaczenie algorytmiczne.
Zawsze fascynował mnie podobny problem , mianowicie znalezienie spiralnej ścieżki zgodnej z ruchem wskazówek zegara przez macierz NxM. Jednym z naprawdę intuicyjnych sposobów rozwiązania tego problemu jest obracanie matrycy przeciwnie do ruchu wskazówek zegara i obieranie jej jak pomarańczy. Używam podobnej - choć nie tak eleganckiej - metody, aby zrobić odwrotnie:
źródło
Rakieta
Chciałem tylko wypróbować to rozwiązanie przy użyciu pamięci prawie 0. Bez tablicy, bez niczego. Wartość można wygenerować dla dowolnej pozycji w dowolnym momencie. Możemy zapytać o spiralę dowolnego rozmiaru (jeśli to, co odbiera strumień wyjściowy, może to obsłużyć). W nadziei, że ktoś kiedykolwiek potrzebuje gigantycznych spiral.
Oto kod
Testowanie z tym
Wyniki w produkcji
Dość intensywny procesor w porównaniu do wstępnie obliczonych macierzy, jeśli potrzebujesz całej spirali, ale może być przydatny. Kto wie! Na przykład:
Nie grałem w golfa ... Jest dość mały pomimo wyglądu. Użyłem długich nazwisk i komentarzy.
źródło
Python 2 , 800 bajtów
Wypróbuj online!
Kilka lat temu mojemu przyjacielowi zadano to pytanie w wywiadzie. Opowiedzieli mi o tym podczas naszej rodzinnej kolacji w Święto Dziękczynienia, dlatego myślę o tym jako o „problemie Dziękczynienia”.
źródło
PHP,
172171 + 1 bajtów, 24 operacjetworzy tablicę prowadzącą indeksy przez spiralę; następnie drukuje wynik.
Uruchom jako potok z
-nR
lub spróbuj online .Dodaj jedno zadanie, aby zapisać pięć bajtów: zamień ostatnią pętlę na
źródło
Przykładowy kod: Działa dla 4x5, ale nie działa 3x5
while (k <m && l <n) {/ * Wydrukuj pierwszy wiersz z pozostałych wierszy * / for (i = l; i <n; ++ i) {printf ("% d", a [k] [ ja]); } k ++;
źródło