Défi:
Étant donné une entrée matricielle, déterminez la quantité de diagonales et d'anti-diagonales avec des nombres en double.
Donc, si nous avons une matrice comme celle-ci:
[[aa,ab,ac,ad,ae,af],
[ba,bb,bc,bd,be,bf],
[ca,cb,cc,cd,ce,cf],
[da,db,dc,dd,de,df]]
Toutes les diagonales et anti-diagonales seraient:
[[aa],[ab,ba],[ac,bb,ca],[ad,bc,cb,da],[ae,bd,cc,db],[af,be,cd,dc],[bf,ce,dd],[cf,de],[df],
[af],[ae,bf],[ad,be,cf],[ac,bd,ce,df],[ab,bc,cd,de],[aa,bb,cc,dd],[ba,cb,dc],[ca,db],[da]]
Exemple:
[[1,2,1,2,1,2],
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[2,1,2,1,2,1]]
Toutes les diagonales et anti-diagonales seraient:
[[1],[2,1],[1,2,6],[2,3,5,2],[1,4,4,1],[2,5,3,2],[6,2,1],[1,2],[1],
[2],[1,6],[2,5,1],[1,4,2,1],[2,3,3,2],[1,2,4,1],[1,5,2],[6,1],[2]]
Suppression de toutes les diagonales et anti-diagonales contenant uniquement des numéros uniques:
[[2,3,5,2],[1,4,4,1],[2,5,3,2],[1,4,2,1],[2,3,3,2],[1,2,4,1]]
La sortie est donc la quantité de diagonales et d'anti-diagonales contenant des nombres en double:
6
Règles du défi:
- Si la matrice d'entrée est vide, ne contient qu'un seul nombre ou ne contient que des nombres uniques sur toute la matrice, la sortie est toujours
0
. - L'entrée est garantie de ne contenir que des chiffres positifs
[1,9]
(sauf si elle est complètement vide). - La matrice sera toujours rectangulaire (c'est-à-dire que toutes les lignes ont la même longueur).
- Les E / S sont flexibles. L'entrée peut être considérée comme une liste de listes d'entiers, ou un tableau 2D d'entiers, ou un objet Matrix, comme une chaîne, etc. etc. Vous êtes également autorisé à prendre une ou les deux dimensions de la matrice comme entrée supplémentaire. s'il sauverait des octets dans la langue de votre choix.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
Input: Output:
[[1,2,1,2,1,2], 6
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[2,1,2,1,2,1]]
[[]] 0
[[1,2], 0
[3,4]]
[[1,1], 2
[1,1]]
[[9,9,9], 6
[9,9,9],
[9,9,9]]
[[7,7,7,7], 8
[7,7,7,7],
[7,7,7,7]]
[[1,1,1], 1
[2,3,4],
[2,5,1]]
[[1,8,4,2,9,4,4,4], 12
[5,1,2,7,7,4,2,3],
[1,4,5,2,4,2,3,8],
[8,5,4,2,3,4,1,5]]
[[1,2,3,4], 4
[5,6,6,7],
[8,6,6,9],
[8,7,6,5]]
la source
row
etcol
à ma liste de «fonctions extrêmement situationnelles». Solution vraiment intelligente.c(m|x-y,m|x+y)
ligne droite dans l'appel sévère, retirer lal=
partie. Je ne vois aucun test ayant échoué. Essayez-le en ligne!l
instance.row
etcolumn
à R ce matin, car je n'en ai jamais entendu parler.J ,
2120 octets-1 octet merci à Jonah!
Essayez-le en ligne!
Explication:
la source
(-.@-:~.)
pour "les articles uniques ne correspondent pas" en J mais je l'ai rencontré plusieurs fois aussi et je ne pense pas que vous puissiez ... nous avons=
et~:
, sur une main, et-:
et<this is missing>
.1#.|.,&((~:&#~.)/.)]
. Essayez-le en ligne!&
, merci!Japt , 31 octets
Essayez tous les cas de test
Explication:
J'ai également essayé une version basée sur la réponse Haskell de Kirill L., mais je n'ai pas pu trouver un bon moyen de "grouper en fonction des indices X et Y" et l'alternative que j'ai trouvée n'était pas assez bonne.
la source
JavaScript (ES6),
107 105 10198 bytesEssayez-le en ligne!
Remarque
La façon dont ce code est joué, l'anti-diagonale composée de la seule cellule en bas à gauche n'est jamais testée. C'est OK car il ne peut pas contenir de valeurs dupliquées.
Commenté
la source
05AB1E , 25 octets
Essayez-le en ligne! ou en tant que suite de tests
Explication
J'ai l'impression d'avoir raté quelque chose ici.
Besoin d'essayer de jouer au golf plus tard.
la source
rotate N left
seraitN._
maintenant. Çaí‚εεygÅ0«N._]
marche aussi. Peut également supprimer l'aplatissement avec ce nouveau changement ... toujours pas d'économie d'octets cependant:í‚vyεygÅ0«N._}ø}«ʒ0KDÙÊ}g
N(._
je suppose, mais votreNFÁ}
longueur est la même, et encore plus courte dans ce cas en raison de la]
fermeture simultanée de la boucle et des cartes. Dans l'ensemble, l'utilisation de._
n'est utile que lorsque vous allez à gauche pour enregistrer 1 octet, par rapport àNFÀ}
.Python 2 ,
144136 octetsEssayez-le en ligne!
la source
Octave , 98 octets
Essayez-le en ligne!
la source
cellfun
aussi, et pour les masochistesstructfun
aussi. Dans Octave, c'est soit une boucle for, soit un ayantfun
!Haskell,
118112 octetsEssayez-le en ligne!
la source
Fusain ,
615653 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Boucle sur les diagonales avant et arrière;
i=0
représente les diagonales avant tandis quei=1
représente les diagonales inverses.Boucle sur chaque index de ligne. Cela représente l'indice du début de la diagonale.
Boucle sur chaque index de colonne.
Calculez l'indice de ligne de la diagonale à cet indice de colonne. J'utilise un
for
boucle sur un tableau à un élément au lieu d'une affectation car cela évite d'avoir à encapsuler l'affectation dans un bloc avec l'instruction suivante, économisant ainsi un octet.Vérifiez s'il s'agit de la première colonne ou si la diagonale est sur le point de passer entre le bas et le haut.
Si ce n'est pas le cas, sautez la dernière liste de la liste des listes.
si c'est le cas, commencez une nouvelle liste vide.
Ajoutez l'entrée diagonale actuelle à cette liste.
Et repoussez cette liste (retour) vers la liste des listes.
Comptez le nombre de listes contenant des doublons.
Prenons un exemple quand
i=0
etk=1
. Cela signifie que nous avons déjà obtenu deux diagonales,[[1,1,5,2],[9,4,3,5]]
. Voici notre contribution:Nous bouclons ensuite
l
de0
à7
. Cela fait avancer la ligne et la colonne de 1 à chaque fois:La liste est maintenant
[[1,1,5,2],[9,4,3,5],[5,4,4]]
. Cependant, quandl
est3
, nous avonsk+l=4
, un multiple de la hauteur du tableau. Cela signifie que nous devons commencer une nouvelle liste:[[1,1,5,2],[9,4,3,5],[5,4,4],[]]
. Nous continuons ensuite à collecter des éléments diagonaux:La liste est maintenant
[[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1]]
. Maintenant, quandl
est7
, nous avonsk+l=8
, un autre multiple de la hauteur du tableau. Cela signifie que nous devons commencer une nouvelle liste, qui se termine avec le dernier élément de cette diagonale:[[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1],[4]]
.En collectant les diagonales enveloppantes à partir du premier élément de chaque ligne, nous finissons par accumuler toutes les diagonales du réseau.
la source
Wolfram Language (Mathematica) ,
99 98 96 9483 octetsEssayez-le en ligne!
Function[a,a~Diagonal~#&/@Range[t=-#~Total~2,-t]]
obtient toutes les diagonales dea
- ce qui fonctionne parce qu'il#~Total~2
est plus grand que n'importe quelle dimension dea
.la source
APL + WIN, 69 octets
Demande une matrice 2d de la forme 4 6⍴1 2 1 2 1 2 1 2 3 4 5 6 6 5 4 3 2 1 2 1 2 1 2 1
Cela donne:
Essayez-le en ligne! Gracieuseté de Dyalog Classic
Explication:
Rendements:
la source
Perl 5,
8982 octetsTIO
la source
TSQL,
140128 octetsTrouver un moyen de jouer au golf à 12 personnages. Ce n'est plus la solution la plus longue.
Golfé:
Non golfé:
Essaye le
la source