Todo programador sabe que los rectángulos □
son realmente divertidos. Para exacerbar esta diversión, estos diagramas lindos y difusos se pueden transformar en grupos de paréntesis entrelazados.
Este desafío es el inverso de mi anterior .
Digamos que tiene un grupo de rectángulos entrelazados como este:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Notas adicionales:
- No
+
habrá dos s adyacentes. - Nunca dos rectángulos compartirán un borde o esquina
- Solo habrá como máximo un borde vertical en cada columna
El primer paso es mirar el borde más a la izquierda de cualquier rectángulo. Asigne uno de los cuatro tipos de soporte ({[<
. Elijo [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Ahora mira el segundo rectángulo más a la izquierda. Como se superpone a un [
rectángulo, debe ser de un tipo diferente. Elijo (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
El siguiente rectángulo más a la izquierda no se cruza con ningún rectángulo anterior, sino que anida dentro del anterior. Elijo asignarlo (
nuevamente. Normalmente es una buena suposición asignar un rectángulo del mismo tipo que anida dentro si es posible, pero a veces es necesario retroceder.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Este próximo rectángulo puede asignarse [
nuevamente.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
El siguiente rectángulo es divertido. Se cruza con ay (
un [
rectángulo, por lo que podría llamarlo un {
rectángulo (o <
pero a nadie le gustan).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Los dos últimos rectángulos no son tan malos. Pueden ser de dos tipos diferentes.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Leyendo los rectángulos, entiendo [(]([{))}]<{}>
. Esta sería una salida posible para la entrada anterior. Aquí hay una lista de muchas opciones posibles, no exhaustivas:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
Entrada
Rectángulos de arte ASCII, en el supuesto de que no sean ambiguos (véanse las notas anteriores) y que se puedan convertir correctamente en una cadena de corchetes. Puede suponer que no hay espacios finales o rellenados a un rectángulo, con una nueva línea opcional. No habrá espacios en blanco principales.
Salida
Cualquiera de las cadenas de paréntesis válidas que obedecen las restricciones de intersección de los rectángulos. Aparte de una nueva línea final opcional, no debe haber otros caracteres que los corchetes. La regla principal es, si dos cuadrados se cruzan, entonces se les debe asignar diferentes tipos de corchetes.
Gol
Esto es código-golf, (falta de) cantidad sobre calidad.
+
esquina superior izquierda, y luego (inmediatamente debajo) la +
esquina inferior izquierda.