Hintergrund
In der Nähe der Zaunpfostenfabrik ist eine Atombombe explodiert! Da Zaunpfosten für das Überleben unserer Zivilisation unerlässlich sind, müssen wir so viele wie möglich retten. Wir schicken strahlungsresistente Roboter, um das Gebiet zu durchsuchen, und es ist Ihre Aufgabe, ihre künstliche Sicht zu programmieren.
Eingang
Ihre Eingabe ist ein rechteckiges Raster der Zeichen |-#
, das zwei Arten von Zaunpfosten und Trümmern darstellt und als durch neue Zeilen getrennte Zeichenfolge angegeben wird. Die Zaunpfosten wurden durch die Explosion schrecklich verstümmelt, und einige wurden sogar durch die Hitze miteinander verschmolzen. Wir definieren einen Zaunpfosten als ein horizontales Muster, das beginnt und endet |
und ein oder mehrere -
s zwischen sich hat (wie |-|
oder |---|
aber nicht ||
), oder ein vertikales Muster, das beginnt und endet -
und ein oder mehrere |
s zwischen sich hat (im Wesentlichen) ein horizontaler Zaunpfostenkandidat, der um 90 Grad gedreht wurde). Ein tatsächlicher Zaunpfosten ist ein Kandidat für einen Zaunpfosten, der keine seiner Teile mit einem anderen Kandidaten für einen Zaunpfosten teilt.
Ausgabe
Ihre Ausgabe ist die Anzahl der tatsächlichen Zaunpfosten im Eingaberaster.
Beispiel
Betrachten Sie das Eingaberaster
|#|-|#|##
#||--|||#
###|#|--#
###-||--|
-#-|#-|#-
#---#-#-|
#-#-|#--|
Es gibt 5 mögliche Zaunpfosten in diesem Raster, aber nur 2 davon sind tatsächliche Zaunpfosten (fett dargestellt). Somit ist die korrekte Ausgabe 2
.
Regeln
Sie können entweder ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt und Standardschlupflöcher sind nicht zulässig.
Zusätzliche Testfälle
Eingang:
##--
||##
-#|-
|#|#
Ausgabe: 0
(0 mögliche Zaunpfosten)
Eingang:
-##|-##--
#|#-|#||-
--|-#|#||
##||||-##
||#|--|-|
-#|-#--|#
|####|#-#
Ausgabe: 0
(5 mögliche Zaunpfosten)
Eingang:
#|--|---|-|#
####|##--||-
-|-##||#|---
-#|#-|-#-|||
#|-##--###|-
---#-||-#-##
#|---|###|-#
-|---#-#|#|#
|#--|####-|-
Ausgabe: 4
(8 mögliche Zaunpfosten)
Eingang:
-|-||---##|#
---|######-#
####-##|#--|
|||##|#-||||
####-#-||-#|
---#--|#-#--
-|#-####-##-
#||-|-|-###|
|-##||-||-#-
Ausgabe: 5
(7 mögliche Zaunpfosten)
Eingang:
|#-|#|#-###|#-#
----#####|#----
|#--#-##-#|##-|
|#-|#-|--##||--
||#-#---##|||##
#|#-|||-#-#--||
--#|-||#|--|#|#
-#-|###||-#--#|
-#||-|#-##||##|
|--|-|||-##|-#|
Ausgabe: 4
(9 mögliche Zaunpfosten)
Eingang:
||-|-|-##-#-#-|#--#-
-##|-#|-#-##-|#|--|-
||#---###||-|#|##|-#
#||-#-#-|---|#||#|##
-#-###-##-|-#-|-#||#
##-#--#||-----||-|##
-|--#-#-#|---#-#|#-#
###|-|#-#|-|###|#-|#
#||#-#|--|-||#------
||##|-||#-|--#|#-#-#
|#-|-#-|-|--##-#|||#
-|#--#||##---##|-##-
#|-|-|-||-||#-#-|##-
|-#|##|-|#|#|--||#--
Ausgabe: 9
(30 mögliche Zaunpfosten)
|--...--|
Muster-Platzhaltern? Bedeutet das, dass horizontale Zäune mindestens 5 Bindestriche haben müssen? Ich bin ein bisschen verwirrt von der Notation.[[-,|,-],[#,#,-],[-,-,|]]
?Antworten:
Ruby, 266
268BytesUm dies zu starten. Nutzt die Tatsache, dass Variablen auf Objekte verweisen (eine Zeichenfolge mit 1 Zeichen für jedes Element des 2D-Arrays), um überlappende Kandidaten zu eliminieren.
Z.B. Wenn Sie ausführen
a="s";b=a
, zeigen beidea
undb
auf dieselbe Zeichenfolge."test"=="test"
Gibt true zurück, gibt jedoch"test".equal?("test")
false zurück, da wir zwei verschiedene String-Objekte erstellt haben.Testfälle auf ideone .
quelle
map
anstelle voneach