Edelsteine zählen
Hintergrund
Meine Schmuckschatulle ist gerade heruntergefallen! Es gibt zu viele Edelsteine unterschiedlicher Form auf dem Boden. Und Ihre Aufgabe ist es, die Anzahl einer bestimmten Art von Edelstein zu zählen.
I / O.
- Ihr Code sollte zwei Eingaben enthalten
S
undG
eine Zeichenfolge mit Zeilenumbrüchen, ein Zeilenarray, ein zweidimensionales Zeichenarray, eine Textdatei oder ein beliebiges vernünftiges Format sein (wenn ja, geben Sie dies bitte deutlich an). - Diese beiden Zeichenfolgen enthalten nur
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(von0x21
bis0x7E
in der ASCII-Tabelle) Leerzeichen und Zeilenumbrüche (Binärform abhängig von Ihrer Plattform). - In jeder Zeichenfolge sind die Zeilen gleich lang.
S
ist das Juwel, das wir zählen wollen. Es gibt zwei Umstände.- Geschlossen und enthält keinen verschachtelten geschlossenen Bereich. (in Beispiel 1/2)
- Enthält keinen geschlossenen Bereich. (in Beispiel 3/4)
- Umliegende Räume werden nicht als Teil des Edelsteins angesehen.
G
ist die Form von Edelsteinen auf dem Boden.- Es ist akzeptabel, dass Ihr Code zusätzliche Eingaben erfordert, um die Dimension (en) von
S
und anzugebenG
- Es ist akzeptabel, dass Ihr Code ASCII-Werte anstelle von Zeichen selbst als Eingaben verwendet. Sie sollten Zeichen jedoch nicht durch einfachere Ganzzahlen (0,1,2,3) ersetzen. Ihr Programm sollte in der Lage sein, Zeichen oder ASCII-Werte zu verarbeiten.
Beispiel 1 (Zeichen als Eingabe)
Eingabe S
:
+-+
| +-+
| | |
| | |
| +-+
+-+
Eingabe G
:
+-+ +-+
| +-+ +-+ |
| | | | | |
| | | | | |
| +-+ +-+ |
+-+ +-+
+-+
+---+ | +-+
| | | | |
| | | | |
| | | +-++
| | +-+| +-+
+---+ | | |
| | |
+-+ | +-+
| +-+ +-+
| |-|
| |-|
| +-+
+-+
Ouptut:
2
Beispiel 2 (ASCII-Wert als Eingabe)
Eingabe S
:
32 32 32 32 32 32 32 32
32 32 32 32 99 32 99 32
32 32 32 99 32 99 32 99
32 32 32 99 32 32 32 99
32 32 32 99 32 32 32 99
32 32 32 99 32 32 32 99
32 32 32 32 99 32 99 32
32 32 32 32 32 99 32 32
32 32 32 32 32 32 32 32
Eingabe G
:
32 99 32 99 32 99 32 99 32 32 99 32
99 32 99 32 99 32 99 32 99 99 32 99
99 32 32 32 99 32 32 32 99 32 32 99
99 99 32 32 99 32 32 32 99 32 32 99
99 32 32 32 99 32 32 32 99 32 32 99
32 99 32 99 32 99 32 99 99 32 99 32
32 32 99 32 32 32 99 32 32 99 32 32
Ausgabe:
1
Visualisiert S
(32 ersetzt durch -):
-- -- -- -- -- -- -- --
-- -- -- -- 99 -- 99 --
-- -- -- 99 -- 99 -- 99
-- -- -- 99 -- -- -- 99
-- -- -- 99 -- -- -- 99
-- -- -- 99 -- -- -- 99
-- -- -- -- 99 -- 99 --
-- -- -- -- -- 99 -- --
-- -- -- -- -- -- -- --
Visualisiert G
:
-- 99 -- 99 -- 99 -- 99 -- -- 99 --
99 -- 99 -- 99 -- 99 -- 99 99 -- 99
99 -- -- -- 99 -- -- -- 99 -- -- 99
99 99 -- -- 99 -- -- -- 99 -- -- 99
99 -- -- -- 99 -- -- -- 99 -- -- 99
-- 99 -- 99 -- 99 -- 99 99 -- 99 --
-- -- 99 -- -- -- 99 -- -- 99 -- --
Beispiel 3 (nicht beigefügt)
Vielen Dank an @ Draco18s
Eingang S
AB
Eingang G
AAB BA CAB
Ausgabe
2
Beispiel 4 (nicht eingeschlossenes 2D)
Eingang S
ABCD
GE
F
Eingang G
ABCD
BGGED
CDEFE
F
Ausgabe
1
Bemerkungen
- Nur zwei Edelsteine mit genau einer Form werden als gleich angesehen.
- Gleiche Form in verschiedenen Richtungen wird nicht als gleich angesehen.
- Wie in Beispiel-E / A beschrieben, ist jedoch eine Überlappung möglich. Unter solchen Umständen werden nur vollständige gezählt.
+
,-
Und|
in dem Beispiel keine besondere Bedeutung hat. Sie zeigen keine Ecke oder Kante der Form an.- Sie können davon ausgehen, dass die Eingabe immer gültig ist.
- Sie können davon ausgehen, dass zwei Zieledelsteine niemals genau dieselbe Kante haben.
- Standardlücken sind verboten.
- Dies ist ein Code-Golf, also gewinnt der kürzeste Code!
S
in der Mitte von G
.
S = "AB"
, G=" AAB BA CAB"
Ausgang =?
G
enthaltenS
?