Étant donné un nombre n
, produire une liste ordonnée d'indices basés sur 1 tombant sur l'une des diagonales d'une n*n
matrice carrée.
Exemple:
Pour une entrée de 3
:
Le carré doit être:
1 2 3
4 5 6
7 8 9
Maintenant, nous sélectionnons tous les indices représentés par \
, /
ou X
( #
ou les positions non diagonales sont rejetées)
\ # /
# X #
/ # \
La sortie doit être:
[1,3,5,7,9]
Cas de test:
1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]
Il n'y aura pas de réponse acceptée. Je veux connaître le code le plus court pour chaque langue.
Réponses:
Octave , 28 octets
Fonction anonyme qui entre un nombre et sort un vecteur colonne de nombres.
Essayez-le en ligne!
la source
JavaScript (ES6), 48 octets
Génère une liste d'entiers séparés par des tirets sous forme de chaîne.
Formaté et commenté
Cas de test
Afficher l'extrait de code
la source
&
pour enregistrer un octet?4%3
et4%5
n'ont pas de 1 bit en commun, mais les deux sont différents de zéro.n=5
et j'ai remarqué que ça ne marcherait pas.k%~-n&&k%-~n
devrait marcher. belle astuce avec le séparateur!R ,
38353438 octets3 octets enregistrés quand je me souviens de l'existence de la
which
fonction ..., 1 octet enregistré grâce à @Rift+4 octets pour l'argument
ec=T
lorsqu'il est appelé en tant que programme complet parsource()
Essayez-le en ligne!
Explication:
la source
d=diag(n<-scan());which(d|d[n:1,])
source
), cela n'imprime rien. Vous devez appelercat
. Voir ce post sur meta .Gelée , 8 octets
Essayez-le en ligne!
Utilise l'algorithme de Luis Mendo sur sa réponse MATL.
la source
ŒD
.ŒD
fait quelque chose de complètement différent de X d'une taille spécifique.Octave ,
4137 octetsCela fonctionne également dans MATLAB. Aucune fonctionnalité spécifique à Octave sournoise :)
Essayez-le en ligne!
Explication:
Au lieu de créer une matrice carrée et de trouver les deux diagonales, j'ai pensé plutôt calculer directement les diagonales. C'était 17 octets de moins! =)
Voilà à quoi ça ressemble, sans
unique
:Oui, j'aurais probablement dû inverser l'ordre des diagonales pour le rendre plus convivial.
la source
MATL , 6 octets
Essayez-le en ligne!
Explication
Même approche que ma réponse Octave.
Considérez l'entrée
3
comme exemple.L'indexation linéaire est basée sur une colonne , basée sur 1. Pour plus d'informations, voir l'extrait de longueur 12 ici .
la source
t
est en double, pas transposé. En outre, j'ai ajouté un exemple élaboréPython 2 ,
5453 octetsEssayez-le en ligne!
la source
Octave,
6854 octetsMerci à @Stewie Griffin pour avoir économisé 14 octets!
Essayez-le en ligne!
MATLAB, 68 octets
Explication:
la source
Mathematica, 42 octets
Essayez-le en ligne!
@KellyLowder l'a joué jusqu'à ..
Mathematica, 37 octets
et @alephalpha a jeté la table!
Mathematica, 34 octets
la source
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
est 5 octets plus courtUnion@@Range[{1,#},#^2,{#+1,#-1}]&
Proton , 41 octets
Essayez-le en ligne!
la source
MATL , 14 octets
Essayez-le en ligne!
la source
C (gcc) ,
6558 octets-7 octets grâce à Titus!
Essayez-le en ligne!
la source
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 octets)C # (.NET Core) ,
9783 octetsEssayez-le en ligne!
Le changement ici est basé sur le décalage entre les nombres à rechercher. Les deux quarts de travail à partir de 0 sont
n-1
etn+1
, donc sin=5
, les chiffres pourn-1
serait0,4,8,12,16,20
et pourn+1
seraient0,6,12,18,24
. La combinaison de ces éléments et l'indexation 1 (au lieu de l'indexation 0) donne1,5,7,9,13,17,19,21,25
. Le décalage par rapport àn
est obtenu en utilisant la négation au niveau du bit (opération de complément au niveau du bit), où~-n==n-1
et-~n==n+1
.Ancienne version
Essayez-le en ligne!
Cette approche utilise les indices de colonne et de ligne pour déterminer si les nombres sont sur les diagonales.
i/n
donne l'index de ligne eti%n
l'index de colonne.Retourner uniquement le tableau de nombres
Si la construction uniquement du tableau de nombres est réputée compter pour le coût en octets, alors ce qui suit pourrait être fait, sur la base de la suggestion de Dennis.Verweij (
using System.Linq;
ajoute 18 octets supplémentaires):C # (.NET Core) , 66 + 18 = 84 octets
Essayez-le en ligne!
la source
&
. L'extra&
n'est là que pour casser la comparaison si la première entrée est fausse MSDNusing System;
? (Je suppose que l'enveloppernamespace System.Linq
n'est pas valide?)Javascript,
7363 octetsancienne version
10 octets enregistrés grâce à @Shaggy
Golf pour la première fois! j'espère que je ne me suis pas trop trompé.
Afficher l'extrait de code
la source
filter
fonction:!(--x%(n+1)&&x%(n-1))
et en créant votre tableau comme ceci:[...Array(n*n+1).keys()]
[1...n*n]
plage avecArray(n*n).fill().map((x,i)=>i+1)
" -[...Array(n*n)].map((_,y)=>y+1)
est une façon plus courte de le faire, pour référence future.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pyth ,
2018 octets( Voici la version initiale .)
Suite de tests.
Pyth , 18 octets
Suite de tests.
la source
Perl 5 , 56 + 1 (-n) = 57 octets
Essayez-le en ligne!
la source
perl -e
. La ligne de commande de cet exemple seraitperl -ne
. C'est une différence de +1.Java (OpenJDK 8) , 71 octets
Essayez-le en ligne!
Port de scottinet's answer .
la source
Japt , 16 octets
Je n'arrive pas à faire mieux que ça mais je suis sûr que c'est possible. J'ai dû sacrifier 2 octets pour l'exigence inutile d'utiliser 1-indexation.
Essaye-le
la source
Octave, 32 octets
Essayez-le en ligne!
la source
PHP,
5654 + 1 octets+1 octet pour le
-R
drapeauimprime les nombres précédés de tirets. Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne .nécessite PHP 5.6 ou version ultérieure pour l'
**
opérateur.Ajoutez un octet pour les anciens PHP: remplacez
;$z**.5<$n=$argn
par$z=$argn;$z<$n*$n
.la source
Rubis, 45 octets
Fonctionne en interne comme indexé zéro. vérifie si
i
modulon+1
oun-1
vaut 0, si c'est le cas, imprimei+1
.la source