Ce défi est inspiré par cette question désormais supprimée.
Prenez un entier positif N en entrée et sortez une matrice avec les nombres 1 .. N 2 qui suit le modèle ci-dessous:
Remplissez la première ligne avec 1 .. N puis remplissez la dernière ligne (numéro de ligne N ) avec (N + 1) .. 2N , puis remplissez la deuxième ligne avec (2N + 1) .. 3N et continuez jusqu'à ce que vous ayez rempli toutes les lignes.
Le format de sortie est flexible, donc la liste des listes etc. est acceptée.
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
Des règles standard s'appliquent. La réponse la plus courte en octets dans chaque langue l'emporte. Les explications sont encouragées comme toujours.
code-golf
number
array-manipulation
matrix
Stewie Griffin
la source
la source
1 2 3 7 8 9 4 5 6
:) Le format de sortie est-il si flexible?Réponses:
05AB1E ,
138 octetsEnregistré 5 octets grâce à Rod
Essayez-le en ligne!
Explication
la source
Rubis , 53 octets
Explication:
Mettez d'abord tous les nombres dans un seul tableau, puis coupez le tableau en sautant une ligne pour chaque itération. Après les premières (n / 2 + n% 2) itérations, il ne reste plus rien à sauter, puis récupérez toutes les lignes restantes.
Essayez-le en ligne!
la source
Python 2 , 75 octets
Essayez-le en ligne!
la source
JavaScript, 68 octets
Modifier 3 octets enregistrés, aiguisé par @ user71546
Essayez d'abord, ensuivant l'itinéraire évident: comptez à partir de 1 et remplissez le tableau des deux côtés, de l'extérieur vers l'intérieurTester
la source
Haskell , 62 octets
Essayez-le en ligne! La sortie est une liste de listes, par exemple les
(0#) 3
rendements[[1,2,3],[7,8,9],[4,5,6]]
.la source
> <> ,
51 + 3 = 5447 octetsEssayez-le en ligne!
Une entrée est attendue en haut de la pile au démarrage du programme en utilisant l'
-v
indicateur. La sortie se compose de nombres non alignés séparés par des espaces simples, et chaque ligne est séparée par une seule nouvelle ligne. Exemple de sortie pourN=5
:... suivi d'une seule nouvelle ligne. Le programme se termine avec une erreur (
something smells fishy...
), mais c'est sur STDERR plutôt que sur STDOUT.Explication:
La première ligne stocke simplement une copie de
N
dans le registre.La deuxième ligne crée le décalage pour chaque ligne de sortie en soustrayant 1 de
N
, en multipliant cela parN
, en le tournant vers le bas de la pile, puis en inversant la pile entière. Lorsque le nombre en haut de la pile atteint 0, la pile devrait ressembler à ceci (l'exemple utiliseN=5
):La troisième ligne supprime le doublon
0
du haut de la pile.La quatrième ligne incrémente le haut de la pile et sort une copie de celle-ci. Ceci est ensuite pris mod
N
, et il est utilisé pour décider si un espace ou un retour à la ligne doit être imprimé, et si le haut de la pile doit être jeté - si le dernier numéro imprimé estx
,x mod N == 0
indique alors que la fin de cette ligne de sortie a été atteinte . L'exécution se termine lorsqu'elle1+
est exécutée sur une pile vide, ce qui déclenche l'erreur de terminaison.La version précédente
Cela a explicitement vérifié la présence d'une pile vide pour terminer l'exécution, et j'incluais également 3 octets pour l'
-v
utilisation de l' indicateur.Essayez-le en ligne!
la source
Perl 5 ,
-p
5251 octetsEssayez-le en ligne!
la source
Java (OpenJDK 9) , 101 octets
Essayez-le en ligne!
Crédits
la source
j++
: 102 octetsn-i/2-1
àn+~i/2
101 octetsn->{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 octetsEh bien, il a été dépassé avant que je puisse le poster, mais le voici quand même.Edit: 1 octet enregistré grâce à @KevinCruijssen.la source
n+n-i-1
peut êtren+n+~i
pour -1 octet, alors vous êtes à nouveau en face à face avec l'autre réponse JavaScript. :)Gelée , 10 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Stax , 10 octets
Exécutez-le et déboguez-le en ligne
La représentation ascii correspondante du même programme est de 12 caractères.
Voici comment ça fonctionne.
la source
Gelée ,
13...6 octetsMerci JonathanAllan pour -1 octet!
Essayez-le en ligne!
Utilisez un algorithme identique à la réponse 05AB1E.
la source
R
car ils
a une plage implicite de gauche.R ,
705947 octetsEssayez-le en ligne!
Merci à Robin Ryder pour un golf de 4 octets, que j'ai ensuite approfondi.
Renvoie une matrice; construit le
matrix
en séquence, par exemple[[1 2 3] [4 5 6] [7 8 9]]
,, puis réorganise les lignes.la source
rbind
.Python 2 ,
726863 octets-4 octets grâce à Neil
Essayez-le en ligne!
la source
x
variable intermédiaire ?Octave , 102 octets
Essayez-le en ligne!
la source
until
command.And je na pas \ 't saisvec2mat
:( Malheureusement , la même longueur:A=B=vec2mat(1:(n=input(''))*n,n)
:(while j++<n
est également exactement de la même longueur ... Avez-vous essayé les différentes options ou ne s'agit-il que de coïncidences?while
boucle est de la même longueur, je l'ai essayée dans les deux sens. Souvent, cependant,do ... until
est un octet plus court quewhile ... end
.C (gcc) , 110 octets
Essayez-le en ligne!
Remplit un tableau en alternant entre 2 indices pour les lignes: un index commençant en haut et un commençant en bas. L'index de la ligne supérieure commence à 0 et est incrémenté toutes les 2 lignes; l'index de la ligne du bas commence à n-1 et est décrémenté toutes les 2 lignes.
Non golfé:
la source
C ++ + Range V3 , 159 octets
En direct sur Wandbox
Sans compter les 2 nouvelles lignes après
using namespace range::view
; ils sont juste là pour séparer les importations de la lambda.Fait légèrement intéressant: cette solution ne fait aucune allocation de tas. Il résout le problème dans
O(1)
espace.Explication:
iota(1, n*n+1)
->[1 ... n*n]
chunk(n)
: chaquen
éléments ensemble, donc[1 ... n] [n+1 ... 2*n] ...
r
r | stride(2)
: prenez tous les autres éléments:[1 ... n] [2*n+1...] ...
r | reverse | drop(n % 2)
: inverser, puis supprimer le[1 ... n]
terme sin
est impair (il y aura un nombre impair de lignes et nous ne voulons imprimer le premier terme qu'une seule fois). Il semble que je devrais être capable de fairer | reverse | take
, mais cela ne fonctionne pas pour une raison quelconque.stride(2)
encore une fois, prenez tous les autres éléments. Cette fois, c'est à l'envers.Plus lisible et testable:
la source
int n
, j'ai besoin delog(n)
bits pour stocker l'entrée? Mais c'est l'entrée de toute façon, et nous avons affaire à unint
oùsizeof(int) == 4
(la plupart des systèmes), c'est donc un nombre constant d'octets utilisés quelle que soit l'entrée.Gelée , 11 octets
Essayez-le en ligne!
la source
CJam , 22 octets
Essayez-le en ligne!
la source
C (gcc)
8078Je vois maintenant que cette solution est fausse
Essayez-le en ligne!
la source
C (gcc) , 36 + 8 + 61 = 105 octets
compiler avec
-Dp=printf("%d ",i),i++%n;);puts("")
-Dq=i,n)
Essayez-le en ligne!
la source