Une matrice pyramidale est une matrice carrée où tous les nombres augmentent ou diminuent à partir du point central, comme les deux matrices ci-dessous:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
Ou:
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 3 3 3 3
Etant donné un nombre entier non nul n
, créer une matrice pyramidale où le nombre va de 1
à , n
soit dans l' ordre croissant (si n <0), ou un ordre décroissant (si n> 0) à partir du centre. Si n
c'est pair, alors il y aura 4 nombres centraux (voir les exemples).
Comme toujours:
- Format d'entrée et de sortie en option
- Le nombre d'espaces, délimiteur, etc. est facultatif
Cas de test:
1
1
-1
1
5
1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1
-5
5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 2 1 2 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 3 3 3 3 4 5
5 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5
2
1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1
-2
2 2 2 2
2 1 1 2
2 1 1 2
2 2 2 2
-4
4 4 4 4 4 4 4 4
4 3 3 3 3 3 3 4
4 3 2 2 2 2 3 4
4 3 2 1 1 2 3 4
4 3 2 1 1 2 3 4
4 3 2 2 2 2 3 4
4 3 3 3 3 3 3 4
4 4 4 4 4 4 4 4
-10 < n < 10
?Réponses:
Gelée ,
1817 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
EXCEL: 126 octets
=MAX(MIN(MIN(CELL("row",RC)-1,CELL("col",RC)-1),MIN(((ABS(R1C1)-1)*2+3)-CELL("row",RC),((ABS(R1C1)-1)*2+3)-CELL("col",RC))),0)
Essayez-le en ligne *
Remarque: cette réponse utilise la notation R1C1. Si vous allez l'essayer vous-même. vous devez l'activer dans les options Excel.
la formule donnée doit être dans chaque cellule présente au-delà (2,2). Mettez votre taille de pyramide souhaitée dans (1,1).
capture d'écran rapide de la formule en action:
Voici une image supplémentaire de plaisir avec un formatage conditionnel!
* La mise à jour prend actuellement beaucoup de temps.
la source
=MAX(MIN(MIN(ROW()-1,COLUMN()-1),MIN(((ABS(A1)-1)*2+3)-ROW(),((ABS(A1)-1)*2+3)-COLUMN())),0)
qui est de 92 octets. Cependant, il ne gère toujours pas les cas et la formule ne peut pas être glissée car la référence de cellule n'est pas verrouillée.=MEDIAN(MIN(ROW()-1,COLUMN()-1),ABS(A1)*2+1-MAX(ROW(),COLUMN()),0)
Range
ou de beaucoup plus de 126 octets.Python 2,
1099998Créer une liste
et jouer avec un peu.
edit: nouvelle façon de créer une liste + thx Lynn pour deux octets
la source
If n is even, then there will be 4 center numbers
MATL ,
2624 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test (code légèrement modifié pour servir de suite de tests).
Explication
Le code construit d'abord le tableau de sortie en supposant une entrée positive
n
. Le tableau est initialisé comme1
pour une entrée impaire ou comme un tableau vide pour une entrée paire (il est créé comme une matrice d'identité avec une taille égale à la parité de l'entrée). Ensuite, les temps suivants sont répétésn
pour les entrées paires et lesn-1
temps pour les entrées impaires: étendez le tableau avec un cadre contenant0
et ajoutez1
à tous les éléments.Par exemple, les étapes de saisie
n
sont les suivantes:Tableau initial:
Étendre avec le cadre:
Ajouter
1
:Étendre avec le cadre:
Ajouter
1
:Cela donne la sortie correcte pour une entrée positive. Si l'entrée est négative, le tableau doit être modifié en ajoutant l'entrée moins
1
et en prenant la valeur absolue:Vous pouvez regarder le tableau grandir (code modifié pour afficher les étapes intermédiaires) sur MATL Online! L'interprète est toujours en version bêta. Si cela ne fonctionne pas, appuyez à nouveau sur "Exécuter" ou rechargez la page.
Code commenté
la source
.2
secondesPython 2.7:
123122120 octetsles probs peuvent encore économiser quelques octets ...
edit1:
N=abs(n)
pour économiser 1 octetedit2:
(i+1)*(n>0)or-n-i
pour économiser 2 octetsla source
Haskell,
119113110104102101 octetsRenvoie la matrice sous la forme d'une liste de listes d'entiers, par exemple:
f 2
->[[1,1,1,1],[1,2,2,1],[1,2,2,1],[1,1,1,1]]
.Comment ça marche:
la source
Perl, 175 octets
Comprend 1 octet pour
-p
.(Il y a un retour à la ligne que je ne sais pas comment montrer avec la démarque, mais vous en avez besoin).
Besoins
-p
ainsi que-M5.010
ou-E
à exécuter:Merde, c'est trop long ... J'essaierai d'autres approches quand j'aurai du temps.
la source
eval
?y///
n'interpole pas, il en est de même d'utiliser les guillemets doubles pour interpoler$w
et$k
, puiseval
pour exécutery///
.Python 2, 109 octets
la source
J,
2926 octetsUsage
Explication
Le
i.
verbe de plage renvoie[0, 1, ..., n-1]
pour positifn
et[n-1, n-2, ..., 0]
pour négatifn
qui est utile ici.la source
Mathematica, 78 octets
Explication
Faire la matrice initiale: 1x1 si impair, 2x2 si pair.
Générez une liste de 1 à abs (entrée) - 1.
Remplissez le tableau initial à l'aide de la liste susmentionnée.
Ajoutez 1 ou -entrée, la valeur la plus petite étant retenue.
Appliquez une valeur absolue à la matrice entière.
la source
PHP,
177157 octetscourir avec
php -r '<code>
boucle à travers les lignes et les colonnes, imprime les valeurs en fonction de leur distance au centre.
$n=abs($z)+1
: Le+1
sauve quelques+1
-1
expressions et dans des expressions ultérieures-$n+1
(pré-incrémentation de la condition!) à$n-1
(-abs($z)
àabs($z)
)$n
: 1) sont ignorées(
$n&1
c'est vrai pour les colonnes paires ici!+1
?)+1
.la source
Haskell,
191183173169168 octetsUsage:
Merci à nimi pour
2102024 octets!la source
negate
est(0-)
f
à[id!id,tail!init]!!mod n 2
, puis en ligne dansg
et utiliser le1<2
garde pour lier un résultat intermédiaire de la branche:g n| ... |q<-r<$>a n=([id!id,tail!init]!!mod n 2)q$a n
. Vous n'avez pas besoin d'un nom pour la fonction principale.a
aussi (et retourner à la1<2
garde):g n| ... |1<2=[id!id,tail!init]!!mod n 2=<<map r$r$(\x->(x<$[1..x])++[x+1..n])<$>[1..n]
.m=map
en!
:...(++).m y
etg
:g n|n<0=m(m(abs.((n-1)+)))$g$abs n|1<2=[id!id,tail!init]!!mod n 2=<<m r$r$m(\x->(x<$[1..x])++[x+1..n])[1..n]
.JavaScript (ES6), 107 octets
l
est la taille du tableau. Len<0?-n-j:j+1
semble bizarre , mais je ne peux pas trouver mieux.la source
Vim,
152143 octetsJe suis sûr que cela pourrait être joué davantage, en particulier ces deux dernières lignes, mais mon cerveau est frit.
Essayez-le en ligne!
Le voici au format xxd avec des caractères non imprimables:
Explication
Il construit la pyramide du centre vers l'extérieur, entourant le numéro du centre avec
x
es:Ensuite, il remplace l'
x
es par le numéro suivant et l'entoure àx
nouveau d'es:...etc. Pour les nombres pairs, il fait la même chose mais commence par une base 2x2.
Voici le code "non golfé". C'est quelque peu inhabituel dans la mesure où j'enregistre une macro en la tapant dans un tampon (d'où tous les
<C-v>
s) puis en la supprimant dans un registre, ce qui est le meilleur moyen que j'ai trouvé pour composer une macro sans réellement exécuter les frappes.la source
PHP, 215 octets
la source
R, 112 octets
Nécessite un entier
n
dans l'espace de travail, sinon exécutezn=scan()
pour 8 octets supplémentaires.la source