Fencepostları Bulun


11

Arka fon

Çit direği fabrikasının yakınında bir atom bombası patladı! Çit direkleri medeniyetimizin hayatta kalması için gerekli olduğundan, mümkün olduğunca çok kurtarmalıyız. Alanı aramak için radyasyona dayanıklı robotlar gönderiyoruz ve onların yapay vizyonunu programlamak sizin göreviniz.

Giriş

|-#Girişiniz, iki satırlı çit direği parçalarını ve molozunu temsil eden, satırsonu ile ayrılmış bir dize olarak verilen dikdörtgen bir ızgaradır . Çit direkleri patlama tarafından korkunç bir şekilde sakatlandı ve bazıları ısı ile birlikte kaynaştı. Bir aday çit direğini , başlayıp biten |ve -aralarında bir veya daha fazla s (ister beğenir ister |-|ister |---|istemez ||) olan yatay bir desen veya başlayıp biten -ve |aralarında bir veya daha fazla s olan (esas olarak ) bir dikey desen olarak tanımlarız. yatay bir aday çit direği 90 derece döndürülmüş). Bir gerçek fencepost başka aday fencepost ile herhangi bir parçası paylaşmaz aday fencepost olduğunu.

Çıktı

Çıktınız, giriş ızgarasındaki gerçek çit direklerinin sayısıdır.

Misal

Giriş ızgarasını düşünün

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

Bu ızgarada 5 aday çit direği vardır, ancak bunlardan sadece 2 tanesi gerçek çit direğidir (kalın harflerle gösterilmiştir). Böylece doğru çıktı 2.

kurallar

Tam bir program veya bir işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.

Ek Test durumları

Giriş:

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

Çıktı: 0(0 aday çit direği)

Giriş:

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

Çıktı: 0(5 aday çit direği)

Giriş:

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

Çıktı: 4(8 aday çit direği)

Giriş:

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

Çıktı: 5(7 aday çit direği)

Giriş:

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

Çıktı: 4(9 aday çit direği)

Giriş:

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

Çıktı: 9(30 aday çit direği)


Öyleyse |--...--|paterndeki dönemler joker karakterde mi? Bu, yatay çitlerin en az 5 tireye sahip olması gerektiği anlamına mı geliyor? Gösterimle biraz kafam karıştı.
BMac

@BMac Bunların üç nokta olması gerektiği anlamına gelir, yani bazı tire işaretleri kullanılmaz. Bunun en net gösterim olmadığını kabul ediyorum. Daha az belirsiz bir şey düşüneyim.
Zgarb

Bir işlev yazarsak, girdi olarak bir 2D-dizi argümanı alabilir mi, örn. [[-,|,-],[#,#,-],[-,-,|]]?
blutorange

@blutorange Hayır, bu mücadelede tek bir ip olması gerekiyor.
Zgarb

Yanıtlar:


3

Yakut, 266 268 bayt

Bunu başlatmak için. Çakışan adayları ortadan kaldırmak için değişkenlerin nesnelere (2B dizinin her öğesi için 1 karakterlik bir dize) işaret etmesinden faydalanır.

Örneğin. Eğer yürütme eğer a="s";b=a, hem ave baynı dizeye noktası. iki farklı String nesnesi oluşturduğumuz için "test"=="test"true döndürür ancak "test".equal?("test")false döndürür.

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

İdeane üzerinde test örnekleri .


1
mapyerine kullanabilirsinizeach
Cristian Lupascu

@ w0lf teşekkürler, uygulandı. komik bir şey, bilmeliydim ki ...
blutorange
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.