Latar Belakang
Sebuah bom atom meledak di dekat pabrik fencepost! Karena tiang pagar sangat penting untuk kelangsungan hidup peradaban kita, kita harus menyelamatkan sebanyak mungkin. Kami mengirim robot tahan radiasi untuk mencari di daerah itu, dan tugas Anda adalah memprogram penglihatan buatan mereka.
Memasukkan
Input Anda adalah kisi-kisi persegi karakter |-#
, mewakili dua jenis bagian fencepost dan puing-puing, diberikan sebagai string yang dibatasi garis baru. Fenceposts telah dilumpuhkan oleh ledakan, dan beberapa bahkan telah menyatu bersama oleh panas. Kami mendefinisikan kandidat fencepost menjadi pola horizontal yang dimulai dan berakhir |
dan memiliki satu atau lebih -
s di antara mereka (suka |-|
atau |---|
tidak ||
), atau pola vertikal yang dimulai dan berakhir -
dan memiliki satu atau lebih |
s di antara mereka (pada dasarnya kandidat horizontal fencepost diputar 90 derajat). Sebuah fencepost sebenarnya adalah fencepost calon yang tidak berbagi komponen dengan fencepost kandidat lain.
Keluaran
Output Anda adalah jumlah posting aktual di kisi input.
Contoh
Pertimbangkan kisi masukan
|#|-|#|##
#||--|||#
###|#|--#
###-||--|
-#-|#-|#-
#---#-#-|
#-#-|#--|
Ada 5 kandidat fencepost di kisi ini, tetapi hanya 2 dari mereka fencepost yang sebenarnya (ditunjukkan dalam huruf tebal). Dengan demikian output yang benar adalah 2
.
Aturan
Anda dapat menulis program lengkap atau fungsi. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Kasus uji tambahan
Memasukkan:
##--
||##
-#|-
|#|#
Keluaran: 0
(0 kandidat fencepost)
Memasukkan:
-##|-##--
#|#-|#||-
--|-#|#||
##||||-##
||#|--|-|
-#|-#--|#
|####|#-#
Output: 0
(5 kandidat fenceposts)
Memasukkan:
#|--|---|-|#
####|##--||-
-|-##||#|---
-#|#-|-#-|||
#|-##--###|-
---#-||-#-##
#|---|###|-#
-|---#-#|#|#
|#--|####-|-
Output: 4
(8 kandidat fenceposts)
Memasukkan:
-|-||---##|#
---|######-#
####-##|#--|
|||##|#-||||
####-#-||-#|
---#--|#-#--
-|#-####-##-
#||-|-|-###|
|-##||-||-#-
Output: 5
(7 kandidat fenceposts)
Memasukkan:
|#-|#|#-###|#-#
----#####|#----
|#--#-##-#|##-|
|#-|#-|--##||--
||#-#---##|||##
#|#-|||-#-#--||
--#|-||#|--|#|#
-#-|###||-#--#|
-#||-|#-##||##|
|--|-|||-##|-#|
Output: 4
(9 kandidat fenceposts)
Memasukkan:
||-|-|-##-#-#-|#--#-
-##|-#|-#-##-|#|--|-
||#---###||-|#|##|-#
#||-#-#-|---|#||#|##
-#-###-##-|-#-|-#||#
##-#--#||-----||-|##
-|--#-#-#|---#-#|#-#
###|-|#-#|-|###|#-|#
#||#-#|--|-||#------
||##|-||#-|--#|#-#-#
|#-|-#-|-|--##-#|||#
-|#--#||##---##|-##-
#|-|-|-||-||#-#-|##-
|-#|##|-|#|#|--||#--
Output: 9
(30 kandidat fenceposts)
|--...--|
wildcard pola? Apakah itu berarti pagar horizontal harus memiliki setidaknya 5 tanda hubung? Saya agak bingung dengan notasinya.[[-,|,-],[#,#,-],[-,-,|]]
?Jawaban:
Ruby, 266
268byteUntuk memulai ini. Memanfaatkan fakta bahwa variabel menunjuk ke objek (string 1-char untuk setiap elemen array 2D) untuk menghilangkan kandidat yang tumpang tindih.
Misalnya. jika Anda mengeksekusi
a="s";b=a
, keduanyaa
danb
arahkan ke string yang sama."test"=="test"
mengembalikan true, tetapi"test".equal?("test")
mengembalikan false, karena kami telah membuat dua objek String yang berbeda.Uji kasus pada ideone .
sumber
map
sebagai gantinyaeach