Desafio
Crie um algoritmo de compactação especializado para compactar labirintos ASCII. Você precisará criar um algoritmo de compactação e um algoritmo de descompactação. Sua pontuação será baseada no tamanho dos labirintos compactados.
Labirintos
Estes labirintos são feitas principalmente dos caracteres (pavimentos),
+
, -
, |
, e #
(paredes), e exatamente uma cada de ^
(iniciar) e $
(final). Eles também podem conter letras ASCII, que contam como ladrilhos. Para os propósitos deste desafio, os labirintos não precisam ser solucionáveis e o significado real do conteúdo do labirinto é irrelevante.
+
será usado para células de parede onde houver pelo menos uma célula de parede adjacente horizontalmente e pelo menos uma célula de parede adjacente verticalmente.|
será usado para células da parede onde houver pelo menos uma célula da parede adjacente verticalmente, mas nenhuma célula da parede adjacente horizontalmente.-
será usado para células da parede onde houver pelo menos uma célula da parede adjacente horizontalmente, mas nenhuma célula da parede adjacente verticalmente#
será usado apenas para células da parede que não são ortogonalmente adjacentes a outras células da parede.
Todos os labirintos são retangulares, mas não necessariamente têm um alinhamento regular de grade / parede.
Labirintos para comprimir
Labirinto 1
+----+----
| o | |
| -- | o--+
| | | $
--^-+-+---
Labirinto 2
+-----+---+
| a | |
^ +-+-+ # |
| | | B |
| | | --+ |
| c | $
+-------+--
Labirinto 3
----------+-+-+-----+-+
^ | | | | |
+-- --+R # | |p| | | |
| | | | | |
+---+ +-+-+-- +-+ | | |
| m| | | | | | | |
| +-+ | | | | | --+ | |
| | | h | | | | |
| | | | | | # --+-+ |
| | | | | | S| $
+-----+-+-+-+-+---+----
Labirinto 4
+-----+---+-+---+-------^-----+
| |x | | | tsrq |
+-+-- +-- | +-- # --+---- --+
| | | | | |
| | | | | +-+-+---+ | +-- | +-+
| | | u | | | | | | | | |
| +-+ | | | | +---- +-+---+ | |
| | | | | y | w |
| | --+ | --+ +-- | +---- | | |
| | | | | | | | | |
+-- --+ +-+ | | | | +-- | +-+-+
| | | | | | | | | |
$ | --+-+ | --+-+ | +-+-+-- --+
| | | z| | | v |
+-+---+-------+---+---+-------+
Labirinto 5
++ -----------+
++- Beep|
$ ----+---+--+
+-+boop| | |
| +--- | | | ++
| | | +++
+------+-+--+ ^
Labirinto 6
+-$---------------+-+--
| | |j
| |l ---- # ---+ | |
| | | m | +--+ |
| | | +-+---- # |
| | | | | +----+ |
|o| | | | +----+ | |
| | | | -- | |
| | | | | | -+ | | |
| | | | | | | +--- | |
| | | | +- | | | | ++
+-+ |n| | | ++ +--+ |
| | -+- | | | +-
+---+ +--- | | | ^
| | --+ --+ | |
| -- | | k | | ++
| | | +--- | ++
| | | | | |
+-- -+---- | +----+--+
Labirinto 7
+---+-+-------------+-+^+-----+-------+---+-+---+-+---+-+---+
| |c| | | | c | | | | | | |c| |
+-- | | +-- +-- # | | | +-- --+ +---- +-- | +-+ | | +-+ | --+
| | | | | | | | |c| | |
| | +-- | +-+-- +-+ +-- # +- # -+-- +-- | | --+ | | | | --+C|
|c| | | | c | | |c | | | |
+-+-+---+-+-----+---------+---------+---+-------------+---+$|
Labirinto 8
------+-+-+---+-+---+-----------+---+-----+---------------+-+
^ | | | | | | | | | r | |
+-- | | | t | | +-- +----- # ---+-- +-- --+-- ----+-+ --+ | |
| | | | | | | r | | | | | |
| | | | | +-+ --+ --+-- --------+-- | ----+ --+ | | | --+ | |
| |r| | rotation | | | | | | $
+-+-+-+-----------------------------------+---+-+---+---+-+--
Labirinto 9
|$|^--+-+---+-----+-+---+-+-+---+---+-+---+-----+
| | | | | | | | | | f | | | | |
| +-+ | | # +-+ --+ +-+ | | | # | +-+ +-- | ----+
| | | | f| | | | | | f |
| |F+-+ | | | | +---+ | | | ----+-+ | | --+ --+-+
| | | | | | | | | f | | | |
| | | | +-+-+---+-- | | | +-+-+-+ +-+ +--- # -+ |
| | | | | | | | | | | | | | |
+-+-+ | +---+ --+ | +---+-+ | | --+ f | | | | --+
| | | | | | | | | |
| --+f| | | +-- --+--f--+ --+ | ----+ | +-+ +---+
| | | | | | | | | |
+---+-----+-+-----+-----+---+-+-----------+-----+
Labirinto 10
+-----+-+-----------+
| q | | q |
|Q+-+ | +-+-+-+---- |
$ | | | | | q |
+-+ | | | | | +-- +-+
| | | | | | |
| +-- +-+ |q| +-+ | |
| q| | | | |
| | | +-- | +-+ | --+
| | | | | | | |
+-+-+-+ +-+-+ +-- | |
| | | |
+--- # -+ | | +-- | |
| q | | | | ^
+-+ +-- | | +-+ | +-+
| | | | |q| | |
| +-+-+ | +-+-- | | |
| | | | | | |
| | | +-+-+-- +-+ +-+
| | | | q |
+-+-+---------+-----+
Regras, Premissas, Pontuação
- As brechas padrão são proibidas
- Escreva um programa geral, não um que funcione apenas para os dez casos de teste. Ele deve ser capaz de lidar com qualquer labirinto arbitrário.
- Você pode assumir que haverá exatamente uma entrada e uma saída. As entradas e saídas sempre estarão na fronteira do labirinto.
- Você pode assumir que todas as entradas usam paredes que seguem as regras enumeradas acima. Seu algoritmo de compactação não precisa funcionar para labirintos contendo paredes que violam essas regras.
- Labirintos de entrada podem ou não ser solucionáveis.
- Você pode assumir que o labirinto não terá mais que 100 caracteres em qualquer direção.
- Você pode assumir que as letras não aparecerão na borda do labirinto. (já que este é o caso dos exemplos fornecidos)
- Sua pontuação é o tamanho total, em bytes (octetos), de todos os labirintos compactados.
- Você pode usar hex, base64, seqüências binárias ou qualquer formato semelhante como representação para o seu labirinto compactado, se achar mais conveniente. Você ainda deve contar o resultado em octetos inteiros, arredondados para cada labirinto (por exemplo, 4 dígitos base64 são 3 bytes, 2 dígitos hexadecimais são 1 byte, 8 dígitos binários são 1 byte, etc ...)
- Menor pontuação ganha!