Sfida
Progetta un algoritmo di compressione specializzato per la compressione di labirinti ASCII. Sarà necessario creare sia un algoritmo di compressione sia un algoritmo di decompressione. Il tuo punteggio si baserà sulla dimensione dei tuoi labirinti compressi.
labirinti
Questi labirinti sono fatte principalmente di caratteri (piani),
+
, -
, |
, e #
(pareti), e precisamente uno ciascuno di ^
(start) e $
(fine). Possono anche contenere lettere ASCII, che contano come piastrelle per pavimento. Ai fini di questa sfida, i labirinti non devono essere risolvibili e il significato reale dei contenuti del labirinto è irrilevante.
+
verrà utilizzato per celle a parete in cui è presente almeno una cella a parete adiacente orizzontalmente e almeno una cella a parete adiacente verticalmente.|
verrà utilizzato per celle a parete in cui è presente almeno una cella a parete adiacente verticalmente, ma nessuna cella a parete adiacente orizzontalmente.-
verrà utilizzato per celle a parete in cui è presente almeno una cella a parete adiacente orizzontalmente, ma nessuna cella a parete adiacente verticalmente#
verrà utilizzato solo per le cellule della parete che non sono ortogonalmente adiacenti ad altre cellule della parete.
Tutti i labirinti sono rettangolari, ma non hanno necessariamente un regolare allineamento griglia / parete.
Labirinti da comprimere
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 |
+-+-+---------+-----+
Regole, ipotesi, punteggio
- Le scappatoie standard sono vietate
- Scrivi un programma generale, non uno che funziona solo per i dieci casi di test. Deve essere in grado di gestire qualsiasi labirinto arbitrario.
- Puoi presumere che ci saranno esattamente un'entrata e un'uscita. Entrate ed uscite saranno sempre al confine del labirinto.
- Si può presumere che tutti gli input utilizzino i muri che seguono le regole sopra elencate. L'algoritmo di compressione non deve funzionare per labirinti contenenti muri che violano tali regole.
- I labirinti in ingresso possono o meno essere risolvibili.
- Puoi presumere che il labirinto non sarà più grande di 100 caratteri in entrambe le direzioni.
- Puoi presumere che le lettere non appariranno sul bordo del labirinto. (poiché questo è il caso degli esempi forniti)
- Il tuo punteggio è la dimensione totale, in byte (ottetti), di tutti i labirinti compressi.
- Puoi usare esadecimali, base64, stringhe binarie o qualsiasi formato simile come rappresentazione per il tuo labirinto compresso se lo ritieni più conveniente. Dovresti comunque contare il risultato in interi ottetti, arrotondato per ogni labirinto (ad es. 4 cifre base64 sono 3 byte, 2 cifre esadecimali sono 1 byte, 8 cifre binarie sono 1 byte, ecc ...)
- Il punteggio più basso vince!