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 . 4
e a - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Estes são a @ 3
, a . 2
e a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Aqui está algo mais difícil. Veja como o & 2
recheio tem menos do que você esperava devido à inclinação da sobreposição - 3
? Possui a - 1
, & 2
a - 3
e 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 - 2
e 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 ...