Мінімальна центросиметризація


11

Актуально пов'язані.

Мета: Давши матрицю натуральних чисел М , виведіть найменшу центросиметричну матрицю, яка містить (ця матриця може містити і непозитивні цілі числа).M

Центросиметрична матриця - це квадратна матриця з обертовою симетрією порядку 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 в загальному сенсі, я не думаю, що це має бути. Однак, для цього питання вони повинні бути квадратними за визначенням
Conor O'Brien

Мені було цікаво, чому ви зробили такий вибір
Ad Hoc Garf Hunter

2
@WW це було спрощення, яке я вважав корисним для ясності
Conor O'Brien

Відповіді:


8

Брахілог , 12 байт

ṁ↔ᵐ↔?aaᵐ.&≜∧

Спробуйте в Інтернеті!

На відміну від більшості відповідей Брахілогів, це приймає вхід через змінну 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). Тож технічно це навіть краще, ніж те, що просять, але я думаю, що це не те, що вимагає виклик.


Я б хотів, щоб відклали маркування ...
Ерік Атголфер

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

Спробуйте в Інтернеті!

Алгоритм

ш=0

  • Мш+1
  • (Х,Y)м

    Приклад:

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

Пітон 2 , 242 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 байт, завдяки Джонатану Фреху

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

Jinkies, Scoob

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.