Berechnen Sie die optimale quadratische Matrix


13

Die optimale Matrix (für den eher engen Umfang dieser Herausforderung) wird erhalten, indem die Elemente aus den entsprechenden Zeilen und Spalten einer quadratischen Matrix "gezippt" werden und das Maximum von jedem Paar erhalten wird.

Zum Beispiel mit der folgenden Matrix:

4 5 6
1 7 2
7 3 0

Sie können es mit ihren Transponierten kombinieren zu bekommen: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Wenn Sie jedes Paar von Listen zip, erhalten Sie die folgende: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. Der letzte Schritt besteht darin, das Maximum jedes Paares zu erhalten, um die optimale Matrix zu erhalten:

4 5 7
5 7 3
7 3 0

Ihre Aufgabe ist es, die optimale Matrix einer als Eingabe gegebenen Quadratmatrix auszugeben. Die Matrix enthält nur Ganzzahlen. I / O kann in jedem vernünftigen Format erfolgen. Der kürzeste Code in Bytes (entweder in UTF-8 oder in der benutzerdefinierten Codierung der Sprache) gewinnt!

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]]

Können wir eine flache Version der Matrix ausgeben? zB [1,2,3,4]statt [[1,2],[3,4]]? Würde sparen ~ 33%
wastl

Antworten:


7

Gelee , 2 Bytes

»Z

Probieren Sie es online!

Wie es funktioniert

»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 mein Gott ... Warum in »aller Welt benimmt sich das so ?!

5
Ziemlich Standard für eine Array-Manipulationssprache. Octave maxmacht dasselbe.
Dennis

5

Haskell , 40 Bytes

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

Probieren Sie es online!

Ich würde dies als ungolf:

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

... was so viel eleganter ist.


2
Ich finde es lustig, dass das Beste, was ich in Clean Golf spielen kann, mit Ihrem ungolften Haskell identisch ist.
Urous





2

JavaScript (ES6), 48 Byte

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

Testfälle




1

CJam , 8 Bytes

{_z..e>}

Anonymer Block (Funktion), der die Eingabe vom Stapel nimmt und durch die Ausgabe ersetzt.

Probieren Sie es online! Oder überprüfen Sie alle Testfälle .

Erläuterung

{      }    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 Bytes

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

Probieren Sie es online!

Dies entspricht den meisten anderen Antworten. R hat jedoch zwei unterschiedliche maxFunktionen für die beiden allgemeinen Szenarien:

maxund mindas Maximum oder Minimum aller in ihren Argumenten vorhandenen Werte zurückgeben, als Ganzzahl, wenn alle logisch oder ganzzahlig sind, als Double, wenn alle numerisch sind, und sonst als Zeichen.

pmaxund pminnehmen ein oder mehr Vektoren (oder Matrizen) als Argument und gibt einen einzelnen Vektor , der die ‚parallelen‘ Maxima (oder Minima) der Vektoren geben. Das erste Element des Ergebnisses ist das Maximum (Minimum) der ersten Elemente aller Argumente, das zweite Element des Ergebnisses ist das Maximum (Minimum) der zweiten Elemente aller Argumente und so weiter. Kürzere Eingaben (ungleich Null) werden bei Bedarf recycelt.



1

C (gcc) , 79,77 Bytes

  • Zwei Bytes dank Steadybox gespart ; Es wird nur ein Matrixdimensionsparameter berücksichtigt, da alle Matrizen in dieser Herausforderung quadratisch sind.
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]);}

Probieren Sie es online!

Nimmt ein flaches ganzzahliges Array Aund die Matrixdimension n(da die Matrix quadratisch sein muss) als Eingabe. Gibt eine flache Ganzzahl-Array-Zeichenfolgendarstellung an stdout aus.



0

05AB1E , 7 Bytes

ø‚øεøεà

Probieren Sie es online!

Erläuterung

ø         # 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





Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.