最適正方行列の計算


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

回答:


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
クリーンでゴルフできる最高のものが、あなたのゴルフのないハスケルと同じであることは面白いと思います。
18年





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、2つの一般的なシナリオに対して2つの異なる機能があります。

maxそしてmin、引数に存在するすべての値の最大値または最小値を、すべてが論理値または整数の場合は整数として、すべてが数値の場合はdouble、それ以外の場合は文字として返します。

pmaxpmin引数として1つ以上のベクトル(または行列)を取り、ベクトルの「並列」最大値(または最小値)を与える単一のベクトルを返します。結果の最初の要素は、すべての引数の最初の要素の最大(最小)であり、結果の2番目の要素は、すべての引数の2番目の要素の最大(最小)などです。必要に応じて、(ゼロ以外の)短い入力はリサイクルされます。



1

C(gcc)79 77バイト

  • Steadyboxのおかげで2バイト節約されました。このチャレンジのすべてのマトリックスは正方形であるため、1つのマトリックス次元パラメーターのみを取ります。
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(行列は正方でなければならないため)を取ります。フラット整数配列文字列表現を標準出力に出力します。








弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.