Calcular a matriz quadrada ideal


13

A matriz ideal (para o escopo bastante restrito desse desafio) é obtida "compactando" os elementos das linhas e colunas correspondentes de uma matriz quadrada e obtendo o máximo de cada par.

Por exemplo, dada a seguinte matriz:

4 5 6
1 7 2
7 3 0

Você pode combiná-lo com a sua transposição para obter: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Se você zip cada par de listas, você obter o seguinte: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. O último passo é obter o máximo de cada par para obter a matriz ideal:

4 5 7
5 7 3
7 3 0

Sua tarefa é produzir a matriz ideal de uma matriz quadrada fornecida como entrada. A matriz conterá apenas números inteiros. A E / S pode ser feita em qualquer formato razoável. O código mais curto em bytes (em UTF-8 ou na codificação personalizada do idioma) vence!

Testes

[[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 produzir uma versão plana da matriz? por exemplo, em [1,2,3,4]vez de [[1,2],[3,4]]? Salvar como ~ 33%
wastl

Respostas:


7

Gelatina , 2 bytes

»Z

Experimente online!

Como 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 meu ... Por que no mundo se »comporta assim ?!

5
Bastante padrão para uma linguagem de manipulação de array. Oitava maxfaz o mesmo.
Dennis

5

Haskell , 40 bytes

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

Experimente online!

Eu ungolf isso como:

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

... que é muito mais elegante.


2
Acho engraçado que o melhor que eu possa jogar no Clean seja idêntico ao seu Haskell não-destruído.
Οurous





2

JavaScript (ES6), 48 bytes

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

Casos de teste




1

CJam , 8 bytes

{_z..e>}

Bloco anônimo (função) que pega a entrada da pilha e a substitui pela saída.

Experimente online! Ou verifique todos os casos de teste .

Explicação

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

Experimente online!

Isso é equivalente à maioria das outras respostas. No entanto, R tem duas maxfunções distintas para os dois cenários comuns:

maxe minretorne o máximo ou o mínimo de todos os valores presentes em seus argumentos, como número inteiro se todos forem lógicos ou números inteiros, como dobro se todos forem numéricos e caracteres caso contrário.

pmaxe pminpegue um ou mais vetores (ou matrizes) como argumentos e retorne um único vetor, fornecendo o máximo (ou mínimo) 'paralelo' dos vetores. O primeiro elemento do resultado é o máximo (mínimo) dos primeiros elementos de todos os argumentos, o segundo elemento do resultado é o máximo (mínimo) dos segundos elementos de todos os argumentos e assim por diante. Entradas mais curtas (de comprimento diferente de zero) são recicladas, se necessário.



1

C (gcc) , 79 77 bytes

  • Economizou dois bytes graças ao Steadybox ; tendo apenas um parâmetro de dimensão da matriz, pois todas as matrizes neste desafio são quadradas.
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]);}

Experimente online!

Pega uma matriz inteira plana Ae a dimensão da matriz n(como a matriz precisa ser quadrada) como entrada. Gera uma representação de seqüência de caracteres de matriz inteira plana em stdout.



0

05AB1E , 7 bytes

ø‚øεøεà

Experimente online!

Explicação

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





Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.