Tìm hàng rào


11

Lý lịch

Một quả bom nguyên tử đã phát nổ gần nhà máy hàng rào! Vì các hàng rào rất cần thiết cho sự sống còn của nền văn minh của chúng ta, chúng ta phải giải cứu càng nhiều càng tốt. Chúng tôi đang gửi robot chống bức xạ để tìm kiếm khu vực và nhiệm vụ của bạn là lập trình tầm nhìn nhân tạo của chúng.

Đầu vào

Đầu vào của bạn là một lưới hình chữ nhật của các ký tự |-#, đại diện cho hai loại phần hàng rào và gạch vụn, được đưa ra dưới dạng một chuỗi phân cách dòng mới. Các hàng rào đã bị tàn phá khủng khiếp bởi vụ nổ, và một số thậm chí đã được hợp nhất bởi sức nóng. Chúng tôi xác định một hàng rào ứng cử viên là một mẫu nằm ngang bắt đầu và kết thúc |và có một hoặc nhiều -s giữa chúng (thích |-|hoặc |---|không ||) hoặc một mẫu dọc bắt đầu và kết thúc -và có một hoặc nhiều |s giữa chúng (về cơ bản một hàng rào ứng cử viên ngang xoay 90 độ). Một hàng rào thực tế là một hàng rào ứng cử viên không chia sẻ bất kỳ phần nào của nó với một hàng rào ứng cử viên khác.

Đầu ra

Đầu ra của bạn là số lượng hàng rào thực tế trong lưới đầu vào.

Thí dụ

Xem xét lưới đầu vào

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

Có 5 hàng rào ứng cử viên trong lưới này, nhưng chỉ có 2 trong số đó là hàng rào thực tế (được in đậm). Do đó, đầu ra chính xác là 2.

Quy tắc

Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.

Các trường hợp kiểm tra bổ sung

Đầu vào:

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

Đầu ra: 0(0 hàng rào ứng cử viên)

Đầu vào:

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

Đầu ra: 0(5 hàng rào ứng cử viên)

Đầu vào:

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

Đầu ra: 4(8 hàng rào ứng cử viên)

Đầu vào:

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

Đầu ra: 5(7 hàng rào ứng cử viên)

Đầu vào:

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

Đầu ra: 4(9 hàng rào ứng cử viên)

Đầu vào:

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

Đầu ra: 9(30 hàng rào ứng cử viên)


Vì vậy, các giai đoạn trong các |--...--|ký tự đại diện mẫu? Điều đó có nghĩa là hàng rào ngang phải có ít nhất 5 dấu gạch ngang? Tôi hơi bối rối bởi ký hiệu.
BMac

@BMac Chúng được coi là dấu chấm lửng, có nghĩa là một số dấu gạch nối bị bỏ qua. Tôi đồng ý rằng đó không phải là ký hiệu rõ ràng nhất. Hãy để tôi nghĩ về một cái gì đó ít mơ hồ.
Zgarb

Nếu chúng ta viết một hàm, nó có thể lấy một đối số mảng 2D làm đầu vào, vd. [[-,|,-],[#,#,-],[-,-,|]]?
blutorange

@blutorange Không, trong thử thách này, nó cần phải là một chuỗi đơn.
Zgarb

Câu trả lời:


3

Ruby, 266 268 byte

Để bắt đầu điều này. Làm cho việc sử dụng thực tế là các biến trỏ đến các đối tượng (chuỗi 1 char cho mỗi phần tử của mảng 2D) để loại bỏ các ứng cử viên chồng chéo.

Ví dụ. nếu bạn thực thi a="s";b=a, cả hai abtrỏ đến cùng một chuỗi. "test"=="test"trả về true, nhưng "test".equal?("test")trả về false, vì chúng ta đã tạo hai đối tượng String khác nhau.

->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)}}}

Các trường hợp thử nghiệm trên ideone .


1
bạn có thể sử dụng mapthay vìeach
Cristian Lupascu

@ w0lf cảm ơn, áp dụng. Điều thú vị là, tôi nên biết rằng ...
blutorange
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.