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]]
Steadybox
quelle
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.
Dennis
quelle
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.

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

Schale , 5 4 Bytes

Whoop, habe noch nie zuvor benutzt (oder ):

S‡▲T

Probieren Sie es online!

Erläuterung

S  T -- apply the function to itself and itself transposed
 ‡▲  -- bi-vectorized maximum
ბიმო
quelle
4

MATL , 6 Bytes

t!2$X>

Probieren Sie es online!

Erläuterung:

t        % Duplicate the input.
!        % Transpose the duplicate.
2$X>     % Elementwise maximum of the two matrices.
Steadybox
quelle
3
Auch 6 Bytes: _t!Xl_und tt!&Xl.
Sanchises
2

JavaScript (ES6), 48 Byte

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

Testfälle

Arnauld
quelle
2

J , 4 Bytes

Tacit-Präfix-Funktion.

>.|:

Probieren Sie es online!

>. Decke [des Arguments] mit

|: das transponierte Argument

Adam
quelle
Ähm, ich glaube nicht, dass Sie mitmachen müssen f=:. : P Zuerst dachte ich, dass Sie die Bytecount um 3 Bytes reduziert ...
Erik der Outgolfer
<.soll sein>.
FrownyFrog
@ FrownyFrog In der Tat.
Adám
@EriktheOutgolfer Nein, ich nicht.
Adám
2

Japt , 12 10 8 Bytes

Schau, Ma, kein Transponieren oder Zippen!

£XËwUgEY

Versuch es

Zottelig
quelle
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
Luis Mendo
quelle
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.

Giuseppe
quelle
1

Sauber , 58 Bytes

import StdEnv,StdLib
@l=zipWith(zipWith max)(transpose l)l

Ich denke nicht, dass dies einer Erklärung bedarf.

Probieren Sie es online!

Οurous
quelle
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.

Jonathan Frech
quelle
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
Emigna
quelle