Calcul de la matrice carrée optimale


13

La matrice optimale (pour la portée plutôt étroite de ce défi) est obtenue en «zippant» les éléments des lignes et colonnes correspondantes d'une matrice carrée et en obtenant le maximum de chaque paire.

Par exemple, étant donné la matrice suivante:

4 5 6
1 7 2
7 3 0

Vous pouvez le combiner avec sa transposition pour obtenir: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Si vous zip chaque paire de listes, vous obtenez ce qui suit: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. La dernière étape consiste à obtenir le maximum de chaque paire pour obtenir la matrice optimale:

4 5 7
5 7 3
7 3 0

Votre tâche consiste à sortir la matrice optimale d'une matrice carrée donnée en entrée. La matrice ne contiendra que des entiers. Les E / S peuvent être effectuées dans n'importe quel format raisonnable. Le code le plus court en octets (soit en UTF-8 ou dans l'encodage personnalisé du langage) gagne!

Les tests

[[172,29], [29,0]] -> [[172,29], [29,0]]
[[4,5,6], [1,7,2], [7,3,0]] -> [[4,5,7], [5,7,3], [7,3,0 ]]
[[1,2,3], [1,2,3], [1,2,3]] -> [[1,2,3], [2,2,3], [3,3,3 ]]
[[4,5, -6], [0,8, -12], [- 2,2,4]] -> [[4,5, -2], [5,8,2], [- 2,2,4]]

Pouvons-nous produire une version plate de la matrice? par exemple [1,2,3,4]au lieu de [[1,2],[3,4]]?
Économiserait

Réponses:


7

Gelée , 2 octets

»Z

Essayez-le en ligne!

Comment ça fonctionne

»Z  Main link. Argument: M (integer matrix)

 Z  Zip the rows of M, transposing rows and columns.
»   Take the maxima of all corresponding integers.

Oh mon ... Pourquoi dans le monde »se comporte comme ça?!

5
Assez standard pour un langage de manipulation de tableaux. Octave's maxfait de même.
Dennis

5

Haskell , 40 octets

z(z max)<*>foldr(z(:))e
e=[]:e
z=zipWith

Essayez-le en ligne!

Je dégoulerais ceci comme:

import Data.List
f m = zipWith (zipWith max) m (transpose m)

... qui est tellement plus élégant.


2
Je trouve drôle que le meilleur que je puisse jouer au golf dans Clean est identique à votre Haskell non golfé.
Janurous

5

Husk , 5 4 octets

Whoop, jamais utilisé auparavant (ou ):

S‡▲T

Essayez-le en ligne!

Explication

S  T -- apply the function to itself and itself transposed
 ‡▲  -- bi-vectorized maximum




2

JavaScript (ES6), 48 octets

m=>m.map((r,y)=>r.map((v,x)=>v>(k=m[x][y])?v:k))

Cas de test


2

J , 4 octets

Fonction de préfixe tacite.

>.|:

Essayez-le en ligne!

>. plafond [de l'argument] avec

|: l'argument transposé


Je ne pense pas que vous ayez besoin de l'inclure f=:. : P au début, je pensais que vous avez réduit le bytecount de 3 octets ...
Erik the Outgolfer

<.est censé être>.
FrownyFrog

@FrownyFrog En effet.
Adám

@EriktheOutgolfer Non, je ne le fais pas.
Adám


1

CJam , 8 octets

{_z..e>}

Bloc anonyme (fonction) qui prend l'entrée de la pile et la remplace par la sortie.

Essayez-le en ligne! Ou vérifiez tous les cas de test .

Explication

{      }    e# Define block
 _          e# Duplicate
  z         e# Zip
   .        e# Apply next operator to the two arrays, item by item
            e# (that is, to rows of the two matrices)
    .       e# Apply next operator to the two arrays, item by item
            e# (that is, to numbers of the two rows)
     e>     e# Maximum of two numbers

1

R , 23 octets

function(A)pmax(A,t(A))

Essayez-le en ligne!

Cela équivaut à la plupart des autres réponses. Cependant, R a deux maxfonctions distinctes pour les deux scénarios courants:

maxet minrenvoyer le maximum ou le minimum de toutes les valeurs présentes dans leurs arguments, comme entier si tous sont logiques ou entiers, comme double si tous sont numériques, et caractère sinon.

pmaxet pminprendre un ou plusieurs vecteurs (ou matrices) comme arguments et renvoyer un seul vecteur donnant les maxima (ou minima) "parallèles" des vecteurs. Le premier élément du résultat est le maximum (minimum) des premiers éléments de tous les arguments, le deuxième élément du résultat est le maximum (minimum) des seconds éléments de tous les arguments et ainsi de suite. Des entrées plus courtes (de longueur non nulle) sont recyclées si nécessaire.



1

C (gcc) , 79 77 octets

  • Enregistré deux octets grâce à Steadybox ; n'acceptant qu'un seul paramètre de dimension de matrice, car toutes les matrices de ce défi sont carrées.
j,i;f(A,n)int*A;{for(j=0;j<n*n;j++)printf("%d,",A[A[j]>A[i=j/n+j%n*n]?j:i]);}

Essayez-le en ligne!

Prend un tableau entier plat Aet la dimension nde la matrice (car la matrice doit être carrée) en entrée. Génère une représentation de chaîne de tableau d'entiers plats vers stdout.



0

05AB1E , 7 octets

ø‚øεøεà

Essayez-le en ligne!

Explication

ø         # transpose input matrix
 ‚        # pair with original matrix
  ø       # zip together
   ε      # apply on each sublist ([[row],[transposed row]])
    ø     # zip
     ε    # apply on each sublist (pair of elements)
      à   # extract greatest element





En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.