Обчисліть матрицю оптимального квадрата


13

Матриця оптимальної (для досить вузької рамки даного завдання) виходять «стиснути» елементи з відповідних рядків і стовпців квадратної матриці і отримувати максимум з кожної пари.

Наприклад, дано таку матрицю:

4 5 6
1 7 2
7 3 0

Ви можете комбінувати його з транспонованою отримати: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Якщо ви промайнути кожну пару списків, ви отримаєте наступне: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. Останній крок - отримати максимум кожної пари для отримання оптимальної матриці:

4 5 7
5 7 3
7 3 0

Ваше завдання - вивести оптимальну матрицю квадратної матриці, задану як вхідний. Матриця буде містити лише цілі числа. Введення / виведення можна зробити в будь-якому розумному форматі. Виграє найкоротший код у байтах (або в UTF-8, або в спеціальному кодуванні мови)!

Тести

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

Чи можемо ми вивести плоску версію матриці? наприклад [1,2,3,4]замість [[1,2],[3,4]]?
Врятував

Відповіді:


7

Желе , 2 байти

»Z

Спробуйте в Інтернеті!

Як це працює

»Z  Main link. Argument: M (integer matrix)

 Z  Zip the rows of M, transposing rows and columns.
»   Take the maxima of all corresponding integers.

О мій ... Чому в світі так »поводиться ?!

5
Досить стандартний для мови маніпулювання масивом. Октав maxробить те саме.
Денніс

5

Haskell , 40 байт

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

Спробуйте в Інтернеті!

Я скасую це як:

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

... що набагато елегантніше.


2
Мені здається смішним, що найкраще, що я міг би гольфу в «Чисті», є ідентичним твоєму безгольовому Haskell.
Οurous





2

JavaScript (ES6), 48 байт

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

Тестові справи


2

J , 4 байти

Мовчазна префіксальна функція.

>.|:

Спробуйте в Інтернеті!

>. стеля [аргументу] с

|: перенесений аргумент


Гм, я не думаю, що потрібно включати f=:. : P спочатку я подумав, що ти зменшив кількість рахунків на 3 байти ...
Ерік Забронювач

<.передбачається>.
FrownyFrog

@FrownyFrog Дійсно.
Адам

@EriktheOutgolfer Ні, я ні.
Адам


1

CJam , 8 байт

{_z..e>}

Анонімний блок (функція), який приймає вхід зі стека і замінює його на вихід.

Спробуйте в Інтернеті! Або перевірити всі тестові випадки .

Пояснення

{      }    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 байти

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

Спробуйте в Інтернеті!

Це рівнозначно більшості інших відповідей. Однак R має дві різні maxфункції для двох загальних сценаріїв:

maxі minповернути максимум або мінімум усіх значень, присутніх у їхніх аргументах, як ціле число, якщо всі є логічними або цілими, як подвійне, якщо всі числові, а символ в іншому випадку.

pmaxі pminвізьміть один або кілька векторів (або матриць) як аргументи і поверніть один вектор, даючи «паралельні» максимуми (або мінімуми) векторів. Перший елемент результату - це максимум (мінімум) перших елементів усіх аргументів, другий елемент результату - це максимум (мінімум) другого елемента всіх аргументів тощо. Коротші входи (ненульової довжини) при необхідності переробляються.



1

C (gcc) , 79 77 байт

  • Збережено два байти завдяки Steadybox ; тільки приймаючи один параметр розмірності матриці, оскільки всі матриці в цьому виклику є квадратними.
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]);}

Спробуйте в Інтернеті!

Бере плоский цілий масив Aі розмір матриці n(оскільки матриця повинна бути квадратною) як вхідний. Виводить рівне ціле представлення рядка масиву в stdout.








Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.