Défi
Concevoir un algorithme de compression spécialisé pour compresser des labyrinthes ASCII. Vous devrez créer à la fois un algorithme de compression et un algorithme de décompression. Votre score sera basé sur la taille de vos labyrinthes compressés.
Labyrinthes
Ces labyrinthes sont faits principalement des personnages (étages),
+
, -
, |
et #
(murs), et exactement un chacun ^
(début) et $
(fin). Ils peuvent également contenir des lettres ASCII, qui comptent comme des carreaux de sol. Aux fins de ce défi, les labyrinthes ne doivent pas nécessairement être résolubles et la signification réelle du contenu du labyrinthe n'est pas pertinente.
+
sera utilisé pour les cellules de paroi où il y a au moins une cellule de paroi adjacente horizontalement et au moins une cellule de paroi adjacente verticalement.|
sera utilisé pour les cellules de paroi où il y a au moins une cellule de paroi adjacente verticalement, mais aucune cellule de paroi adjacente horizontalement.-
sera utilisé pour les cellules de paroi où il y a au moins une cellule de paroi adjacente horizontalement, mais aucune cellule de paroi adjacente verticalement#
ne sera utilisé que pour les cellules de paroi qui ne sont pas orthogonalement adjacentes à d'autres cellules de paroi.
Tous les labyrinthes sont rectangulaires, mais n'ont pas nécessairement un alignement régulier grille / mur.
Labyrinthes à compresser
Labyrinthe 1
+----+----
| o | |
| -- | o--+
| | | $
--^-+-+---
Labyrinthe 2
+-----+---+
| a | |
^ +-+-+ # |
| | | B |
| | | --+ |
| c | $
+-------+--
Labyrinthe 3
----------+-+-+-----+-+
^ | | | | |
+-- --+R # | |p| | | |
| | | | | |
+---+ +-+-+-- +-+ | | |
| m| | | | | | | |
| +-+ | | | | | --+ | |
| | | h | | | | |
| | | | | | # --+-+ |
| | | | | | S| $
+-----+-+-+-+-+---+----
Labyrinthe 4
+-----+---+-+---+-------^-----+
| |x | | | tsrq |
+-+-- +-- | +-- # --+---- --+
| | | | | |
| | | | | +-+-+---+ | +-- | +-+
| | | u | | | | | | | | |
| +-+ | | | | +---- +-+---+ | |
| | | | | y | w |
| | --+ | --+ +-- | +---- | | |
| | | | | | | | | |
+-- --+ +-+ | | | | +-- | +-+-+
| | | | | | | | | |
$ | --+-+ | --+-+ | +-+-+-- --+
| | | z| | | v |
+-+---+-------+---+---+-------+
Labyrinthe 5
++ -----------+
++- Beep|
$ ----+---+--+
+-+boop| | |
| +--- | | | ++
| | | +++
+------+-+--+ ^
Labyrinthe 6
+-$---------------+-+--
| | |j
| |l ---- # ---+ | |
| | | m | +--+ |
| | | +-+---- # |
| | | | | +----+ |
|o| | | | +----+ | |
| | | | -- | |
| | | | | | -+ | | |
| | | | | | | +--- | |
| | | | +- | | | | ++
+-+ |n| | | ++ +--+ |
| | -+- | | | +-
+---+ +--- | | | ^
| | --+ --+ | |
| -- | | k | | ++
| | | +--- | ++
| | | | | |
+-- -+---- | +----+--+
Labyrinthe 7
+---+-+-------------+-+^+-----+-------+---+-+---+-+---+-+---+
| |c| | | | c | | | | | | |c| |
+-- | | +-- +-- # | | | +-- --+ +---- +-- | +-+ | | +-+ | --+
| | | | | | | | |c| | |
| | +-- | +-+-- +-+ +-- # +- # -+-- +-- | | --+ | | | | --+C|
|c| | | | c | | |c | | | |
+-+-+---+-+-----+---------+---------+---+-------------+---+$|
Labyrinthe 8
------+-+-+---+-+---+-----------+---+-----+---------------+-+
^ | | | | | | | | | r | |
+-- | | | t | | +-- +----- # ---+-- +-- --+-- ----+-+ --+ | |
| | | | | | | r | | | | | |
| | | | | +-+ --+ --+-- --------+-- | ----+ --+ | | | --+ | |
| |r| | rotation | | | | | | $
+-+-+-+-----------------------------------+---+-+---+---+-+--
Labyrinthe 9
|$|^--+-+---+-----+-+---+-+-+---+---+-+---+-----+
| | | | | | | | | | f | | | | |
| +-+ | | # +-+ --+ +-+ | | | # | +-+ +-- | ----+
| | | | f| | | | | | f |
| |F+-+ | | | | +---+ | | | ----+-+ | | --+ --+-+
| | | | | | | | | f | | | |
| | | | +-+-+---+-- | | | +-+-+-+ +-+ +--- # -+ |
| | | | | | | | | | | | | | |
+-+-+ | +---+ --+ | +---+-+ | | --+ f | | | | --+
| | | | | | | | | |
| --+f| | | +-- --+--f--+ --+ | ----+ | +-+ +---+
| | | | | | | | | |
+---+-----+-+-----+-----+---+-+-----------+-----+
Labyrinthe 10
+-----+-+-----------+
| q | | q |
|Q+-+ | +-+-+-+---- |
$ | | | | | q |
+-+ | | | | | +-- +-+
| | | | | | |
| +-- +-+ |q| +-+ | |
| q| | | | |
| | | +-- | +-+ | --+
| | | | | | | |
+-+-+-+ +-+-+ +-- | |
| | | |
+--- # -+ | | +-- | |
| q | | | | ^
+-+ +-- | | +-+ | +-+
| | | | |q| | |
| +-+-+ | +-+-- | | |
| | | | | | |
| | | +-+-+-- +-+ +-+
| | | | q |
+-+-+---------+-----+
Règles, hypothèses, notation
- Les failles standard sont interdites
- Écrivez un programme général, pas un qui ne fonctionne que pour les dix cas de test. Il doit être capable de gérer n'importe quel labyrinthe arbitraire.
- Vous pouvez supposer qu'il y aura exactement une entrée et une sortie. Les entrées et sorties seront toujours à la frontière du labyrinthe.
- Vous pouvez supposer que toutes les entrées utilisent des murs qui suivent les règles énumérées ci-dessus. Votre algorithme de compression n'a pas à fonctionner pour les labyrinthes contenant des murs qui violent ces règles.
- Les labyrinthes d'entrée peuvent être résolus ou non.
- Vous pouvez supposer que le labyrinthe ne dépassera pas 100 caractères dans les deux sens.
- Vous pouvez supposer que les lettres n'apparaîtront pas sur le bord du labyrinthe. (puisque c'est le cas pour les exemples fournis)
- Votre score est la taille totale, en octets (octets), de tous les labyrinthes compressés.
- Vous pouvez utiliser hexadécimal, base64, chaînes binaires ou tout autre format similaire comme représentation de votre labyrinthe compressé si cela vous semble plus pratique. Vous devez toujours compter le résultat en octets entiers, arrondi à chaque labyrinthe (par exemple, 4 chiffres de base64 est de 3 octets, 2 chiffres hexadécimaux est de 1 octet, 8 chiffres binaires est de 1 octet, etc ...)
- Le score le plus bas gagne!