Oggi è Purim su cui un'usanza è quella di distribuire biscotti a forma di triangolo con ripieno chiamato hamantaschen (singolare: hamantasch ). Un'altra usanza è quella di bere molto.
Non sono il fornaio più perfetto .... Ho così tanti hamantaschen di dimensioni irregolari da dare e così tanti amici a cui dare! Se ti ho inviato una foto dei miei biscotti, puoi dirmi quanti ne ho di quali dimensioni e riempimento? Ma poiché è Purim e sono troppo ubriaco per leggere molto codice, deve essere il più piccolo possibile.
definizioni
Taglia
Un hamantasch può essere di qualsiasi dimensione . Il più piccolo hamantasch è di taglia 1 e assomiglia a questi:
/\ --
-- \/
A volte, più hamantaschen possono sovrapporsi . La forma in basso conta come due hamantaschen (una taglia 1, una taglia 2):
/\
/\ \
----
Alcuni hamantaschen hanno ripieno . Questo sarà indicato riempiendo tutti gli spazi bianchi all'interno con un carattere. Si noti che hamantaschen taglia 1 non può essere riempito.
Saremo nome hamantaschen sulla base di riempimento e dimensione. Usiamo il formato <filling> <size>
e, se non compilato, - <size>
(puoi usare uno spazio invece di un -
, ma il markdown non piace quello).
Ecco a . 2
, a . 4
e a - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Questi sono a @ 3
, a . 2
e a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Ecco qualcosa di più difficile. Vedi come & 2
ha meno riempimento di quanto ti aspetti a causa dell'inclinazione della sovrapposizione - 3
? Ha a - 1
, a & 2
a - 3
e a & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
Ingresso
Ti verrà dato un file di testo o una singola stringa di hamantaschen (spazio di trascinamento facoltativo e spazio di trascinamento eventualmente imbottito per essere pari).
limiti
- Puoi aspettarti che la stringa sia valida , vale a dire che ogni carattere non bianco contribuisce a creare un hamantasch deliziosamente dolce (perché sprecare l'impasto?).
- Puoi anche aspettarti che sia riempito correttamente o meno - cioè, ogni hamantasch sarà interamente riempito con un carattere ASCII coerente - ASCII 32 per non riempito, o qualsiasi cosa 32..127 per riempito (esclusi
/
,\
e-
). - Questi hamantaschen non sono impilati in 3 spazi. Tutto
/
e\
sarà visibile. Tutto-
ciò che non è bloccato da/
e\
sarà visibile. Il riempimento arriva per ultimo. - Tutti gli hamantaschen avranno almeno la metà della loro linea orizzontale (arrotondamento per eccesso) visibile.
- Qualsiasi blocco contiguo di riempimento riempie solo il più piccolo hamantasch che lo circonda.
Produzione
Restituisce un elenco di "nomi" di tutti gli hamantaschen che possono essere trovati rispettando i criteri di cui sopra. L'output può essere in qualsiasi forma tu voglia (una stringa, un hash, uno stdout, ecc.).
Casi test
Caso di test n. 1
Ingresso n. 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Uscita n. 1:
. 2
. 2
- 4
@ 3
* 4
Caso di prova n. 2
Ingresso n. 2:
/\----
/\/\*\/
/ /\d\/
------
Uscita n. 2:
- 3
- 2
d 2
- 1
* 2
- 1
Test n. 3
Ingresso n. 3:
----
\/\/
/\/\ /\
---- /::\
----
Uscita n. 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Test n. 4
Ingresso n. 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Uscita n. 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Caso di test n. 5 non valido
Ingresso:
/\
\/
Produzione:
Non è necessario gestirlo.
/
e \
, e -
vinceremo sempre il riempimento.
(1,0)
, sono disattivate da +1
. Tuttavia, so cosa intendi e non sono d'accordo. Quale indicazione c'è che (2, 2)
è il centro in alto di a - 2
e non solo in alto a destra e a sinistra delle due - 1
s in alto ? Nessuno che io possa vedere. E la stessa logica si applica a (3, 2)
. A meno che tu non voglia aggiungere una regola per assumere il massimo possibile hamantaschen ...