ส่วนประกอบที่เชื่อมต่อ 3x3


9

ความท้าทาย

พิจารณากริดคิง 3x3 ดังที่แสดงในกราฟิก ASCII ต่อไปนี้:

A--B--C
|\/|\/|
|/\|/\|
D--E--F
|\/|\/|
|/\|/\|
G--H--I

คุณจะได้รับรายการอินพุตจำนวนเต็ม -9 ที่เป็นตัวแทนของการติดฉลากของโหนด ตัวอย่างเช่นอินพุต[0,1,1,2,1,0,5,5,1]แสดงถึงการติดฉลากต่อไปนี้:

0--1--1
|\/|\/|
|/\|/\|
2--1--0
|\/|\/|
|/\|/\|
5--5--1

เอาต์พุตของคุณคือชุดของจำนวนเต็มในอินพุตที่เชื่อมโยงกับชุดโหนด อย่างชัดเจนยิ่งขึ้นเอาต์พุตควรมีจำนวนเต็มnจากอินพุตถ้าหากnเชื่อมต่อชุดของโหนดที่มีเลเบลแล้วเท่านั้น ในตัวอย่างนี้เอาต์พุตที่ยอมรับได้จะเป็น[1,2,5]เพราะทั้งสอง0ไม่ได้เชื่อมต่อ จำนวนไบต์ต่ำสุดชนะ

กฎรายละเอียด

  • คุณสามารถเลือกการสั่งซื้อคงที่สำหรับโหนดในรายการอินพุตของคุณและคุณควรระบุสิ่งนี้ในคำตอบของคุณ ใน EFBDHCAGI [1,0,1,2,5,1,0,5,1]การสั่งซื้อการติดฉลากที่ข้างต้นจะได้รับเป็น
  • คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น ในกรณีหลังเอาท์พุทสามารถเป็นชุดของจำนวนเต็มถ้าภาษาของคุณสนับสนุนเหล่านั้น
  • รายการผลลัพธ์อาจมีรายการที่ซ้ำกัน แต่ความยาวของรายการต้องไม่เกิน 9
  • ช่องโหว่มาตรฐานไม่ได้รับอนุญาต

กรณีทดสอบ

ตัวเลขเหล่านี้มีตัวเลขหลักเดียวที่สอดคล้องกับตาราง ปรับให้เข้ากับคำสั่งที่คุณเลือก

011
210 => 1 2 5
551

010
202 => 0 2
221

110
123 => 0 2 3
221

111
111 => 1
111

111
141 => 1 4
111

คำตอบ:


4

J, 54 ไบต์

#~3 :'0<*/,+/ .*/^:8~y#|:y#,/,"1/({0&,:)3 3$#:13'"1@e.

ABCDEFGHIฟังก์ชั่นการถ่ายรายการในการสั่งซื้อ


รับถ้อยคำเมทริกซ์ของกราฟของการสั่งซื้อnกราฟมีการเชื่อมต่อและถ้าหากทุกรายการของ (คน+ ฉัน ) nเป็นเลขที่ฉันเป็นn × nตัวตนของเมทริกซ์

เราเริ่มต้นด้วยเมทริกซ์ adjacency-plus-identity ของตารางกษัตริย์ 3 × 3 (ตามลำดับABCDEFGHI) คือ:

1 1 0 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0
0 1 1 0 1 1 0 0 0
1 1 0 1 1 0 1 1 0
1 1 1 1 1 1 1 1 1
0 1 1 0 1 1 0 1 1
0 0 0 1 1 0 1 1 0
0 0 0 1 1 1 1 1 1
0 0 0 0 1 1 0 1 1

. สำหรับแต่ละป้ายเราเลือกแถวและคอลัมน์ที่สอดคล้องกับโหนดของฉลากl lสิ่งนี้ทำให้เมทริกซ์ adjacency-plus-identity ของ subgraph ของlโหนดที่มีเลเบล จากนั้นเราจะใช้เมทริกซ์นี้เพื่อทดสอบว่ากราฟย่อยเชื่อมต่อกันหรือไม่ดังที่อธิบายไว้ข้างต้น

เราสร้างเมทริกซ์ด้านบนโดยสังเกตว่าถ้าเราปล่อย

    0 0 0
Z = 0 0 0
    0 0 0

และ

    1 1 0
O = 1 1 1
    0 1 1

จากนั้นเมทริกซ์สามารถมองเห็นได้เป็นเมทริกซ์บล็อก 3 × 3

O O Z
O O O
Z O O

ซึ่งมีรูปแบบเดียวกับO! Oผลิตโดยการทำซ้ำ1 1 0 1ในบล็อก 3 × 3


นี่เป็นทางออกที่น่าทึ่ง! ในการเข้าใจถึงปัญหาย้อนหลังการฝึกหัดอาจเป็นวิธีที่สั้นที่สุดในการทำเช่นนี้โดยเฉพาะอย่างยิ่งกับภาษาเช่น J.
Zgarb

3

CJam, 56 67 ไบต์

q~4/~\@{a1$2<-\(+}%)_)-{_(+{\(a@-\}}A?%+:+[$_(d+1$)c\+@]zLf|2f>:+|`

คำสั่งซื้อ: CIGABFHDE.

อินพุตตัวอย่าง:

[1 1 5 0 1 0 5 2 1]

เอาท์พุท:

[1 2 5]

ก่อนอื่นจะลบตัวเลขที่มุมซึ่งเหมือนกับหมายเลขที่เชื่อมต่อที่ด้านข้าง จากนั้นมันจะลบตัวเลขที่อยู่ด้านข้างซึ่งเหมือนกับตัวเลขที่อยู่ข้าง ๆ ในที่สุดก็ลบตัวเลขทั้งหมดที่เกิดขึ้นสองครั้งหรือมากกว่าและเพิ่มหมายเลขกลาง


2

CJam, 90 ไบต์

นี้ขึ้นอยู่กับการเติมน้ำท่วมซ้ำ ๆ อธิบายไว้ที่นี่และสามารถเล่นกอล์ฟได้มาก!

q~:Q{:IQ3/S*Sca5*+:T;G,G*{:AT=1$={[WXZ5 4_~_)_)]Af+Tf=AT='#a+&,g{TA'#t:T;}*}*}%;aT\/,3<},p

ต้องการอินพุตตามลำดับABCDEFGHดังนี้:

[0 1 1 2 1 0 5 5 1]

และเอาท์พุทเป็นโหนดเชื่อมต่อ:

[1 1 2 1 5 5 1]

คำอธิบายสั้น ๆ

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

คำอธิบายแบบเต็มเพื่อติดตาม

ลองออนไลน์ได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.