Desafío
Diseñe un algoritmo de compresión especializado para comprimir laberintos ASCII. Deberá crear un algoritmo de compresión y un algoritmo de descompresión. Su puntaje se basará en el tamaño de sus laberintos comprimidos.
Laberintos
Estos laberintos están hechos principalmente de los personajes (pisos),
+
, -
, |
, y #
(paredes), y exactamente un cada uno de ^
(START) y $
(fin). También pueden contener letras ASCII, que cuentan como baldosas. Para los propósitos de este desafío, los laberintos no tienen que ser solucionables y el significado real del contenido del laberinto es irrelevante.
+
se usará para celdas de pared donde hay al menos una celda de pared adyacente horizontalmente y al menos una celda de pared adyacente verticalmente.|
se usará para celdas de pared donde hay al menos una celda de pared adyacente verticalmente, pero no hay celdas de pared adyacentes horizontalmente.-
se usará para celdas de pared donde hay al menos una celda de pared adyacente horizontalmente, pero no hay celdas de pared adyacentes verticalmente#
solo se usará para células de pared que no estén ortogonalmente adyacentes a otras células de pared.
Todos los laberintos son rectangulares, pero no necesariamente tienen una alineación regular de cuadrícula / pared.
Laberintos Para Comprimir
Laberinto 1
+----+----
| o | |
| -- | o--+
| | | $
--^-+-+---
Laberinto 2
+-----+---+
| a | |
^ +-+-+ # |
| | | B |
| | | --+ |
| c | $
+-------+--
Laberinto 3
----------+-+-+-----+-+
^ | | | | |
+-- --+R # | |p| | | |
| | | | | |
+---+ +-+-+-- +-+ | | |
| m| | | | | | | |
| +-+ | | | | | --+ | |
| | | h | | | | |
| | | | | | # --+-+ |
| | | | | | S| $
+-----+-+-+-+-+---+----
Laberinto 4
+-----+---+-+---+-------^-----+
| |x | | | tsrq |
+-+-- +-- | +-- # --+---- --+
| | | | | |
| | | | | +-+-+---+ | +-- | +-+
| | | u | | | | | | | | |
| +-+ | | | | +---- +-+---+ | |
| | | | | y | w |
| | --+ | --+ +-- | +---- | | |
| | | | | | | | | |
+-- --+ +-+ | | | | +-- | +-+-+
| | | | | | | | | |
$ | --+-+ | --+-+ | +-+-+-- --+
| | | z| | | v |
+-+---+-------+---+---+-------+
Laberinto 5
++ -----------+
++- Beep|
$ ----+---+--+
+-+boop| | |
| +--- | | | ++
| | | +++
+------+-+--+ ^
Laberinto 6
+-$---------------+-+--
| | |j
| |l ---- # ---+ | |
| | | m | +--+ |
| | | +-+---- # |
| | | | | +----+ |
|o| | | | +----+ | |
| | | | -- | |
| | | | | | -+ | | |
| | | | | | | +--- | |
| | | | +- | | | | ++
+-+ |n| | | ++ +--+ |
| | -+- | | | +-
+---+ +--- | | | ^
| | --+ --+ | |
| -- | | k | | ++
| | | +--- | ++
| | | | | |
+-- -+---- | +----+--+
Laberinto 7
+---+-+-------------+-+^+-----+-------+---+-+---+-+---+-+---+
| |c| | | | c | | | | | | |c| |
+-- | | +-- +-- # | | | +-- --+ +---- +-- | +-+ | | +-+ | --+
| | | | | | | | |c| | |
| | +-- | +-+-- +-+ +-- # +- # -+-- +-- | | --+ | | | | --+C|
|c| | | | c | | |c | | | |
+-+-+---+-+-----+---------+---------+---+-------------+---+$|
Laberinto 8
------+-+-+---+-+---+-----------+---+-----+---------------+-+
^ | | | | | | | | | r | |
+-- | | | t | | +-- +----- # ---+-- +-- --+-- ----+-+ --+ | |
| | | | | | | r | | | | | |
| | | | | +-+ --+ --+-- --------+-- | ----+ --+ | | | --+ | |
| |r| | rotation | | | | | | $
+-+-+-+-----------------------------------+---+-+---+---+-+--
Laberinto 9
|$|^--+-+---+-----+-+---+-+-+---+---+-+---+-----+
| | | | | | | | | | f | | | | |
| +-+ | | # +-+ --+ +-+ | | | # | +-+ +-- | ----+
| | | | f| | | | | | f |
| |F+-+ | | | | +---+ | | | ----+-+ | | --+ --+-+
| | | | | | | | | f | | | |
| | | | +-+-+---+-- | | | +-+-+-+ +-+ +--- # -+ |
| | | | | | | | | | | | | | |
+-+-+ | +---+ --+ | +---+-+ | | --+ f | | | | --+
| | | | | | | | | |
| --+f| | | +-- --+--f--+ --+ | ----+ | +-+ +---+
| | | | | | | | | |
+---+-----+-+-----+-----+---+-+-----------+-----+
Laberinto 10
+-----+-+-----------+
| q | | q |
|Q+-+ | +-+-+-+---- |
$ | | | | | q |
+-+ | | | | | +-- +-+
| | | | | | |
| +-- +-+ |q| +-+ | |
| q| | | | |
| | | +-- | +-+ | --+
| | | | | | | |
+-+-+-+ +-+-+ +-- | |
| | | |
+--- # -+ | | +-- | |
| q | | | | ^
+-+ +-- | | +-+ | +-+
| | | | |q| | |
| +-+-+ | +-+-- | | |
| | | | | | |
| | | +-+-+-- +-+ +-+
| | | | q |
+-+-+---------+-----+
Reglas, supuestos, puntuación
- Las lagunas estándar están prohibidas
- Escriba un programa general, no uno que solo funcione para los diez casos de prueba. Debe ser capaz de manejar cualquier laberinto arbitrario.
- Puede suponer que habrá exactamente una entrada y una salida. Las entradas y salidas siempre estarán en el borde del laberinto.
- Puede suponer que todas las entradas usan paredes que siguen las reglas enumeradas anteriormente. Su algoritmo de compresión no tiene que funcionar para laberintos que contienen paredes que violan esas reglas.
- Los laberintos de entrada pueden o no tener solución.
- Puede suponer que el laberinto no tendrá más de 100 caracteres en cualquier dirección.
- Puede suponer que las letras no aparecerán en el borde del laberinto. (ya que este es el caso de los ejemplos proporcionados)
- Su puntaje es el tamaño total, en bytes (octetos), de todos los laberintos comprimidos.
- Puede usar hexadecimal, base64, cadenas binarias o cualquier formato similar como representación para su laberinto comprimido si lo encuentra más conveniente. Todavía debe contar el resultado en octetos completos, redondeados para cada laberinto (por ejemplo, 4 dígitos de base64 son 3 bytes, 2 dígitos hexadecimales son 1 byte, 8 dígitos binarios son 1 byte, etc.)
- ¡La puntuación más baja gana!