Grupy są szeroko stosowaną strukturą w matematyce i mają zastosowania w informatyce. To wyzwanie kodu dotyczy mniejszej liczby # znaków, aby utworzyć tabelę grupy dla grupy addytywnej Z n .
Jak zbudowana jest tabela: Dla Z n elementami są {0, 1, 2, ..., n-1}. Tabela będzie miała n wierszy i n kolumn. Dla ij-tego wpisu tabeli wartością jest i + j mod n. Na przykład w Z 3 1-2 pozycja (2. rząd, 3. kolumna, jeśli liczymy początkowy wiersz / kolumnę jako 1), to (1 + 2)% 3 = 0 (patrz przykładowe dane wyjściowe).
Dane wejściowe: dodatnia liczba całkowita, n
Dane wyjściowe: tabela będąca tekstową prezentacją Z n , zbudowana jak opisano powyżej i wyświetlona jak pokazano poniżej na przykładowych danych wyjściowych. Miejsca są opcjonalne
Przykładowe dane wejściowe: 3
Przykładowe dane wyjściowe:
0 1 2
1 2 0
2 0 1
Przykładowe dane wejściowe: 5
Przykładowe dane wyjściowe:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
Odpowiedzi:
APL (10)
(Zakładając
⎕IO=0
. Domyślnie działa na ngn / apl , inne APL zwykle potrzebują⎕IO←0
pierwszej.)Wyjaśnienie:
⍳⍵
: liczby [0..⍵)∘.+⍨
: utwórz tabelę sum⍵|
: liczby w tabelimod
⍵źródło
⊢|⍳∘.+⍳
, czy pociągi nie działały w wersji ngn z lipca 2014 r.?GolfScript (13 znaków)
Rozumiem z twojego komentarza do odpowiedzi Claudiu, że spacje między elementami wiersza nie są konieczne. W tym rozumieniu:
Demo online
Sekcja:
Jeśli konieczne jest użycie białych znaków, dla 20 znaków:
źródło
Python 2, 66 bajtów
Obraca listę, usuwając i ponownie dołączając.
Python 3, 53 bajty
Używa tej samej metody co @ mbomb007, ale nadużywanie
print
jako funkcji.źródło
*R,=
dziwna konstrukcja ... Czy służy tylko do konwersjirange
danych wyjściowych na krotkę?*R
range
to iterowalny obiekt, który można rozpakować i przepakować, zbierając wszystkoR
. Powinno to być równoważneR=list(range(n))
, przy czym ten pierwszy jest bardziej zwięzły.05AB1E ,
108 bajtówWypróbuj online!
Wyjaśnienie
Poprzednia odpowiedź: 10 bajtów
Wypróbuj online!
Moja pierwsza próba gry w golfa w 05AB1E.
Wyjaśnienie poprzedniej odpowiedzi
źródło
FݨN._ðý,
iݨsGDÀ})»
nie krępuj się zadawać jakichkolwiek pytań na czacie 05AB1E i zajrzyj na stronę z poradami 05AB1E, jeśli jeszcze tego nie zrobiłeś. :)Galaretka , 4
Wypróbuj online!
źródło
Pyth , 16 lat
Drukuje tabelę z odpowiednią białą spacją.
Wyjaśnienie:
źródło
J, 20
Odczytywanie ze standardowego wejścia i tworzenie tablicy 2D (która renderuje to samo co próbka w pytaniu).
Jeśli funkcja zrobieniu wystarczy sznurek,
(|+/~@i.)@".
. Jeśli wystarcza funkcja przyjmująca liczbę całkowitą,|+/~@i.
powinna wystarczyć.Objaśnienie:
f g
w J (dla funkcji f, g) oznacza „haczyk”, który jest funkcją złożoną, która uruchamia wejście przez g (funkcja jednoargumentowa), a następnie wejście i wynik g przez f (funkcja binarna). Odpowiedzią jest rozwidlenie z komponentami|
(modułem) i+/~@i.
. Ta ostatnia część to „zestawienie sum złożonych z listą indeksów-upto” (i.
jest trochę jakrange
w Pythonie).źródło
|+/~@i.
, co powinno być akceptowalne przez standardowe zasady tutaj.Oktawa, 23
źródło
Python 2, 67
Wypróbuj je tutaj
Używam podziału listy, aby „obrócić” listę
n
razy, drukując ją za każdym razem. (68 znaków)Dziwną sztuczką udało mi się uzyskać jedną postać krótszą od powyższej. (67 znaków)
źródło
def f(n):*R,=range(n);[print(*R[i:]+R[:i])for i in R]
. Nie sądziłem, że ikona będzie działać bez parens.Matlab (28)
źródło
Kod maszynowy x86-64 (Linux),
8064 bajtówMiałem nadzieję, że to rozwiązanie będzie tylko kilka bajtów krótsze, aby móc pokonać niektóre inne zgłoszenia w tym poście. Istnieje możliwość, że jeśli użyję 32- lub 16-bitowych wersji rejestrów, mógłbym zgolić kilka bajtów.Przekształcenie wielu rejestrów w 32-bitowe wersje adresujące pozwoliło zaoszczędzić 16 bajtów.Zasadniczo ta funkcja jest wywoływana z programu C / C ++, który przeszedł n przez rdi i wskaźnik do alokacji przez rsi. Wskaźnik, który ma rsi, jest w rzeczywistości 1 bajtem od końca alokacji, ponieważ tabela jest budowana wstecz. Ułatwia to konwersję liczby całkowitej na drukowalne znaki ASCII (wykonywane przez pobranie pewnej liczby x mod 10 i przekonwertowanie wyniku na ASII).
Aby zobaczyć kod opakowania C ++ i komentarze do zestawu, sprawdź moje repozytorium .
źródło
Pari / GP , 26 bajtów
Wypróbuj online!
źródło
matrix(m,n,X,Y,expr)
generujemXn
macierz wyrażeńexpr
, zmienna wierszowaX
przechodzi od1
do,m
a zmienna kolumnyY
przechodzi od1
don
.MathGolf ,
108 bajtówWypróbuj online!
-2 bajty dzięki Jo King
Wyjaśnienie
3
Jako wyjaśnienia użyję przykładowego wejściaMożesz także zrobić
r░y\(Åo╫
, co zmniejsza liczbę pętli o 1 i pomija odrzucanie po pętli.źródło
q
do usunięcia duplikacji?o
. Chociaż najlepsze, co mogłem wymyślić w ten sposób, to było to . Może to być również 10 bajtów, ale jestem na telefonie komórkowym.C - 96
źródło
Golfscript, 20 znaków
Strasznie leniwa praca.
Uruchom tutaj . (Pierwsza linia to symulacja stdin).
Objaśnienie :
Po zakończeniu programu stos zawiera każdą tablicę z nowymi liniami między nimi. Tłumacz wyrzuca to, co pozostało na stosie, dając pożądany rezultat.
źródło
CJam, 14 znaków
Sprawdź to tutaj.
Wyjaśnienie
Chodzi o to, aby powtórzyć ciąg od
0
doN-1
, ale podzielić go na blokiN+1
. To niedopasowanie za każdym razem przesuwa rząd w lewo. Na koniec musimy pozbyć się obcego charakteru i połączyć wszystko z nowymi liniami.Oto rozłożony kod wraz z zawartością stosu do wprowadzenia
3
.Wynik jest drukowany automatycznie na końcu programu. (Uwaga: zawartość stosu dla ostatniego kroku jest technicznie mieszaną tablicą zawierającą liczby i znaki nowej linii, a nie ciąg zawierający tylko znaki.)
Alternatywnie 11 znaków
Dzięki najnowszemu dodaniu
ew
(jest nowszy niż wyzwanie - zwraca wszystkie nakładające się podciągi o podanej długości), można zrobić 11 bajtów:Oto jak to działa:
źródło
l~_,\{_(+N\}*;
. Zastanawiam się jednak, czy możemy sobie z tym poradzić lepiej .ew
może działać, ale jest nowszy niż wyzwanie.MATL , 6 bajtów
Wypróbuj online!
źródło
Excel VBA, 77 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe jako liczbę całkowitą, n, z zakresu
[A1]
i danych wyjściowych do zakresuA2.Resize(n,n)
.źródło
Perl 6 , 23 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera liczbę i drukuje macierz w danym formacie ze spacjami. Jeśli zamiast tego możemy po prostu zwrócić coś, to
.put
można go usunąć.Wyjaśnienie:
źródło
Węgiel drzewny , 13 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Uwaga: końcowe miejsce. Wyjaśnienie:
źródło
APL (NARS), 15 znaków, 30 bajtów
test:
tutaj język nie potrzebuje komentarzy ...
źródło
Japt
-R
, 5 bajtówSpróbuj
Jeśli użycie przecinka jako separatora jest nieprawidłowe, dodaj bajt bez separatora:
Spróbuj
Lub 2 bajty, aby użyć spacji:
Spróbuj
źródło
R , 37 bajtów
Tworzy wektor od 0 do n-1 i kolejno dodaje 1, następnie 2 ... następnie n, i moduluje macierz o długość wektora, który wynosi n.
Wypróbuj online!
źródło
Dalej (gforth) , 53 bajty
Wypróbuj online!
Wyjaśnienie
Zagnieżdżona pętla, która wypuszcza nowy wiersz co n liczb
Objaśnienie kodu
źródło