แม่พิมพ์เมือกสามารถนับได้!


10

พื้นหลัง

ราเมือกนั้นยอดเยี่ยม หากคุณวางพวกเขาไว้บนพื้นผิวที่มีแหล่งอาหารพวกเขาจะแพร่กระจายกิ่งก้านของพวกเขาเพื่อค้นหาอาหารจากนั้นพวกเขาจะสร้างเครือข่ายการเชื่อมโยงระหว่างแหล่งที่มา ในการท้าทายนี้คุณจะต้องจำลองราเมือกหาอาหาร ยิ่งไปกว่านั้นแม่พิมพ์นี้จะหยุดทันทีเมื่อพบว่าเพียงพอ

อินพุต

ปัจจัยการผลิตของคุณจะเป็นรายการLของ 2D Nจำนวนเต็มพิกัดในรูปแบบของภาษาพื้นเมืองของคุณและติดลบ รายการLรับประกันว่าจะไม่ซ้ำกัน แต่มันอาจไม่ถูกเรียงลำดับ อินพุตNอยู่ระหว่าง 0 ถึงความยาวLรวม

รายการLแสดงชุดของพิกัดสำหรับแหล่งอาหาร ตัวอย่างเช่นรายการ

[(0,0),(2,-1),(3,1),(0,4),(5,5)]

สามารถตีความได้ด้วยสายตาเป็น

     o
o


   o
o
  o

เอาท์พุต

เอาต์พุตของคุณเป็นรายการที่ไม่มีค่าซ้ำกันKของพิกัดจำนวนเต็ม 2D ในรูปแบบเดียวกับอินพุต มันหมายถึงเครือข่ายที่เกิดขึ้นจากราเมือกและมันจะต้องตอบสนองเงื่อนไขดังต่อไปนี้:

  • จุดตัดของLและมีขนาดตรงKN
  • ชุดKเชื่อมต่อเป็นส่วนย่อยของตารางจำนวนเต็ม (ผ่าน adogencies มุมฉากหรือทแยงมุม)
  • หากพิกัดใด ๆ ของKถูกลบออกมันจะไม่เป็นไปตามเงื่อนไขสองประการแรกอีกต่อไป

โปรดทราบว่าถ้าN = 0ผลลัพธ์จะต้องเป็นรายการที่ว่างเปล่า

ตัวอย่างของเอาต์พุตที่ยอมรับได้สำหรับรายการด้านบนLและN = 4จะเป็น

[(0,0),(0,1),(0,2),(0,3),(0,4),(1,4),(2,4),(3,3),(3,2),(3,1),(3,5),(4,5),(5,5)]

ซึ่งสามารถมองเห็นเป็น

   xxO
Oxx
x  x
x  x
x  O
O
  o

ซึ่งแต่ละคนOแสดงให้เห็นถึงการประสานงานทั้งในLและKและแต่ละคนxแสดงให้เห็นถึงการประสานงานในแต่ไม่ได้อยู่ในK Lเอาต์พุตอื่นยังยอมรับได้และ "tendrils" ไม่จำเป็นต้องสั้นที่สุด ตัวอย่างเช่นนี่เป็นโซลูชันที่ยอมรับได้:

   xxOxx
Oxx     x
  x    x
 x    x
x  o x
O   x
  Ox 

กฎระเบียบ

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

คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต

กรณีทดสอบ

Nโปรแกรมของคุณควรจะทำงานในรายการเหล่านี้สำหรับค่าบังคับทั้งหมด

[]
[(2,3)]
[(0,0),(1,0),(0,1),(1,1)]
[(0,0),(2,-1),(3,1),(0,4),(5,5)]
[(0,0),(1,0),(2,0),(3,0),(0,3),(1,3),(2,3),(3,3)]
[(0,0),(1,0),(2,0),(3,0),(0,3),(1,3),(2,3),(3,3),(0,1),(0,2),(3,1),(3,2),(8,1),(8,2),(-5,1),(-5,2)]
[(0,0),(20,0),(15,15),(-10,4),(-10,3),(0,-5),(7,6),(7,7),(8,8),(9,8),(10,-2),(-1,12),(-3,10)]
[(0,0),(1,0),(2,0),(3,0),(5,0),(6,0),(7,0),(0,9),(1,9),(2,9),(3,8),(4,9),(5,10),(6,10),(7,9),(3,3),(4,4),(5,5)]

มองเห็น:

===
o
===
oo
oo
===
     o
o     


   o  
o     
  o   
===
oooo


oooo
===
     oooo     
o    o  o    o
o    o  o    o
     oooo     
===
                         o     


         o                     

       o                       

                  oo           
                 o             
                 o             

o                              
o                              


          o                   o

                    o          


          o                    
===
     oo 
ooo o  o
   o    


     o  
    o   
   o    


oooo ooo

คำตอบ:


3

CJam, 77 95 ไบต์

ฉันคิดว่านี่สามารถเล่นกอล์ฟได้มากกว่านี้ แต่นี่จะไป:

q~$<_{{:X;]{[X\]z::-~mhW*}$~:Y{_)Y1{_@=X@=}:B~-g-{+__X=!\}:C~1B=!&}g{_(Y0B-g-\C0B=!&}g}*]_&}L?p

N <Array of coordinate array>การป้อนข้อมูลไปเช่น ตัวอย่างเช่น:

4 [[0 0] [1 5] [2 1] [0 3] [5 0] [5 5]]

เอาท์พุท:

[[0 5] [1 5] [0 4] [0 3] [0 0] [0 2] [0 1] [1 1] [2 1]]

อัลกอริทึม :

อัลกอริทึมค่อนข้างตรงไปตรงมาและไปเช่น:

  • เรียงลำดับอาร์เรย์พิกัดอินพุต สิ่งนี้ทำให้พิกัดเรียงลำดับตามแถวแล้วตามด้วยคอลัมน์
  • ตอนนี้เราเลือกNคะแนนแรก
  • ตอนนี้เราลดNจุดเหล่านี้ ปลายทางคือจุดสุดท้ายและต้นทางคือจุดปิดไปยังจุดสุดท้าย
  • จากนั้นเราเริ่มต้นด้วยจุดบนซ้ายสุดเดินไปทางขวา (หรือซ้าย) จนถึงจุดบนหรือเหนือจุดถัดไป
  • จากนั้นเราเดินลงไปจนถึงจุดต่อไป
  • รับประกันได้ว่าจะไม่มีจุดเปิดทิ้งไว้ที่จุดด้านบนในแถวเดียวกัน สิ่งนี้ทำให้มั่นใจได้ว่าเราจะไม่แตะต้องจุดอื่นใดที่เลือกNไว้ การเลือกจุดปิดยังช่วยให้มั่นใจได้ว่ากฎข้อที่สองถือเป็นจริง

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

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