最小中心対称化


11

局所的に関連。

目的:正の整数の行列を考える、出力最小中心対称行列含まM(このマトリクスは同様に、非正の整数を含んでいてもよいです)。MM

中心対称行列は、2次の回転対称性を持つ正方行列です。つまり、2回回転しても同じ行列のままです。たとえば、中心対称マトリックスの左上要素は右下要素と同じであり、中心より上の要素は中心より下の要素と同じです。便利な視覚化はここにあります

より正式に、行列所与、正方行列を生成するNようにNが中心対称であり、M N、および他の正方行列が存在しないKようDIM K < DIM NはMNNMNKdimK<dimN

サブセットである B(表記: A B)であれば、各値の場合にのみ、 A iはj個のインデックスに現れる Bはiは+ I 'J + J '整数のいくつかのペアのためのI 'J 'ABABAi,jBi+i,j+j(i,j)

:一部のマトリックスには複数のソリューションがあります(または[[3,3],[1,2]]として解決される[[2,1,0],[3,3,3],[0,1,2]]など[[3,3,3],[1,2,1],[3,3,3]])。有効なソリューションの少なくとも1つを出力する必要があります。

テストケース

input
example output

[[1, 2, 3],
 [4, 5, 6]]
[[1, 2, 3, 0],
 [4, 5, 6, 0],
 [0, 6, 5, 4],
 [0, 3, 2, 1]]

[[9]]
[[9]]

[[9, 10]]
[[9, 10],
 [10, 9]]

[[100, 200, 300]]
[[100, 200, 300],
 [  0,   0,   0],
 [300, 200, 100]]

[[1, 2, 3],
 [4, 5, 4]]
[[1, 2, 3],
 [4, 5, 4]
 [3, 2, 1]]

[[1, 2, 3],
 [5, 6, 5],
 [3, 2, 1]]
[[1, 2, 3],
 [5, 6, 5],
 [3, 2, 1]]

[[4, 5, 4],
 [1, 2, 3]]
[[3, 2, 1],
 [4, 5, 4],
 [1, 2, 3]]

[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 1]]
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1],
 [9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

中心対称行列が正方でなければならないのはなぜですか?
ポストロックガーフハンター

@WWは一般的な意味で、そうである必要はないと思います。ただし、この質問では、定義により正方形である必要があります
コナーオブライエン

なぜあなたがその選択をしたのかと思いまして
ポストロックガーフハンター

2
@WWわかりやすくするために役立つと思った簡略化
コナーオブライエン

回答:


8

Brachylog、12バイト

ṁ↔ᵐ↔?aaᵐ.&≜∧

オンラインでお試しください!

ほとんどのBrachylogの答えとは異なり、これはOutput変数を介して入力を取得.し、Input変数を介して結果を出力します?(わかりにくい)。

説明

ṁ              We expect a square matrix
 ↔ᵐ↔?          When we reverse the rows and then the matrix, we get the initial matrix back
    ?a         Take an adfix (prefix or suffix) of that square matrix
      aᵐ       Take an adfix of each row of that adfix matrix
        .      It must be the input matrix
         &≜    Assign values to cells which are still variables (will assign 0)
           ∧   (disable implicit unification between the input and the output)

8バイト、すべての有効な行列を提供します

技術的には、このプログラムも機能します。

ṁ↔ᵐ↔?aaᵐ

しかし、これにより、任意の値を取ることができるセルが変数として残されます(_XXXXX内部Prolog変数名であるとして表示されます)。技術的には、これは求められているものよりもさらに優れていますが、チャレンジが求めるものではないと思います。


私の願いは、ラベル...遅れた
エリックOutgolfer

@EriktheOutgolferインスタントラベリングは、物事を列挙する必要がある場合でも有用であるため、理想的には2つの異なる述語が必要になります…
Fatalize

4

JavaScript(ES6)、192 180 177バイト

f=(m,v=[w=0],S=c=>v.some(c))=>S(Y=>S(X=>!m[w+1-Y]&!m[0][w+1-X]&!S(y=>S(x=>(k=(m[y-Y]||0)[x-X],g=y=>((r=a[y]=a[y]||[])[x]=r[x]||k|0)-k)(y)|g(w-y,x=w-x)),a=[])))?a:f(m,[...v,++w])

オンラインでお試しください!

アルゴリズム

w=0

  • Mw+1
  • (X,Y)m

    例:

w=2,(X,Y)=(0,1),m=(4,5,41,2,3)M=(0,0,04,5,41,2,3)
  • 中心対称になるように行列を完成できるかどうかをテストします。

    例:

M=(3,2,14,5,41,2,3)
  • w


1

Pythonの2242の 227 226バイト

r=range
def f(m):
 w,h=len(m),len(m[0]);W=max(w,h)
 while 1:
	for x in r(1+W-w):
	 for y in r(1+W-h):
		n=n=eval(`[W*[0]]*W`);exec"for i in r(w):n[i+x][y:y+h]=m[i]\nN=n;n=[l[::-1]for l in n[::-1]]\n"*2
		if n==N:return n
	W+=1

オンラインでお試しください!


保存済み:

  • -1バイト、Jonathan Frechのおかげ

n=[W*[0]for _ in r(W)]することができますn=eval(`[W*[0]]*W`)
ジョナサンフレッチ

@JonathanFrechありがとう:)
TFeld

1

Clojure 254バイト

(defn e[l m](let[a map v reverse r repeat t concat c count f #(v(a v %))h(fn[x](t(a #(t %(r(- l(c(first x)))0))x)(r(- l(c m))(r l 0))))k(fn[x](a(fn[v w](a #(if(= %2 0)%1 %2)v w))x(f x)))n(k(h m))o(k(h(f m)))z #(= %(f %))](if(z n)n(if(z o)o(e(inc l)m)))))

ジンキーズ、スクーブ

オンラインでお試しください!

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