Oblicz optymalną macierz kwadratową

13

Matrycy optymalną (na raczej wąski zakres to wyzwanie) otrzymuje się przez „skompresowanie” elementy z odpowiednich rzędach i kolumnach kwadratowych macierzy i uzyskanie maksimum każdej pary.

Na przykład, biorąc pod uwagę następującą macierz:

4 5 6
1 7 2
7 3 0

Można łączyć je z przenoszą się: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Jeśli zip każdą parę list, można uzyskać następujące: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. Ostatnim krokiem jest uzyskanie maksimum każdej pary, aby uzyskać optymalną macierz:

4 5 7
5 7 3
7 3 0

Twoim zadaniem jest uzyskanie optymalnej macierzy macierzy kwadratowej podanej jako dane wejściowe. Macierz będzie zawierać tylko liczby całkowite. We / wy można wykonać w dowolnym rozsądnym formacie. Najkrótszy kod w bajtach (w UTF-8 lub w niestandardowym kodowaniu języka) wygrywa!

Testy

[[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
źródło
Czy możemy wydrukować płaską wersję matrycy? np. [1,2,3,4]zamiast [[1,2],[3,4]]? Zaoszczędziłby ~ 33%
wastl

Odpowiedzi:

7

Galaretka , 2 bajty

»Z

Wypróbuj online!

Jak to działa

»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
źródło
O rany ... Dlaczego na świecie tak się »zachowuje ?!
5
Całkiem standardowy język manipulacji tablicami. Octave's maxrobi to samo.
Dennis
5

Haskell , 40 bajtów

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

Wypróbuj online!

Odholfowałbym to jako:

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

... który jest o wiele bardziej elegancki.

całkowicie ludzki
źródło
2
Zabawne jest dla mnie to, że najlepsze, co mogłem grać w golfa w grze Clean, jest identyczne z twoim nie golfowym Haskellem.
Οurous
5

Łuska , 5 4 bajtów

Whoop, nigdy wcześniej nie musiałem używać (lub ):

S‡▲T

Wypróbuj online!

Wyjaśnienie

S  T -- apply the function to itself and itself transposed
 ‡▲  -- bi-vectorized maximum
ბიმო
źródło
4

MATL , 6 bajtów

t!2$X>

Wypróbuj online!

Wyjaśnienie:

t        % Duplicate the input.
!        % Transpose the duplicate.
2$X>     % Elementwise maximum of the two matrices.
Steadybox
źródło
3
Również 6 bajtów: _t!Xl_i tt!&Xl.
Sanchises
2

JavaScript (ES6), 48 bajtów

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

Przypadki testowe

Arnauld
źródło
2

J , 4 bajty

Funkcja ukrytego przedrostka.

>.|:

Wypróbuj online!

>. pułap [argumentu] z

|: transponowany argument

Adám
źródło
Nie sądzę, że musisz to uwzględnić f=:. : P na początku myślałem, że zmniejszyłeś bajt o 3 bajty ...
Erik Outgolfer
<.ma być>.
FrownyFrog,
@FrownyFrog Rzeczywiście.
Adám
@EriktheOutgolfer Nie, nie wiem.
Adám
2

Japt , 12 10 8 bajtów

Spójrz, mamo, nie ma transpozycji ani zipowania!

£XËwUgEY

Spróbuj

Kudłaty
źródło
1

CJam , 8 bajtów

{_z..e>}

Anonimowy blok (funkcja), który pobiera dane wejściowe ze stosu i zastępuje je danymi wyjściowymi.

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

{      }    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
źródło
1

R , 23 bajty

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

Wypróbuj online!

Jest to równoważne z większością innych odpowiedzi. Jednak R ma dwie różne maxfunkcje dla dwóch typowych scenariuszy:

maxi minzwracają maksimum lub minimum wszystkich wartości obecnych w ich argumentach, jako liczbę całkowitą, jeśli wszystkie są logiczne lub całkowite, jako podwójną, jeśli wszystkie są liczbowe, a w przeciwnym razie znak.

pmaxi pminweź jeden lub więcej wektorów (lub macierzy) jako argumenty i zwróć pojedynczy wektor, dając „równoległe” maksima (lub minima) wektorów. Pierwszy element wyniku to maksimum (minimum) pierwszych elementów wszystkich argumentów, drugi element wyniku to maksimum (minimum) drugich elementów wszystkich argumentów i tak dalej. Krótsze nakłady (o niezerowej długości) są w razie potrzeby poddawane recyklingowi.

Giuseppe
źródło
1

Czysty , 58 bajtów

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

Nie sądzę, że to wymaga wyjaśnienia.

Wypróbuj online!

Obrzydliwe
źródło
1

C (gcc) , 79 77 bajtów

  • Zaoszczędzono dwa bajty dzięki Steadybox ; biorąc tylko jeden parametr wymiaru macierzy, ponieważ wszystkie macierze w tym wyzwaniu są kwadratowe.
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]);}

Wypróbuj online!

Pobiera na wejściu płaską tablicę liczb całkowitych Ai wymiar macierzy n(ponieważ macierz musi być kwadratowa) jako dane wejściowe. Wyprowadza na standardowe wyjście ciąg płaskiej reprezentacji ciągu tablicy liczb całkowitych.

Jonathan Frech
źródło
1

Julia 0.6 , 13 bajtów

max.stosuje tę funkcję maxelementarnie do swoich argumentów.

a->max.(a,a')

Wypróbuj online!

gggg
źródło
0

05AB1E , 7 bajtów

ø‚øεøεà

Wypróbuj online!

Wyjaśnienie

ø         # 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
źródło