Gruppen sind eine in der Mathematik weit verbreitete Struktur und finden Anwendung in der Informatik. Bei dieser Code-Herausforderung geht es um die geringste Anzahl von Zeichen, um eine Gruppentabelle für die additive Gruppe Z n zu erstellen .
Aufbau der Tabelle: Für Z n sind die Elemente {0, 1, 2, ..., n-1}. Die Tabelle enthält n Zeilen und n Spalten. Für den ij-ten Eintrag der Tabelle ist der Wert i + j mod n. Zum Beispiel ist in Z 3 der 1-2. Eintrag (2. Zeile, 3. Spalte, wenn Sie die Startzeile / Spalte als 1 zählen) (1 + 2)% 3 = 0 (siehe Beispielausgabe).
Eingabe: eine positive ganze Zahl, n
Ausgabe: Eine Tabelle, die eine Textdarstellung von Z n ist , wie oben beschrieben aufgebaut und wie unten in den Beispielausgaben gezeigt angezeigt wird. Leerzeichen sind optional
Beispieleingabe: 3
Beispielausgabe:
0 1 2
1 2 0
2 0 1
Beispieleingabe: 5
Beispielausgabe:
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
Antworten:
APL (10)
(Vorausgesetzt,
⎕IO=0
es funktioniert standardmäßig mit ngn / apl , andere APLs benötigen in der Regel eine⎕IO←0
erste.)Erläuterung:
⍳⍵
: die Zahlen [0..⍵)∘.+⍨
: Erstellen Sie eine Summentabelle⍵|
: Zahlen in der Tabellemod
⍵quelle
⊢|⍳∘.+⍳
oder haben Züge in der Juli 2014-Version von ngn nicht funktioniert?GolfScript (13 Zeichen)
Ich verstehe aus Ihrem Kommentar zu Claudius Antwort, dass Leerzeichen zwischen den Elementen einer Zeile nicht erforderlich sind. Nach diesem Verständnis:
Online-Demo
Präparation:
Wenn Leerzeichen erforderlich sind, für 20 Zeichen:
quelle
Python 2, 66 Bytes
Dreht die Liste durch Poppen und erneutes Anhängen.
Python 3, 53 Bytes
Verwendet die gleiche Methode wie @ mbomb007, missbraucht jedoch
print
als Funktion.quelle
*R,=
ist ein seltsames Konstrukt ... Dient es nur dazu, dierange
Ausgabe in ein Tupel umzuwandeln ?*R
range
ist ein iterierbares Objekt, das man auspacken und neu packen kann, indem man alles sammeltR
. Es sollte gleichbedeutend sein mitR=list(range(n))
dem ersteren, das prägnanter ist.05AB1E ,
108 BytesProbieren Sie es online aus!
Erläuterung
Vorherige Antwort: 10 Bytes
Probieren Sie es online aus!
Mein erster Golfversuch in 05AB1E.
Erklärung der vorherigen Antwort
quelle
FݨN._ðý,
undݨsGDÀ})»
Sie können im 05AB1E-Chat Fragen stellen und die 05AB1E-Tipp-Seite lesen, falls Sie dies noch nicht getan haben. :)Gelee , 4
Probieren Sie es online aus!
quelle
Pyth , 16
Druckt die Tabelle mit dem richtigen Leerzeichen.
Erläuterung:
quelle
J, 20
Lesen von stdin und Erstellen eines 2D-Arrays (das das gleiche wie das Beispiel in der Frage darstellt).
Wenn eine Funktion mit einem String ausreicht ,
(|+/~@i.)@".
. Wenn eine Funktion mit einer Ganzzahl ausreicht,|+/~@i.
sollte dies ausreichen.Erläuterung:
f g
In J (für Funktionen f, g) wird ein "Hook" bezeichnet, bei dem es sich um eine zusammengesetzte Funktion handelt, die die Eingabe durch g (eine unäre Funktion) und dann die Eingabe und das Ergebnis von g bis f (eine Binärfunktion) ausführt. Die Antwort ist eine Gabel mit Komponenten|
(Modul) und+/~@i.
. Der letzte Teil ist "Tabelle der Summen, die mit einer Liste von Indizes bis zusammengesetzt sind" (i.
ist ein bisschen wierange
in Python).quelle
|+/~@i.
, was nach den Standardregeln hier akzeptabel sein sollte.Oktave, 23
quelle
Python 2, 67
Probieren Sie beide hier aus
Ich verwende die Listenaufteilung, um die Listenzeiten zu "drehen"
n
und jedes Mal zu drucken. (68 Zeichen)Ich habe es geschafft, es mit einem seltsamen Trick um einen Charakter kürzer als oben zu machen. (67 Zeichen)
quelle
def f(n):*R,=range(n);[print(*R[i:]+R[:i])for i in R]
. Ich hätte nicht gedacht, dass der Splat tatsächlich ohne Parens funktionieren würde.Matlab (28)
quelle
x86-64-Maschinencode (Linux),
8064 ByteIch hatte gehofft, dass diese Lösung nur ein paar Bytes kürzer ist, um einige der anderen Beiträge in diesem Beitrag schlagen zu können. Wenn ich einige der 32- oder 16-Bit-Versionen der Register verwende, besteht die Möglichkeit, dass ich einige Bytes einspare.Durch das Konvertieren vieler Register in die 32-Bit-Adressierungsversionen wurden 16 Byte eingespart.Grundsätzlich wird diese Funktion von einem C / C ++ - Programm aufgerufen, das n über rdi und einen Zeiger auf eine Zuordnung über rsi übergeben hat. Der Zeiger, den rsi hat, ist tatsächlich 1 Byte vom Ende der Zuordnung entfernt, da die Tabelle rückwärts erstellt wird. Dies erleichtert die Konvertierung einer Ganzzahl in druckbare ASCII-Zeichen (indem Sie eine Zahl x mod 10 nehmen und das Ergebnis in ASII konvertieren).
Schauen Sie sich mein Repo an , um den C ++ - Wrapper-Code und Kommentare zur Assembly zu sehen .
quelle
Pari / GP , 26 Bytes
Probieren Sie es online aus!
quelle
matrix(m,n,X,Y,expr)
generiert einemXn
Ausdrucksmatrixexpr
, wobei die ZeilenvariableX
von1
bism
und die SpaltenvariableY
von1
bis gehenn
.MathGolf ,
108 BytesProbieren Sie es online aus!
-2 Bytes dank Jo King
Erläuterung
Ich werde Beispieleingabe
3
für die Erklärung verwendenSie können dies auch tun
r░y\(Åo╫
, wodurch die Anzahl der Schleifen um 1 verringert wird und das Verwerfen nach der Schleife übersprungen wird.quelle
q
die Duplizierung entfernen?o
. Das Beste, was ich auf diese Weise herausfinden konnte, war dies . Es könnten auch 10 Bytes sein, aber ich bin auf dem Handy.C - 96
quelle
Golfscript, 20 Zeichen
Ein schrecklich fauler Job.
Führen Sie es hier aus . (Erste Zeile ist die Simulation von stdin).
Erklärung :
Wenn das Programm endet, enthält der Stapel jedes der Arrays mit Zeilenumbrüchen dazwischen. Der Interpreter gibt aus, was noch auf dem Stapel ist, und liefert das gewünschte Ergebnis.
quelle
CJam, 14 Zeichen
Testen Sie es hier.
Erläuterung
Die Idee ist, den String von
0
bis zu wiederholenN-1
, ihn aber in Blöcke von aufzuteilenN+1
. Diese Nichtübereinstimmung verschiebt die Zeile jedes Mal nach links. Zuletzt müssen wir den fremden Charakter loswerden und alles mit Zeilenumbrüchen verbinden.Hier ist der explodierte Code zusammen mit dem Stapelinhalt für die Eingabe
3
.Das Ergebnis wird am Ende des Programms automatisch gedruckt. (Beachten Sie, dass der Stapelinhalt für den letzten Schritt technisch gesehen ein gemischtes Array ist, das Zahlen und Zeilenumbrüche enthält, und keine Zeichenfolge, die nur Zeichen enthält.)
Alternativ 11 Zeichen
Mit der jüngsten Hinzufügung
ew
(dies ist neuer als die Herausforderung - es werden alle überlappenden Teilzeichenfolgen mit der angegebenen Länge zurückgegeben) könnten 11 Bytes ausgeführt werden:So funktioniert das:
quelle
l~_,\{_(+N\}*;
. Ich frage mich , ob wir mit besser können diese aber.ew
könnte funktionieren, aber es ist neuer als die Herausforderung.MATL , 6 Bytes
Probieren Sie es online aus!
quelle
Excel VBA, 77 Bytes
Anonyme VBE-Sofortfensterfunktion, die die Eingabe als Ganzzahl n vom Bereich
[A1]
und die Ausgaben in den Bereich übernimmtA2.Resize(n,n)
.quelle
Perl 6 , 23 Bytes
Probieren Sie es online aus!
Anonymer Codeblock, der eine Zahl verwendet und die Matrix im angegebenen Format mit Leerzeichen druckt. Wenn wir stattdessen nur etwas zurückgeben können,
.put
kann das entfernt werden.Erläuterung:
quelle
Holzkohle , 13 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Hinweis: Leerzeichen. Erläuterung:
quelle
APL (NARS), 15 Zeichen, 30 Bytes
Prüfung:
hier braucht die sprache keine kommentare ...
quelle
Japt
-R
, 5 BytesVersuch es
Wenn die Verwendung eines Kommas als Trennzeichen nicht gültig ist, fügen Sie ein Byte ohne Trennzeichen hinzu:
Versuch es
Oder 2 Bytes, um ein Leerzeichen zu verwenden:
Versuch es
quelle
R , 37 Bytes
Erstellt einen Vektor von 0 bis n-1 und addiert nacheinander 1, dann 2 ... dann n und moduliert die Matrix um die Länge des Vektors, der n ist.
Probieren Sie es online aus!
quelle
Forth (gforth) , 53 Bytes
Probieren Sie es online aus!
Erläuterung
Verschachtelte Schleife, die alle n Zahlen eine neue Zeile ausgibt
Code Erklärung
quelle