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

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.

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.


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




2

JavaScript (ES6), 48 bajtów

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

Przypadki testowe




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

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.



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.



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





Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.