最小对称


11

局部相关。

目标:给定一个正整数的矩阵,输出包含的最小中心对称矩阵(该矩阵也可能包含非正整数)。MMM

中心对称矩阵是具有2阶旋转对称性的正方形矩阵,即,将其旋转两次后仍保持相同的矩阵。例如,中心对称矩阵的左上角元素与右下角元素相同,中心上方的元素与中心下方的元素相同。在这里可以找到有用的可视化。

更正式地说,给定的矩阵,产生一个方阵使得是中心对称的和,并且不存在其他方阵使得。Ñ Ñ 中号Ñ ķ 暗淡ķ < 暗淡ÑMNNMNKdimK<dimN

Ĵ+ 'Ĵ + Ĵ 'Ĵ 'A当且仅当每个值出现在索引,是的子集(符号:)。。BABAi,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]]);您必须输出至少一种有效解决方案。

测试用例

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

为什么中心对称矩阵必须是正方形的?
Ad Hoc Garf Hunter

从一般意义上来说,@ WW并不是必须的。对于这个问题,但是,他们必须是方形的定义
康纳尔奥布莱恩

我想知道为什么您要做出这样的选择
特设Garf Hunter,

2
@WW这是一种简化,我认为对简化很有用
Conor O'Brien

Answers:


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变量名称)。因此,从技术上讲,这甚至比要求的要好,但我想这不是挑战所要求的。


我希望延迟标签的时间……
暴民埃里克(Erik the Outgolfer)'18年

@EriktheOutgolfer当我们需要枚举事物时,即时标签仍然有用,因此理想情况下我们需要两个不同的谓词……
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谢谢:)
TF

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

可可布

在线尝试!

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.