Hoy es Purim en el que una costumbre es distribuir galletas en forma de triángulo con relleno llamado hamantaschen (singular: hamantasch ). Otra costumbre es beber mucho.
No soy el panadero más perfecto ... ¡Tengo tantos hamantaschen de tamaño irregular para dar y tantos amigos para darles! Si le envié una foto de mis cookies, ¿puede decirme cuántas tengo de qué tamaño y relleno? Pero debido a que es Purim y estoy demasiado borracho para leer mucho código, debe ser un código tan pequeño como puedas.
Definiciones
Talla
Un hamantasch puede ser de cualquier tamaño . El hamantasch más pequeño es de tamaño 1 y se ve así:
/\ --
-- \/
A veces, múltiples hamantaschen pueden superponerse . La siguiente forma cuenta como dos hamantaschen (una talla 1, una talla 2):
/\
/\ \
----
Algunos hamantaschen tienen relleno . Esto se indicará rellenando todos los espacios en blanco con un carácter. Tenga en cuenta que el tamaño 1 hamantaschen no puede tener relleno.
Vamos a nombrar hamantaschen basado en el llenado y el tamaño. Usemos el formato <filling> <size>
y si no está lleno - <size>
(puede usar un espacio en lugar de un -
, pero a Markdown no le gusta eso).
Aquí hay a . 2
, a . 4
y a - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Estos son a @ 3
, a . 2
y a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Aquí hay algo más difícil. ¿Ves cómo & 2
tiene menos relleno del que esperas debido a la inclinación de la superposición - 3
? Tiene un - 1
, un & 2
a - 3
y un & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
Entrada
Se le dará un archivo de texto o una sola cadena de hamantaschen (nueva línea final opcional y espacio en blanco final opcionalmente acolchado para que sea par).
Límites
- Puede esperar que la cadena sea válida , es decir, cada carácter que no sea un espacio en blanco contribuye a un hamantasch deliciosamente dulce (¿por qué desperdiciar masa?).
- También puede esperar que se llene correctamente o no, es decir, cada hamantasch se llenará por completo con un carácter ASCII consistente: ASCII 32 para sin llenar, o cualquier cosa 32..127 para lleno (excluyendo
/
,\
y-
). - Estas hamantaschen no se apilan en 3 espacios. Todo
/
y\
será visible. Todos los-
que no están bloqueados/
y\
serán visibles. El relleno es lo último. - Todos los hamantaschen tendrán al menos la mitad de su línea horizontal (redondeando hacia arriba) visible.
- Cualquier bloque contiguo de relleno solo llena el hamantasch más pequeño que lo rodea.
Salida
Devuelva una lista de "nombres" de todos los hamantaschen que se pueden encontrar cumpliendo con los criterios anteriores. El resultado puede estar en la forma que desee (una cadena, un hash, stdout, etc.).
Casos de prueba
Caso de prueba n. ° 1
Entrada # 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Salida # 1:
. 2
. 2
- 4
@ 3
* 4
Caso de prueba n. ° 2
Entrada # 2:
/\----
/\/\*\/
/ /\d\/
------
Salida # 2:
- 3
- 2
d 2
- 1
* 2
- 1
Prueba n. ° 3
Entrada # 3:
----
\/\/
/\/\ /\
---- /::\
----
Salida # 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Prueba n. ° 4
Entrada # 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Salida # 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Caso de prueba inválido # 5
Entrada:
/\
\/
Salida:
No necesita manejar esto.
/
y \
, y -
será siempre el llenado de triunfo.
(1,0)
, están desactivadas por +1
. Aún así, sé a qué te refieres, y no estoy de acuerdo. ¿Qué indicación hay de que (2, 2)
es el centro superior de a - 2
y no solo la parte superior derecha e izquierda de los dos - 1
s superiores ? Ninguno que pueda ver. Y la misma lógica se aplica a (3, 2)
. A menos que desee agregar una regla para asumir el máximo hamantaschen posible ...