Les groupes sont une structure largement utilisée en mathématiques et ont des applications en informatique. Ce défi de code concerne le moins de caractères pour créer une table de groupe pour le groupe additif Z n .
Comment le tableau est construit: Pour Z n , les éléments sont {0, 1, 2, ..., n-1}. Le tableau aura n lignes et n colonnes. Pour l'entrée ij-e du tableau, la valeur est i + j mod n. Par exemple, dans Z 3 , l'entrée 1-2nd (2e ligne, 3e colonne si vous comptez la ligne / colonne de départ comme 1) est (1 + 2)% 3 = 0 (voir exemple de sortie).
Entrée: un entier positif, n
Sortie: un tableau qui est une présentation textuelle de Z n , construit comme décrit ci-dessus et affiché comme indiqué ci-dessous dans les exemples de sorties. Les espaces sont facultatifs
Exemple d'entrée: 3
Exemple de sortie:
0 1 2
1 2 0
2 0 1
Exemple d'entrée: 5
Exemple de sortie:
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
Réponses:
APL (10)
(En supposant que
⎕IO=0
cela fonctionne sur ngn / apl par défaut, les autres APL ont généralement besoin d'une⎕IO←0
première.)Explication:
⍳⍵
: les nombres [0..⍵)∘.+⍨
: créer une table de somme⍵|
: nombres dans le tableaumod
⍵la source
⊢|⍳∘.+⍳
ou les trains ne fonctionnaient-ils pas dans la version de juillet 2014 de ngn?GolfScript (13 caractères)
Je comprends de votre commentaire sur la réponse de Claudiu que les espaces entre les éléments d'une rangée ne sont pas nécessaires. Sur cette compréhension:
Démo en ligne
Dissection:
Si un espace est nécessaire, pour 20 caractères:
la source
Python 2, 66 octets
Fait pivoter la liste en éclatant et en rajoutant.
Python 3, 53 octets
Utilise la même méthode que @ mbomb007, mais en abusant en
print
tant que fonction.la source
*R,=
une construction étrange ... Ne sert-elle qu'à convertirrange
la sortie de en un tuple?*R
range
est un objet itérable que l'on peut déballer et reconditionner, en rassemblant toutR
. Il devrait être équivalent àR=list(range(n))
, le premier étant plus concis.05AB1E ,
108 octetsEssayez-le en ligne!
Explication
Réponse précédente: 10 octets
Essayez-le en ligne!
Mon premier essai de golf au 05AB1E.
Explication de la réponse précédente
la source
FݨN._ðý,
etݨsGDÀ})»
n'hésitez pas à poser des questions dans le chat 05AB1E , et jetez un œil à la page de conseils 05AB1E si vous ne l'avez pas encore fait. :)Gelée , 4
Essayez-le en ligne!
la source
Pyth , 16
Imprime la table avec un espace approprié.
Explication:
la source
J, 20
Lecture à partir de stdin et production d'un tableau 2D (qui est identique à l'échantillon de la question).
Si une fonction qui prend une chaîne de suffit,
(|+/~@i.)@".
. Si une fonction prenant un entier suffit,|+/~@i.
devrait être suffisante.Explication:
f g
dans J (pour les fonctions f, g) désigne un "crochet", qui est une fonction composite qui exécute l'entrée via g (une fonction unaire) puis l'entrée et le résultat de g via f (une fonction binaire). La réponse est une fourche avec des composants|
(module) et+/~@i.
. La dernière partie est "une table de sommes composée avec une liste d'indices jusqu'à" (i.
c'est un peu commerange
en Python).la source
|+/~@i.
, qui devrait être acceptable selon les règles standard ici.Octave, 23
la source
Python 2, 67
Essayez-les tous les deux ici
J'utilise le fractionnement de liste pour "faire tourner" les
n
temps de liste , en l'imprimant à chaque fois. (68 caractères)J'ai réussi à obtenir un caractère plus court que le précédent avec un truc bizarre. (67 caractères)
la source
def f(n):*R,=range(n);[print(*R[i:]+R[:i])for i in R]
. Je ne pensais pas que le splat fonctionnerait réellement sans parens.Matlab (28)
la source
Code machine x86-64 (Linux),
8064 octetsJ'espérais que cette solution ne serait que de quelques octets plus courte pour pouvoir battre certaines des autres soumissions sur ce post. Il y a une possibilité si j'utilise certaines des versions 32 ou 16 bits des registres, je pourrais raser quelques octets.La conversion de nombreux registres en versions d'adressage 32 bits a permis d'économiser 16 octets.Fondamentalement, cette fonction est appelée à partir d'un programme C / C ++ qui a passé n via rdi et un pointeur vers une allocation via rsi. Le pointeur de rsi est en fait de 1 octet à partir de la fin de l'allocation, car la table est construite à l'envers. Cela facilite la conversion d'un entier en caractères ASCII imprimables (en prenant un certain nombre x mod 10 et en convertissant le résultat en ASII).
Pour voir le code d'encapsuleur C ++ et les commentaires sur l'assembly, consultez mon référentiel .
la source
Pari / GP , 26 octets
Essayez-le en ligne!
la source
matrix(m,n,X,Y,expr)
génère unemXn
matrice d'expressionexpr
, la variable de ligneX
allant de1
àm
et la variable de colonneY
allant de1
àn
.MathGolf ,
108 octetsEssayez-le en ligne!
-2 octets grâce à Jo King
Explication
Je vais utiliser un exemple d'entrée
3
pour l'explicationVous pouvez également le faire
r░y\(Åo╫
, ce qui diminue le nombre de boucles de 1 et ignore la suppression après la boucle.la source
q
pour supprimer la duplication?o
. Bien que le mieux que j'ai pu comprendre de cette façon était ceci . Cela pourrait aussi être 10 octets, mais je suis sur mobile.C - 96
la source
Golfscript, 20 caractères
Un travail terriblement paresseux.
Exécutez-le ici . (La première ligne consiste à simuler stdin).
Explication :
À la fin du programme, la pile contient chacun des tableaux avec des sauts de ligne entre eux. L'interpréteur sort ce qui reste sur la pile, donnant le résultat souhaité.
la source
CJam, 14 caractères
Testez-le ici.
Explication
L'idée est de répéter la chaîne de
0
àN-1
, mais de la diviser en blocs deN+1
. Cette incompatibilité déplace la ligne vers la gauche à chaque fois. Enfin, nous devons nous débarrasser du caractère étranger et tout joindre à des nouvelles lignes.Voici le code éclaté, ainsi que le contenu de la pile pour l'entrée
3
.Le résultat est imprimé automatiquement à la fin du programme. (Remarque: le contenu de la pile pour l'étape finale est techniquement un tableau mixte contenant des nombres et des caractères de nouvelle ligne, pas une chaîne contenant uniquement des caractères.)
Alternativement, 11 caractères
Avec l'ajout récent
ew
(c'est plus récent que le défi - il renvoie toutes les sous-chaînes qui se chevauchent de longueur donnée), on pourrait faire 11 octets:Voici comment celui-ci fonctionne:
la source
l~_,\{_(+N\}*;
. Je me demande si nous pouvons faire mieux avec cela .ew
pourrait fonctionner, mais il est plus récent que le défi.MATL , 6 octets
Essayez-le en ligne!
la source
Excel VBA, 77 octets
Fonction de fenêtre immédiate VBE anonyme qui prend les entrées, sous forme d'entier, n, de la plage
[A1]
et les sorties vers la plageA2.Resize(n,n)
.la source
Perl 6 , 23 octets
Essayez-le en ligne!
Bloc de code anonyme qui prend un nombre et imprime la matrice dans le format donné avec des espaces. Si nous pouvons simplement renvoyer quelque chose à la place, alors le
.put
peut être supprimé.Explication:
la source
Fusain , 13 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Remarque: Espace de fin. Explication:
la source
APL (NARS), 15 caractères, 30 octets
tester:
ici la langue n'a pas besoin de commentaires ...
la source
Japt
-R
, 5 octetsEssayez-le
Si l'utilisation d'une virgule comme séparateur n'est pas valide, ajoutez un octet pour aucun séparateur:
Essayez-le
Ou 2 octets pour utiliser un espace:
Essayez-le
la source
R , 37 octets
Crée un vecteur de 0 à n-1, et ajoute séquentiellement 1, puis 2 ... puis n, et module la matrice par la longueur du vecteur, qui est n.
Essayez-le en ligne!
la source
Forth (gforth) , 53 octets
Essayez-le en ligne!
Explication
Boucle imbriquée qui génère une nouvelle ligne tous les n nombres
Explication du code
la source