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 . 4e a - 3:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Questi sono a @ 3, a . 2e a - 4:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Ecco qualcosa di più difficile. Vedi come & 2ha meno riempimento di quanto ti aspetti a causa dell'inclinazione della sovrapposizione - 3? Ha a - 1, a & 2a - 3e 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 - 2e non solo in alto a destra e a sinistra delle due - 1s 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 ...