挑战
设计一种专用于压缩ASCII迷宫的压缩算法。您将需要创建压缩算法和解压缩算法。您的分数将基于压缩迷宫的大小。
迷宫
这些迷宫主要是由字符(层), ,
+
,-
,|
和#
(壁),并且恰好一个各自的^
(开始)和$
(结束)。它们也可能包含ASCII字母,这些字母算作地砖。出于此挑战的目的,迷宫不必一定可以解决,迷宫内容物的实际含义无关紧要。
+
将用于壁单元,其中至少有一个水平相邻的壁单元和至少一个垂直相邻的壁单元。|
将用于壁单元,其中至少有一个垂直相邻的壁单元,但没有水平相邻的壁单元。-
将用于壁单元,其中至少有一个水平相邻的壁单元,但没有垂直相邻的壁单元#
仅用于与其他壁单元不正交的壁单元。
所有迷宫都是矩形的,但不一定具有规则的网格/墙对齐方式。
迷宫压缩
迷宫1
+----+----
| o | |
| -- | o--+
| | | $
--^-+-+---
迷宫2
+-----+---+
| a | |
^ +-+-+ # |
| | | B |
| | | --+ |
| c | $
+-------+--
迷宫3
----------+-+-+-----+-+
^ | | | | |
+-- --+R # | |p| | | |
| | | | | |
+---+ +-+-+-- +-+ | | |
| m| | | | | | | |
| +-+ | | | | | --+ | |
| | | h | | | | |
| | | | | | # --+-+ |
| | | | | | S| $
+-----+-+-+-+-+---+----
迷宫4
+-----+---+-+---+-------^-----+
| |x | | | tsrq |
+-+-- +-- | +-- # --+---- --+
| | | | | |
| | | | | +-+-+---+ | +-- | +-+
| | | u | | | | | | | | |
| +-+ | | | | +---- +-+---+ | |
| | | | | y | w |
| | --+ | --+ +-- | +---- | | |
| | | | | | | | | |
+-- --+ +-+ | | | | +-- | +-+-+
| | | | | | | | | |
$ | --+-+ | --+-+ | +-+-+-- --+
| | | z| | | v |
+-+---+-------+---+---+-------+
迷宫5
++ -----------+
++- Beep|
$ ----+---+--+
+-+boop| | |
| +--- | | | ++
| | | +++
+------+-+--+ ^
迷宫6
+-$---------------+-+--
| | |j
| |l ---- # ---+ | |
| | | m | +--+ |
| | | +-+---- # |
| | | | | +----+ |
|o| | | | +----+ | |
| | | | -- | |
| | | | | | -+ | | |
| | | | | | | +--- | |
| | | | +- | | | | ++
+-+ |n| | | ++ +--+ |
| | -+- | | | +-
+---+ +--- | | | ^
| | --+ --+ | |
| -- | | k | | ++
| | | +--- | ++
| | | | | |
+-- -+---- | +----+--+
迷宫7
+---+-+-------------+-+^+-----+-------+---+-+---+-+---+-+---+
| |c| | | | c | | | | | | |c| |
+-- | | +-- +-- # | | | +-- --+ +---- +-- | +-+ | | +-+ | --+
| | | | | | | | |c| | |
| | +-- | +-+-- +-+ +-- # +- # -+-- +-- | | --+ | | | | --+C|
|c| | | | c | | |c | | | |
+-+-+---+-+-----+---------+---------+---+-------------+---+$|
迷宫8
------+-+-+---+-+---+-----------+---+-----+---------------+-+
^ | | | | | | | | | r | |
+-- | | | t | | +-- +----- # ---+-- +-- --+-- ----+-+ --+ | |
| | | | | | | r | | | | | |
| | | | | +-+ --+ --+-- --------+-- | ----+ --+ | | | --+ | |
| |r| | rotation | | | | | | $
+-+-+-+-----------------------------------+---+-+---+---+-+--
迷宫9
|$|^--+-+---+-----+-+---+-+-+---+---+-+---+-----+
| | | | | | | | | | f | | | | |
| +-+ | | # +-+ --+ +-+ | | | # | +-+ +-- | ----+
| | | | f| | | | | | f |
| |F+-+ | | | | +---+ | | | ----+-+ | | --+ --+-+
| | | | | | | | | f | | | |
| | | | +-+-+---+-- | | | +-+-+-+ +-+ +--- # -+ |
| | | | | | | | | | | | | | |
+-+-+ | +---+ --+ | +---+-+ | | --+ f | | | | --+
| | | | | | | | | |
| --+f| | | +-- --+--f--+ --+ | ----+ | +-+ +---+
| | | | | | | | | |
+---+-----+-+-----+-----+---+-+-----------+-----+
迷宫10
+-----+-+-----------+
| q | | q |
|Q+-+ | +-+-+-+---- |
$ | | | | | q |
+-+ | | | | | +-- +-+
| | | | | | |
| +-- +-+ |q| +-+ | |
| q| | | | |
| | | +-- | +-+ | --+
| | | | | | | |
+-+-+-+ +-+-+ +-- | |
| | | |
+--- # -+ | | +-- | |
| q | | | | ^
+-+ +-- | | +-+ | +-+
| | | | |q| | |
| +-+-+ | +-+-- | | |
| | | | | | |
| | | +-+-+-- +-+ +-+
| | | | q |
+-+-+---------+-----+
规则,假设,计分
- 禁止标准漏洞
- 编写一个通用程序,而不是仅适用于十个测试用例的程序。它必须能够处理任何迷宫。
- 您可能会假设只有一个入口和一个出口。入口和出口将始终在迷宫的边界上。
- 您可以假定所有输入都使用遵循上面列举的规则的墙。您的压缩算法不必对包含违反这些规则的墙的迷宫起作用。
- 输入迷宫可能会或可能不会解决。
- 您可以假设迷宫在任一方向上的字符数都不会超过100个字符。
- 您可以假设字母不会出现在迷宫的边缘。(因为提供的示例就是这种情况)
- 您的分数是所有压缩迷宫的总大小(以字节(八位位组)为单位)。
- 如果发现更方便,则可以使用十六进制,base64,二进制字符串或任何类似格式来表示压缩迷宫。您仍然应该以整个八位位组计算结果,并为每个迷宫四舍五入(例如4个base64位为3个字节,2个十六进制位为1个字节,8个二进制位为1个字节,等等。)
- 最低分获胜!