To wyzwanie jest inspirowane tym , teraz usuniętym pytaniem.
Jako wartość wejściową weź dodatnią liczbę całkowitą N i wyślij macierz o liczbach 1 .. N 2 zgodnie z poniższym wzorem:
Wypełnij pierwszy wiersz 1 .. N, a następnie wypełnij ostatni rząd (numer wiersza N ) (N + 1) .. 2N , a następnie wypełnij drugi rząd (2N + 1) .. 3N i kontynuuj, aż wypełnisz wszystkie rzędy.
Format wyjściowy jest elastyczny, dlatego listy list itp. Są akceptowane.
N = 1
1
N = 2
1 2
3 4
N = 3
1 2 3
7 8 9
4 5 6
N = 4
1 2 3 4
9 10 11 12
13 14 15 16
5 6 7 8
N = 5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10
Obowiązują standardowe zasady. Najkrótsza odpowiedź w bajtach w każdym języku wygrywa. Wyjaśnienia są zachęcane jak zawsze.
code-golf
number
array-manipulation
matrix
Stewie Griffin
źródło
źródło
1 2 3 7 8 9 4 5 6
Czy format wyjściowy jest elastyczny?Odpowiedzi:
05AB1E ,
138 bajtówZaoszczędź 5 bajtów dzięki Rod
Wypróbuj online!
Wyjaśnienie
źródło
Rubin , 53 bajty
Wyjaśnienie:
Najpierw umieść wszystkie liczby w jednej tablicy, a następnie pokrój tablicę pomijając wiersz dla każdej iteracji. Po pierwszych iteracjach (n / 2 + n% 2) nie ma już nic, co można pominąć, a następnie pobrać wszystkie pozostałe wiersze do tyłu.
Wypróbuj online!
źródło
Python 2 , 75 bajtów
Wypróbuj online!
źródło
JavaScript, 68 bajtów
Edytuj 3 zapisane bajty, zaostrzone przez @ user71546
Najpierw spróbujzgodnie z oczywistą trasą: policz od 1 i wypełnij tablicę z obu stron, od zewnętrznego do wewnętrznegoTest
źródło
Haskell , 62 bajty
Wypróbuj online! Dane wyjściowe to lista list, np .
(0#) 3
Plony[[1,2,3],[7,8,9],[4,5,6]]
.źródło
> <> ,
51 + 3 = 5447 bajtówWypróbuj online!
Dane wejściowe są oczekiwane na szczycie stosu na początku programu przy użyciu
-v
flagi. Dane wyjściowe składają się z nieprzystosowanych liczb oddzielonych pojedynczymi spacjami, a każda linia jest oddzielona pojedynczym nowym znakiem. Przykładowe dane wyjściowe dlaN=5
:... a następnie jedna nowa linia. Program kończy się z błędem (
something smells fishy...
), ale jest to na STDERR, a nie na STDOUT.Wyjaśnienie:
Pierwszy wiersz po prostu przechowuje kopię
N
w rejestrze.Druga linia tworzy przesunięcie dla każdego wiersza wyjściowego, odejmując 1 od
N
, mnożąc toN
, obracając go do dolnej części stosu, a następnie odwracając cały stos. Gdy liczba na górze stosu osiągnie 0, stos powinien wyglądać następująco (używa przykładuN=5
):Trzecia linia odrzuca duplikat
0
z góry stosu.Czwarty wiersz zwiększa górę stosu i wyświetla jego kopię. Jest to następnie pobierane mod
N
i służy do decydowania, czy spacja lub nowa linia powinna zostać wydrukowana, a jeśli góra stosu powinna zostać odrzucona - jeśli jest wydrukowana ostatnia liczbax
,x mod N == 0
oznacza to , że osiągnięto koniec tego wiersza wyjściowego . Wykonanie kończy się, gdy1+
zostanie wykonane na pustym stosie, powodując błąd zakończenia.Poprzednia wersja
To jawnie sprawdzało, czy nie ma pustego stosu do zakończenia wykonywania, a ja dołączyłem również 3 bajty na
-v
użycie flagi.Wypróbuj online!
źródło
Perl 5 ,
-p
5251 bajtówWypróbuj online!
źródło
Java (OpenJDK 9) , 101 bajtów
Wypróbuj online!
Kredyty
źródło
j++
: 102 bajtówn-i/2-1
nan+~i/2
101 bajtówn->{int i=n*n,x[]=new int[i],r;for(;i-->0;x[(r%2<1?r/2:n+~r/2)*n+i%n]=i+1)r=i/n;return x;}
JavaScript (ES6),
6968 bajtówCóż, został rozegrany zanim mogłem go opublikować, ale i tak jest.Edycja: Zapisano 1 bajt dzięki @KevinCruijssen.źródło
n+n-i-1
może mieć wartośćn+n+~i
-1 bajtów, więc ponownie stajesz do walki z drugą odpowiedzią JavaScript. :)Galareta , 10 bajtów
Wypróbuj online!
Jak to działa
źródło
Stax , 10 bajtów
Uruchom i debuguj online
Odpowiednia reprezentacja ascii tego samego programu ma 12 znaków.
Oto jak to działa.
źródło
Galaretka ,
13...6 bajtówDzięki JonathanAllan za -1 bajt!
Wypróbuj online!
Użyj identycznego algorytmu do odpowiedzi 05AB1E.
źródło
R
ponieważs
ma domyślny zakres lewej.R ,
705947 bajtówWypróbuj online!
Dzięki Robin Ryder za 4-bajtowe golfa, które następnie grałem dalej.
Zwraca macierz; konstruuje
matrix
sekwencję, np.[[1 2 3] [4 5 6] [7 8 9]]
następnie przestawia rzędy.źródło
rbind
.Python 2 ,
726863 bajtów-4 bajty dzięki Neilowi
Wypróbuj online!
źródło
x
zmienną pośrednią ?Oktawa , 102 bajty
Wypróbuj online!
źródło
until
polecenie. I nie wiedziałem ovec2mat
:( Niestety tej samej długości:A=B=vec2mat(1:(n=input(''))*n,n)
:(while j++<n
ma również dokładnie tę samą długość ... Próbowałeś już różnych opcji, czy to tylko zbiegi okoliczności?while
pętla ma tę samą długość, próbowałem w obie strony. Częstodo ... until
jest jednak o jeden bajt krótszy niżwhile ... end
.C (gcc) , 110 bajtów
Wypróbuj online!
Wypełnia tablicę, zmieniając naprzemiennie 2 indeksy dla wierszy: jeden indeks zaczynający się od góry i drugi zaczynający się od dołu. Indeks górnego wiersza zaczyna się od 0 i jest zwiększany co 2 wiersze; indeks dolnego rzędu zaczyna się od n-1 i jest zmniejszany co 2 rzędy.
Nie golfowany:
źródło
C ++ + Zakres V3 , 159 bajtów
Na żywo w Wandbox
Nie licząc 2 nowych linii po
using namespace range::view
; są tylko po to, aby oddzielić import od lambda.Mało interesujący fakt: to rozwiązanie nie przydziela sterty. Rozwiązuje problem w
O(1)
kosmosie.Wyjaśnienie:
iota(1, n*n+1)
->[1 ... n*n]
chunk(n)
: każdyn
element razem, więc[1 ... n] [n+1 ... 2*n] ...
r
r | stride(2)
: weź co drugi element:[1 ... n] [2*n+1...] ...
r | reverse | drop(n % 2)
: odwróć, a następnie usuń[1 ... n]
termin jeślin
jest nieparzysty (liczba wierszy będzie nieparzysta, a pierwszy termin chcemy wydrukować tylko raz). Wygląda na to, że powinienem to zrobićr | reverse | take
, ale z jakiegoś powodu to nie działa.stride(2)
ponownie weź co drugi element. Tym razem jest odwrotnie.Bardziej czytelne i testowalne:
źródło
int n
potrzebujęlog(n)
bitów do przechowywania danych wejściowych? Ale to wejście tak, i mamy do czynienia ze związkiemint
gdziesizeof(int) == 4
(w większości systemów), więc jest to liczba bajtów używanych stała niezależnie od wejścia.Galaretka , 11 bajtów
Wypróbuj online!
źródło
CJam , 22 bajty
Wypróbuj online!
źródło
C (gcc)
8078Rozumiem teraz, że to rozwiązanie jest złe
Wypróbuj online!
źródło
C (gcc) , 36 + 8 + 61 = 105 bajtów
Połącz z
-Dp=printf("%d ",i),i++%n;);puts("")
-Dq=i,n)
Wypróbuj online!
źródło