เชื่อมต่อจุด


13

กำหนดชุดของoจุดที่เป็นตัวแทนเชื่อมต่อพวกเขาในแนวตั้งหรือแนวนอน

ตัวอย่าง

การป้อนข้อมูล:

o   o

o

เอาท์พุท:

o---o
|
|
o

การป้อนข้อมูล:

o   o    o

    o

เอาท์พุท:

o---o----o
    |
    o

สเป็ค

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

  • จะมีเพียงoช่องว่างและขึ้นบรรทัดใหม่ในอินพุต

  • จะมีจุดเชื่อมต่ออยู่เสมอ
  • จะไม่มีสองos ติดกันโดยตรง
  • จุดควรเชื่อมต่อด้วย|และ-สำหรับการเชื่อมต่อแนวตั้งและแนวนอนตามลำดับ
  • ไม่มีการเชื่อมต่อแบบจุดจะซ้อนทับกัน

คุณต้องเชื่อมต่อทุกคู่ถูกกฎหมายหรือเพียงแค่เชื่อมต่อจุดเข้ากับ 1 องค์ประกอบ? จุดสามารถเชื่อมต่อกับ 1 องค์ประกอบได้เสมอหรือไม่? "จะมีจุดเชื่อมต่ออย่างน้อยสองจุดเสมอ" จะสมเหตุสมผลกว่านี้ถ้าฉันเข้าใจถูกต้อง กรณีทดสอบสองสามสามารถล้างเหล่านี้ด้วย
randomra

@ สุ่มคุณไม่ได้เชื่อมต่อทุกคู่ที่ถูกกฎหมายพวกเขาจะไม่ได้เป็น 1 องค์ประกอบเสมอ
Downgoat

@Downgoat แล้วจะมีกรณีทดสอบอีกมากมายที่ครอบคลุมส่วนประกอบที่ไม่ได้เชื่อมต่อและลูปภายในส่วนประกอบเดียว? ;)
Martin Ender

คำตอบ:


2

Japt 33 33ไบต์

Uy eV="o +o"_rS'|} y eV,_rS'-

ทดสอบออนไลน์!

มันทำงานอย่างไร

Uy         // Transpose rows with columns in the input.
eV="o +o"  // Set V to the regex-string "o +o", and recursively replace each match Z with:
_rS'|}     //  Z with spaces replaced with "|"s.
y          // Transpose again.
eV,        // Recursively replace matches Z of V with:
_rS'-      //  Z with spaces replaced with "-"s.

2

Ruby, 137 133 ไบต์

->s{eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'}

นี่มันช่างน่ากลัวจริงๆ ยังคงพยายามเล่นกอล์ฟ

กรุณาใส่สี่เหลี่ยมผืนผ้าเบาะ

บรรทัดใหม่สำหรับ "การอ่านได้":

eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}
.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'

4
เอาล่ะฉันจะใส่เป็นรูปสี่เหลี่ยมผืนผ้าเบาะ แต่เพียงเพราะคุณถามอย่างดี
Alex A.

คุณสามารถใช้\bแทนได้(?=o)หรือไม่?
Justin

@Justin ไม่ทำงาน : /
Doorknob

2

เรติน่า , 80 ไบต์

T` `-`o.+o
Tm` `|`(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*) (?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

อินพุตต้องมีการเสริมเบาะ

ลองออนไลน์!

คำอธิบาย

ขั้นตอนแรกนั้นค่อนข้างเรียบง่ายเพียงแค่เปลี่ยนช่องว่างทั้งหมดให้เป็นยัติภังค์ซึ่งพบระหว่างสองos ในบรรทัดเดียวกัน

ขั้นตอนที่สองครอบคลุม|s นี่คือ trickier บิตและต้องใช้กลุ่มสมดุล ลักษณะที่ปรากฏ

(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*)

ตรวจสอบว่ามีoก่อนหน้านี้ในคอลัมน์เดียวกัน จำไว้ว่าควรดูจากด้านซ้ายไปซ้าย (.)*เก็บตำแหน่งแนวนอนของการแข่งขัน\D*¶ตรวจสอบข้ามไปที่ตัวละครใด ๆ ในบรรทัดก่อนหน้าการoจับคู่อย่างแท้จริง จากนั้น(?(1)!)^(?<-1>.)*ให้แน่ใจว่าตำแหน่งแนวนอนของที่oเหมือนกัน

หัวเรือ

(?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

ทำสิ่งเดียวกันในทิศทางตรงกันข้าม

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