计算最佳平方矩阵


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

您的任务是输出作为输入给出的方阵的最佳矩阵。矩阵将仅包含整数。I / O可以采用任何合理的格式进行。以字节为单位的最短代码(采用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]]?可以节省
〜33

Answers:


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
我感到很有趣的是,我在Clean球场上能打出的最好成绩与您没有高尔夫的Haskell相同。
世纪

5

外壳5 4字节

哎呀,以前(或)从未使用过:

S‡▲T

在线尝试!

说明

S  T -- apply the function to itself and itself transposed
 ‡▲  -- bi-vectorized maximum


4

MATL,6个字节

t!2$X>

在线尝试!

说明:

t        % Duplicate the input.
!        % Transpose the duplicate.
2$X>     % Elementwise maximum of the two matrices.

3
也是6个字节:_t!Xl_tt!&Xl
桑契斯


2

JavaScript(ES6),48个字节

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

测试用例




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

在线尝试!

这等效于大多数其他答案。但是,max对于两种常见情况,R具有两个不同的功能:

maxmin返回其参数中存在的所有值的最大值或最小值;如果全部为逻辑值,则返回整数;如果全部为数字,则返回double;否则返回character。

pmaxpmin采用一个或多个向量(或矩阵)作为参数,并返回一个向量,给出向量的“平行”最大值(或最小值)。结果的第一个元素是所有参数的第一个元素的最大值(最小值),结果的第二个元素是所有参数的第二个元素的最大值(最小值),依此类推。如有必要,较短的输入(非零长度)将被回收。



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。



0

05AB1E,7个字节

ø‚øεøεà

在线尝试!

说明

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





By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.