Calcule la matriz cuadrada óptima


13

La matriz óptima (para el alcance bastante limitado de este desafío) se obtiene "comprimiendo" los elementos de las filas y columnas correspondientes de una matriz cuadrada y obteniendo el máximo de cada par.

Por ejemplo, dada la siguiente matriz:

4 5 6
1 7 2
7 3 0

Se puede combinar con su transpuesta para obtener: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Si usted zip cada par de listas, se obtiene lo siguiente: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. El último paso es obtener el máximo de cada par para obtener la matriz óptima:

4 5 7
5 7 3
7 3 0

Su tarea es generar la matriz óptima de una matriz cuadrada dada como entrada. La matriz solo contendrá enteros. La E / S se puede hacer en cualquier formato razonable. ¡El código más corto en bytes (ya sea en UTF-8 o en la codificación personalizada del idioma) gana!

Pruebas

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

¿Podemos generar una versión plana de la matriz? por ejemplo, en [1,2,3,4]lugar de [[1,2],[3,4]]? Ahorraría ~ 33%
wastl

Respuestas:


7

Jalea , 2 bytes

»Z

Pruébalo en línea!

Cómo funciona

»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 mi ... ¿Por qué demonios se »comporta así?

55
Bastante estándar para un lenguaje de manipulación de matriz. Octave's maxhace lo mismo.
Dennis

5

Haskell , 40 bytes

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

Pruébalo en línea!

Me gustaría deshacer esto como:

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

... que es mucho más elegante.


2
Me parece curioso que lo mejor que pueda jugar golf en Clean sea idéntico a tu Haskell no golfista.
Οurous





2

JavaScript (ES6), 48 bytes

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

Casos de prueba




1

CJam , 8 bytes

{_z..e>}

Bloque anónimo (función) que toma la entrada de la pila y la reemplaza por la salida.

Pruébalo en línea! O verificar todos los casos de prueba .

Explicación

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

Pruébalo en línea!

Esto es equivalente a la mayoría de las otras respuestas. Sin embargo, R tiene dos maxfunciones distintas para los dos escenarios comunes:

max y min devuelve el máximo o mínimo de todos los valores presentes en sus argumentos, como entero si todos son lógicos o enteros, como doble si todos son numéricos y caracteres de lo contrario.

pmaxy pmintome uno o más vectores (o matrices) como argumentos y devuelva un solo vector dando los máximos (o mínimos) 'paralelos' de los vectores. El primer elemento del resultado es el máximo (mínimo) de los primeros elementos de todos los argumentos, el segundo elemento del resultado es el máximo (mínimo) de los segundos elementos de todos los argumentos y así sucesivamente. Las entradas más cortas (de longitud distinta de cero) se reciclan si es necesario.



1

C (gcc) , 79 77 bytes

  • Guardado dos bytes gracias a Steadybox ; solo tomando un parámetro de dimensión de matriz ya que todas las matrices en este desafío son cuadradas.
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]);}

Pruébalo en línea!

Toma una matriz entera plana Ay la dimensión de la matriz n(ya que la matriz debe ser cuadrada) como entrada. Emite una representación de cadena de matriz entera plana en stdout.



0

05AB1E , 7 bytes

ø‚øεøεà

Pruébalo en línea!

Explicación

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





Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.