นี่เป็นเมทริกซ์ Weyr หรือไม่?


18

มีประเภทของเป็นn × nเมทริกซ์Wเรียกว่าพื้นฐานรูปแบบที่ยอมรับ Weyr เมทริกซ์ดังกล่าวอธิบายโดยบล็อกและมีคุณสมบัติดังต่อไปนี้โดยใช้แผนภาพอ้างอิงต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

  • บล็อกเส้นทแยงมุมหลักW iiมีn ฉัน × n ฉันเมทริกซ์ของแบบฟอร์มλ ฉันn ฉันที่ฉันn ฉันเป็นn ฉัน × n ฉันเมทริกซ์เอกลักษณ์
  • n 1 ≥ n 2 ≥ ... ≥ n r
  • บล็อกซูเปอร์แปดเหลี่ยมแรกW k-1, kสำหรับk ∈ 2..rคือเมทริกซ์n k-1 × n kที่มีคอลัมน์เต็มในรูปแบบแถวลดแถวหรือมากกว่าเพียงแค่ใส่ฉันn kนั่งอยู่ด้านบนของn k-1 - n kศูนย์แถว
  • บล็อกอื่น ๆ ทั้งหมดคือ0เมทริกซ์

ตัวอย่างเช่น:

รูปแบบ Weyr

  • บล็อกเส้นทแยงมุมหลัก (สีเหลือง) เป็นเช่นนั้นว่าฉันคือ 4, 2, 2 และ 1
  • บล็อกรูปแปดเหลี่ยมแรกนั้นเป็นสีเขียว
  • โซนสีเทาประกอบด้วยทั้งหมดบล็อกอื่น ๆ ที่มีทั้งหมด0

สำหรับความท้าทายนี้เราจะถือว่าλ = 1

อินพุต

เมทริกซ์จตุรัสที่มี 0s และ 1s ในรูปแบบที่สะดวก

เอาท์พุต

เอาต์พุตหนึ่งในสองค่าที่แตกต่างกันไม่ว่าจะเป็นเมทริกซ์อินพุทคือ Weyr หรือไม่ Weyr

กฎระเบียบ

นี่คือรหัสกอล์ฟไบต์น้อยที่สุดในแต่ละภาษาชนะ ใช้กฎ / ช่องโหว่มาตรฐาน

กรณีทดสอบ

นำเสนอเป็นอาร์เรย์ของแถว

Weyr:

[[1]] 
[[1,1],[0,1]] 
[[1,0,1,0,0],[0,1,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,1,0,0],[0,0,0,0,1,0,0,1,0],[0,0,0,0,0,1,0,0,1],[0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
[[1,0,0,0,1,0,0,0,0],[0,1,0,0,0,1,0,0,0],[0,0,1,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]

Non-Weyr:

[[0]]
[[1,0],[1,1]]
[[1,0,0,1,0,0],[0,1,0,0,0,0],[0,0,1,0,0,1],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]
[[1,0,1,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]

2
นิยามของ weyr เมทริกซ์ของคุณไม่ชัดเจน เพื่อที่จะเข้าใจมันฉันต้องอ่านคำจำกัดความจากวิกิพีเดียก่อน (ซึ่งไม่ชัดเจนอย่างใดอย่างหนึ่ง) และถึงแม้ว่าคำจำกัดความของคุณค่อนข้างคลุมเครือและคลุมเครือ สำหรับหนึ่งฉันจะทำให้มันชัดเจนสิ่งที่n <sub> ฉัน </ sub>และสิ่งที่มันเป็นค่าเฉลี่ยจะทำอย่างไรขณะนี้ยังไม่ชัดเจนว่าเมทริกซ์เป็น Weyr ถ้าเช่นnมีอยู่และค่อนข้างจะดูเหมือนว่าพวกเขามีบาง คุณสมบัติของเมทริกซ์
ข้าวสาลีตัวช่วยสร้าง

ถูกต้องหรือไม่ที่เมทริกซ์เอกลักษณ์เป็น Weyr-matrix
Stewie Griffin

เมทริกซ์เอกลักษณ์เป็นเมทริกซ์ Weyr ที่มี r = 1 และ n_1 = n ดังนั้นใช่แม้ว่าจะเป็นคนเลว
S.Klumpers

2
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]กรณีทดสอบที่แนะนำ: ฉันคิดว่ามันผิดพลาด (แต่คำตอบของฉันไม่สามารถระบุได้)
Arnauld

คำจำกัดความที่คุณรวมไว้แนะนำให้คุณต้องการระบุเมทริกซ์ฝายพื้นฐานเท่านั้นและไม่ใช่เมทริกเมทริกทั่วไป นี่คือสิ่งที่คุณต้องการสำหรับความท้าทายนี้หรือไม่?
S.Klumpers

คำตอบ:



1

Python 2 , 270 ไบต์

lambda m,w=0:{w}&{0,len(m)}and I(m)or any(I([l[:i]for l in m[:i]])*I([l[i:j+i]for l in m[:j]])*(sum(sum(m[:i]+[l[:i]for l in m],[]))==2*i+j)and f([l[i:]for l in m[i:]],j)for i in range(w,len(m))for j in range(1,i+1))
I=lambda m:all(sum(l)==l[i]>0for i,l in enumerate(m))

ลองออนไลน์!

คำอธิบาย:

ตรวจสอบบล็อกซ้ำเพื่อระบุตัวตนและบล็อกที่มีลักษณะเป็นเหลี่ยม

I ตรวจสอบว่าเมทริกซ์เป็นเมทริกซ์เอกลักษณ์หรือไม่

I=lambda m:all(sum(l)==l[i]>0for i,l in enumerate(m))

สำหรับแต่ละบล็อกของอินพุตเมทริกซ์ฟังก์ชันจะตรวจสอบว่าเป็นข้อมูลเฉพาะตัวและมีบล็อกเมทริกซ์เอกลักษณ์อีกตัวเพื่อให้ถูกต้อง การวนซ้ำครั้งถัดไปจะดูที่บล็อกของขนาดนั้น

{w}&{0,len(m)}and I(m)                # if the while matrix is an identity matrix,
                                      # return true (but only the first time or last block)
or
any(
 I([l[:i]for l in m[:i]])                         # the current block is identity
 *I([l[i:j+i]for l in m[:j]])                     # and, the smaller block to the right is identity
 *(sum(sum(m[:i]+[l[:i]for l in m],[]))==2*i+j)   # and everything below and to the right (not the
                                                  # smaller block), are 0
 and f([l[i:]for l in m[i:]],j)                   # and the remaining matrix is alse Weyr(recursively)
 for i in range(w,len(m))             # for each block size i
 for j in range(1,i+1)                # for each smaller right block of size j
)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.