Heute ist Purim, auf dem man dreieckige Kekse mit einer Füllung namens hamantaschen (Singular: hamantasch ) verteilen soll . Ein anderer Brauch ist es, viel zu trinken.
Ich bin nicht der perfekteste Bäcker ... Ich habe so viele unregelmäßig große Hamantaschen zu verteilen und so viele Freunde, denen ich sie geben kann! Wenn ich Ihnen ein Bild von meinen Keksen schicke, können Sie mir sagen, wie viele ich in welcher Größe und mit welcher Füllung habe? Aber weil es Purim ist und ich zu betrunken bin, um viel Code zu lesen, muss es so kleiner Code sein, wie Sie machen können.
Definitionen
Größe
Ein Hamantasch kann beliebig groß sein . Der kleinste Hamantasch ist Größe 1 und sieht so aus:
/\ --
-- \/
Manchmal können sich mehrere Hamantaschen überlappen . Die folgende Form zählt als zwei Hamantaschen (eine Größe 1, eine Größe 2):
/\
/\ \
----
Einige Hamantaschen haben Füllung . Dies wird angezeigt, indem das gesamte Leerzeichen mit einem Zeichen gefüllt wird. Beachten Sie, dass Hamantaschen der Größe 1 nicht gefüllt werden können.
Wir nennen hamantaschen basierend auf Füllung und Größe. Verwenden wir das Format <filling> <size>
und wenn es nicht ausgefüllt ist - <size>
(Sie können ein Leerzeichen anstelle eines verwenden -
, aber das gefällt Markdown nicht).
Hier sind a . 2
, a . 4
und a - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Dies sind a @ 3
, a . 2
und a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Hier ist etwas schwieriger. Sehen Sie, wie das & 2
weniger Füllung hat, als Sie aufgrund der Neigung von der Überlappung erwartet haben - 3
? Es hat ein - 1
, & 2
ein - 3
und ein & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
Eingang
Sie erhalten eine Textdatei oder eine einzelne Zeichenfolge von hamantaschen (optional abschließende Zeilenumbrüche und optional gepolsterte abschließende Leerzeichen, um gerade zu sein).
Grenzen
- Sie können erwarten, dass die Zeichenfolge gültig ist - das heißt, dass jedes Nicht-Leerzeichen zu einem köstlich süßen Hamantasch beiträgt (warum Teig verschwenden?).
- Sie können auch erwarten, dass es richtig gefüllt ist oder nicht - das heißt, dass jedes hamantasch vollständig mit einem konsistenten ASCII-Zeichen gefüllt wird - ASCII 32 für ungefüllt oder alles 32..127 für gefüllt (außer
/
,\
und-
). - Diese hamantaschen sind nicht im 3er Raum gestapelt . Alles
/
und\
wird sichtbar sein. Alle-
, die nicht von blockiert werden/
und\
sichtbar sein werden. Die Befüllung erfolgt zum Schluss. - Bei allen Hamantaschen ist mindestens die Hälfte der horizontalen Linie (Aufrundung) sichtbar.
- Jeder zusammenhängende Füllblock füllt nur den kleinsten Hamantasch , der ihn umgibt.
Ausgabe
Geben Sie eine Liste mit "Namen" aller Hamantaschen zurück, die die oben genannten Kriterien erfüllen. Die Ausgabe kann in einer beliebigen Form erfolgen (ein String, ein Hash, ein stdout usw.).
Testfälle
Testfall Nr. 1
Eingang 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Ausgang 1:
. 2
. 2
- 4
@ 3
* 4
Testfall Nr. 2
Eingang 2:
/\----
/\/\*\/
/ /\d\/
------
Ausgang 2:
- 3
- 2
d 2
- 1
* 2
- 1
Test Nr. 3
Eingang 3:
----
\/\/
/\/\ /\
---- /::\
----
Ausgang 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Test Nr. 4
Eingang 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Ausgang 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Ungültiger Testfall Nr. 5
Eingang:
/\
\/
Ausgabe:
Sie brauchen damit nicht umzugehen.
/
und \
, und -
wird immer Trumpf Füllung.
(1,0)
um deaktiviert +1
. Trotzdem weiß ich, was du meinst, und ich bin anderer Meinung. Welche Anzeige gibt es, (2, 2)
die die obere Mitte von a - 2
und nicht nur die obere rechte und linke der beiden oberen - 1
s ist? Keine, die ich sehen kann. Und die gleiche Logik gilt für (3, 2)
. Es sei denn, Sie möchten eine Regel hinzufügen, um ein Maximum an möglichen Hamantaschen anzunehmen ...