ค้นหา Fenceposts


11

พื้นหลัง

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

อินพุต

การป้อนข้อมูลของคุณเป็นตารางสี่เหลี่ยมของตัวละคร|-#ซึ่งเป็นตัวแทนของส่วนเสารั้วสองประเภทและเศษหินหรืออิฐ เสารั้วได้รับบาดเจ็บสาหัสจากการระเบิดและบางส่วนก็ถูกหลอมรวมเข้าด้วยกันด้วยความร้อน เรากำหนดเสารั้วผู้สมัครให้เป็นรูปแบบแนวนอนที่เริ่มต้นและสิ้นสุด|และมีอย่างน้อยหนึ่ง-s ระหว่างพวกเขา (เช่น|-|หรือ|---|ไม่ แต่||) หรือรูปแบบแนวตั้งที่เริ่มต้นและสิ้นสุดใน-และมีอย่างน้อยหนึ่ง|s ระหว่างพวกเขา เสารั้วผู้สมัครในแนวนอนหมุน 90 องศา) fencepost ที่เกิดขึ้นจริงเป็น fencepost ผู้สมัครที่ไม่ได้มีส่วนร่วมใด ๆ ของส่วนของตนกับ fencepost ผู้สมัครอื่น

เอาท์พุต

ผลลัพธ์ของคุณคือจำนวนเสารั้วที่เกิดขึ้นจริงในตารางอินพุต

ตัวอย่าง

พิจารณากริดอินพุต

|#|-|#|##
#||--|||#
###|#|--#
###-||--|
-#-|#-|#-
#---#-#-|
#-#-|#--|

ตารางนี้มีผู้สมัคร 5 คน แต่มีเพียง 2 คนเท่านั้นที่เป็นเสารั้วจริง (แสดงเป็นตัวหนา) 2ดังนั้นการส่งออกที่ถูกต้องคือ

กฎระเบียบ

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

กรณีทดสอบเพิ่มเติม

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

##--
||##
-#|-
|#|#

เอาต์พุต: 0(0 เสารั้วผู้สมัคร)

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

-##|-##--
#|#-|#||-
--|-#|#||
##||||-##
||#|--|-|
-#|-#--|#
|####|#-#

เอาต์พุต: 0(5 เสารั้วผู้สมัคร)

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

#|--|---|-|#
####|##--||-
-|-##||#|---
-#|#-|-#-|||
#|-##--###|-
---#-||-#-##
#|---|###|-#
-|---#-#|#|#
|#--|####-|-

เอาต์พุต: 4(8 เสารั้วผู้สมัคร)

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

-|-||---##|#
---|######-#
####-##|#--|
|||##|#-||||
####-#-||-#|
---#--|#-#--
-|#-####-##-
#||-|-|-###|
|-##||-||-#-

เอาท์พุท: 5(7 ผู้สมัครรั้วเสา)

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

|#-|#|#-###|#-#
----#####|#----
|#--#-##-#|##-|
|#-|#-|--##||--
||#-#---##|||##
#|#-|||-#-#--||
--#|-||#|--|#|#
-#-|###||-#--#|
-#||-|#-##||##|
|--|-|||-##|-#|

ผลลัพธ์: 4(9 เสารั้วผู้สมัคร)

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

||-|-|-##-#-#-|#--#-
-##|-#|-#-##-|#|--|-
||#---###||-|#|##|-#
#||-#-#-|---|#||#|##
-#-###-##-|-#-|-#||#
##-#--#||-----||-|##
-|--#-#-#|---#-#|#-#
###|-|#-#|-|###|#-|#
#||#-#|--|-||#------
||##|-||#-|--#|#-#-#
|#-|-#-|-|--##-#|||#
-|#--#||##---##|-##-
#|-|-|-||-||#-#-|##-
|-#|##|-|#|#|--||#--

เอาต์พุต: 9(30 เสารั้วผู้สมัคร)


ดังนั้นช่วงเวลาใน|--...--|wildcard ของรูปแบบคืออะไร นั่นหมายความว่ารั้วแนวนอนต้องมียัติภังค์อย่างน้อย 5 ตัวหรือไม่ ฉันสับสนเล็กน้อยจากสัญกรณ์
BMac

@BMac พวกเขาควรจะเป็นจุดไข่ปลาซึ่งหมายความว่ายัติภังค์บางส่วนจะถูกละเว้น ฉันยอมรับว่ามันไม่ใช่เครื่องหมายที่ชัดเจน ให้ฉันคิดถึงบางสิ่งที่คลุมเครือน้อยกว่า
Zgarb

ถ้าเราเขียนฟังก์ชั่นมันอาจจะใช้อาร์กิวเมนต์อาเรย์สองมิติเป็นอินพุตเช่น [[-,|,-],[#,#,-],[-,-,|]]?
blutorange

@ blutorange ไม่ในความท้าทายนี้จะต้องเป็นสตริงเดียว
Zgarb

คำตอบ:


3

Ruby, 266 268ไบต์

เพื่อเริ่มต้นนี้ ทำให้การใช้ความจริงที่ว่าตัวแปรชี้ไปที่วัตถุ (สตริง 1-char สำหรับองค์ประกอบของอาร์เรย์ 2D แต่ละ) เพื่อกำจัดผู้สมัครที่ทับซ้อนกัน

เช่น. หากคุณดำเนินการ a="s";b=aทั้งคู่aและbชี้ไปที่สตริงเดียวกัน "test"=="test"ผลตอบแทนจริง แต่"test".equal?("test")กลับเท็จเพราะเราได้สร้างวัตถุ String ที่แตกต่างกันสอง

->d{c=->d,f,v,u{i=0
r=[]
d.map{|y|j=0
e=[]
y.map{|x|f[j]||=[]
f[j][i]=x
x==v ?e[1]?r<<e+[x]&&e=[x]:e[0]?e=[x]:e<<x :x==u&&e[0]?e<<x :e=[]
j+=1}
i+=1}
r}
y=c[d.split.map(&:chars),f=[],?|,?-]+c[f,[],?-,?|]
y.count{|x|y.all?{|q|x.equal?(q)||!(q+x).uniq!(&:object_id)}}}

กรณีทดสอบบนideone


1
คุณสามารถใช้mapแทนeach
Cristian Lupascu

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