Hoje é Purim, cujo costume é distribuir biscoitos em forma de triângulo com recheio chamado hamantaschen (singular: hamantasch ). Outro costume é beber muito.
Eu não sou o padeiro mais perfeito ... Eu tenho tantos hamantaschen de tamanho irregular para dar e tantos amigos para dar! Se eu lhe enviar uma foto dos meus cookies, você pode me dizer quantos eu tenho de que tamanho e tamanho? Mas como é Purim e eu estou bêbado demais para ler muito código, ele precisa ser o menor possível.
Definições
Tamanho
Um hamantasch pode ser de qualquer tamanho . O menor hamantasch é do tamanho 1 e se parece com o seguinte:
/\ --
-- \/
Às vezes, vários hamantaschen podem se sobrepor . A forma abaixo conta como dois hamantaschen (um tamanho 1, um tamanho 2):
/\
/\ \
----
Alguns hamantaschen têm recheio . Isso será indicado preenchendo todo o espaço em branco interno com um caractere. Observe que o tamanho 1 hamantaschen não pode ter enchimento.
Vamos nomear hamantaschen com base no tamanho e preenchimento. Vamos usar o formato <filling> <size>e, se não estiver preenchido, - <size>(você pode usar um espaço em vez de a -, mas a margem não é a mesma).
Aqui estão a . 2, a . 4e a - 3:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Estes são a @ 3, a . 2e a - 4:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Aqui está algo mais difícil. Veja como o & 2recheio tem menos do que você esperava devido à inclinação da sobreposição - 3? Possui a - 1, & 2a - 3e a & 4:
--------
\ \/&/
\ /\/
\/&/
\/
Entrada
Você receberá um arquivo de texto ou uma única sequência de hamantaschen (nova linha à direita opcional e espaço em branco à direita opcional para ser par).
Limites
- Você pode esperar que a string seja válida - ou seja, todo caractere que não seja um espaço em branco contribui para um hamantasch deliciosamente doce (por que desperdiçar massa?).
- Você também pode esperar que ele seja devidamente preenchido ou não - ou seja, cada homentasch será totalmente preenchido com um carácter ASCII consistente - ASCII 32 para preencher, ou qualquer coisa 32..127 para cheia (excluindo
/,\e-). - Estes hamantaschen não são empilhados em 3 espaços. Tudo
/e\será visível. Tudo o-que não é bloqueado por/e\será visível. O preenchimento vem muito por último. - Todos os hamantaschen terão pelo menos metade da sua linha horizontal (arredondamento para cima) visível.
- Qualquer bloco contíguo de preenchimento preenche apenas o menor hamantasch que o rodeia.
Resultado
Retorne uma lista de "nomes" de todas as hamantaschen que podem ser encontradas atendendo aos critérios acima. A saída pode estar na forma que você desejar (uma string, um hash, stdout, etc).
Casos de teste
Caso de teste nº 1
Entrada nº 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Saída 1:
. 2
. 2
- 4
@ 3
* 4
Caso de teste nº 2
Entrada nº 2:
/\----
/\/\*\/
/ /\d\/
------
Saída # 2:
- 3
- 2
d 2
- 1
* 2
- 1
Teste # 3
Entrada nº 3:
----
\/\/
/\/\ /\
---- /::\
----
Saída # 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Teste # 4
Entrada nº 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Saída 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Caso de teste inválido nº 5
Entrada:
/\
\/
Resultado:
Você não precisa lidar com isso.
/e \ , e -será sempre trunfo enchimento.
(1,0), estão desativadas por +1. Ainda assim, eu sei o que você quer dizer e discordo. Que indicação existe (2, 2)no centro superior de um - 2e não apenas no canto superior direito e esquerdo dos dois lados superiores - 1? Nada que eu possa ver. E a mesma lógica se aplica a (3, 2). A menos que você deseja adicionar uma regra para assumir máxima hamantaschen possível ...