Giảm cân bằng tối thiểu


11

Chủ đề liên quan.

Mục tiêu: Cho ma trận các số nguyên dương , xuất ra ma trận đối xứng nhỏ nhất chứa M (ma trận này cũng có thể chứa các số nguyên không dương).MM

Một ma trận đối xứng là một ma trận vuông có đối xứng quay theo thứ tự 2, tức là nó vẫn giữ nguyên ma trận sau khi xoay hai lần. Ví dụ, một ma trận đối xứng có phần tử trên cùng bên trái giống như phần dưới cùng bên phải và phần tử phía trên trung tâm giống như phần tử bên dưới trung tâm. Một hình ảnh hữu ích có thể được tìm thấy ở đây .

Chính thức hơn, được đưa ra một ma trận , tạo ra một ma trận vuông NN là centrosymmetric và M N , và không có ma trận vuông khác K đến nỗi mờ K < mờ N .MNNMNKdimK<dimN

là một tập hợp con của B (ký hiệu: Một B ) nếu và chỉ nếu mỗi giá trị A i , j xuất hiện ở chỉ số B i + i ' , j + j ' đối với một số cặp số nguyên ( i ' , j ' ) .ABABAi,jBi+i,j+j(i,j)

Lưu ý : một số ma trận có nhiều giải pháp (ví dụ: [[3,3],[1,2]]được giải dưới dạng [[2,1,0],[3,3,3],[0,1,2]]hoặc [[3,3,3],[1,2,1],[3,3,3]]); bạn phải xuất ít nhất một trong các giải pháp hợp lệ.

Các trường hợp thử nghiệm

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

Tại sao ma trận Centrosymmetric phải là hình vuông?
Đăng Rock Garf Hunter

@WW theo nghĩa chung, tôi không cho rằng nó phải như vậy. Tuy nhiên, đối với câu hỏi này, chúng phải là hình vuông theo định nghĩa
Conor O'Brien

Tôi đã tự hỏi tại sao bạn lại đưa ra lựa chọn đó
Post Rock Garf Hunter

2
@WW đó là một sự đơn giản hóa mà tôi nghĩ là hữu ích cho sự rõ ràng
Conor O'Brien

Câu trả lời:


8

Brachylog , 12 byte

ṁ↔ᵐ↔?aaᵐ.&≜∧

Hãy thử trực tuyến!

Trái với hầu hết các câu trả lời của Brachylog, điều này đưa đầu vào thông qua biến Đầu ra .và xuất kết quả thông qua biến Đầu vào ?(khó hiểu, tôi biết).

Giải trình

ṁ              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 byte, cung cấp cho tất cả các ma trận hợp lệ

Về mặt kỹ thuật, chương trình này cũng hoạt động:

ṁ↔ᵐ↔?aaᵐ

Nhưng điều này sẽ để lại dưới dạng các biến mà các ô có thể nhận bất kỳ giá trị nào (chúng hiển thị dưới _XXXXXdạng tên biến Prolog bên trong). Về mặt kỹ thuật, điều này thậm chí còn tốt hơn những gì được hỏi, nhưng tôi đoán đó không phải là những gì thử thách yêu cầu.


Tôi ước gì đã trì hoãn việc dán nhãn ...
Erik the Outgolfer

@EriktheOutgolfer Ghi nhãn tức thì vẫn hữu ích khi chúng ta cần liệt kê mọi thứ, vì vậy lý tưởng nhất là chúng ta sẽ cần hai vị từ khác nhau
Fatalize

4

JavaScript (ES6), 192 180 177 byte

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

Hãy thử trực tuyến!

Thuật toán

w=0

  • Mw+1
  • (X,Y)m

    Thí dụ:

w=2,(X,Y)=(0,1),m=(4,5,41,2,3)M=(0,0,04,5,41,2,3)
  • Chúng tôi kiểm tra xem chúng tôi có thể hoàn thành ma trận sao cho nó đối xứng không.

    Thí dụ:

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


1

Python 2 , 242 227 226 byte

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

Hãy thử trực tuyến!


Đã lưu:

  • -1 byte, nhờ Jonathan Frech

n=[W*[0]for _ in r(W)]có thể n=eval(`[W*[0]]*W`).
Jonathan Frech


1

Clojure 254 byte

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

Jinkies, Scoob

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.