Thử thách
Thiết kế một thuật toán nén chuyên dùng để nén mê cung ASCII. Bạn sẽ cần tạo cả thuật toán nén và thuật toán giải nén. Điểm của bạn sẽ được dựa trên kích thước của mê cung nén của bạn.
Mazes
Những mê cung được thực hiện chủ yếu của các nhân vật (tầng),
+
, -
, |
, và #
(tường), và chính xác một mỗi ^
(bắt đầu) và $
(kết thúc). Chúng cũng có thể chứa các chữ cái ASCII, được tính là gạch lát sàn. Đối với mục đích của thử thách này, mê cung không cần phải giải quyết được và ý nghĩa thực sự của nội dung mê cung là không liên quan.
+
sẽ được sử dụng cho các ô tường nơi có ít nhất một ô tường liền kề theo chiều ngang và ít nhất một ô tường liền kề theo chiều dọc.|
sẽ được sử dụng cho các ô tường nơi có ít nhất một ô tường liền kề theo chiều dọc, nhưng không có các ô tường liền kề theo chiều ngang.-
sẽ được sử dụng cho các ô tường nơi có ít nhất một ô tường liền kề theo chiều ngang, nhưng không có các ô tường liền kề theo chiều dọc#
sẽ chỉ được sử dụng cho các ô tường không liền kề trực tiếp với các ô tường khác.
Tất cả các mê cung đều là hình chữ nhật, nhưng không nhất thiết phải có sự liên kết lưới / tường thông thường.
Mazes để nén
Mê cung 1
+----+----
| o | |
| -- | o--+
| | | $
--^-+-+---
Mê cung 2
+-----+---+
| a | |
^ +-+-+ # |
| | | B |
| | | --+ |
| c | $
+-------+--
Mê cung 3
----------+-+-+-----+-+
^ | | | | |
+-- --+R # | |p| | | |
| | | | | |
+---+ +-+-+-- +-+ | | |
| m| | | | | | | |
| +-+ | | | | | --+ | |
| | | h | | | | |
| | | | | | # --+-+ |
| | | | | | S| $
+-----+-+-+-+-+---+----
Mê cung 4
+-----+---+-+---+-------^-----+
| |x | | | tsrq |
+-+-- +-- | +-- # --+---- --+
| | | | | |
| | | | | +-+-+---+ | +-- | +-+
| | | u | | | | | | | | |
| +-+ | | | | +---- +-+---+ | |
| | | | | y | w |
| | --+ | --+ +-- | +---- | | |
| | | | | | | | | |
+-- --+ +-+ | | | | +-- | +-+-+
| | | | | | | | | |
$ | --+-+ | --+-+ | +-+-+-- --+
| | | z| | | v |
+-+---+-------+---+---+-------+
Mê cung 5
++ -----------+
++- Beep|
$ ----+---+--+
+-+boop| | |
| +--- | | | ++
| | | +++
+------+-+--+ ^
Mê 6
+-$---------------+-+--
| | |j
| |l ---- # ---+ | |
| | | m | +--+ |
| | | +-+---- # |
| | | | | +----+ |
|o| | | | +----+ | |
| | | | -- | |
| | | | | | -+ | | |
| | | | | | | +--- | |
| | | | +- | | | | ++
+-+ |n| | | ++ +--+ |
| | -+- | | | +-
+---+ +--- | | | ^
| | --+ --+ | |
| -- | | k | | ++
| | | +--- | ++
| | | | | |
+-- -+---- | +----+--+
Mê cung 7
+---+-+-------------+-+^+-----+-------+---+-+---+-+---+-+---+
| |c| | | | c | | | | | | |c| |
+-- | | +-- +-- # | | | +-- --+ +---- +-- | +-+ | | +-+ | --+
| | | | | | | | |c| | |
| | +-- | +-+-- +-+ +-- # +- # -+-- +-- | | --+ | | | | --+C|
|c| | | | c | | |c | | | |
+-+-+---+-+-----+---------+---------+---+-------------+---+$|
Mê cung 8
------+-+-+---+-+---+-----------+---+-----+---------------+-+
^ | | | | | | | | | r | |
+-- | | | t | | +-- +----- # ---+-- +-- --+-- ----+-+ --+ | |
| | | | | | | r | | | | | |
| | | | | +-+ --+ --+-- --------+-- | ----+ --+ | | | --+ | |
| |r| | rotation | | | | | | $
+-+-+-+-----------------------------------+---+-+---+---+-+--
Mê cung 9
|$|^--+-+---+-----+-+---+-+-+---+---+-+---+-----+
| | | | | | | | | | f | | | | |
| +-+ | | # +-+ --+ +-+ | | | # | +-+ +-- | ----+
| | | | f| | | | | | f |
| |F+-+ | | | | +---+ | | | ----+-+ | | --+ --+-+
| | | | | | | | | f | | | |
| | | | +-+-+---+-- | | | +-+-+-+ +-+ +--- # -+ |
| | | | | | | | | | | | | | |
+-+-+ | +---+ --+ | +---+-+ | | --+ f | | | | --+
| | | | | | | | | |
| --+f| | | +-- --+--f--+ --+ | ----+ | +-+ +---+
| | | | | | | | | |
+---+-----+-+-----+-----+---+-+-----------+-----+
Mê cung 10
+-----+-+-----------+
| q | | q |
|Q+-+ | +-+-+-+---- |
$ | | | | | q |
+-+ | | | | | +-- +-+
| | | | | | |
| +-- +-+ |q| +-+ | |
| q| | | | |
| | | +-- | +-+ | --+
| | | | | | | |
+-+-+-+ +-+-+ +-- | |
| | | |
+--- # -+ | | +-- | |
| q | | | | ^
+-+ +-- | | +-+ | +-+
| | | | |q| | |
| +-+-+ | +-+-- | | |
| | | | | | |
| | | +-+-+-- +-+ +-+
| | | | q |
+-+-+---------+-----+
Quy tắc, giả định, chấm điểm
- Sơ hở tiêu chuẩn bị cấm
- Viết một chương trình chung, không phải một chương trình chỉ hoạt động trong mười trường hợp thử nghiệm. Nó phải có khả năng xử lý bất kỳ mê cung tùy ý.
- Bạn có thể cho rằng sẽ có chính xác một lối vào và một lối ra. Lối vào và lối ra sẽ luôn ở trên biên giới của mê cung.
- Bạn có thể cho rằng tất cả các đầu vào sử dụng các bức tường tuân theo các quy tắc được liệt kê ở trên. Thuật toán nén của bạn không phải làm việc đối với các mê cung chứa các bức tường vi phạm các quy tắc đó.
- Mê cung đầu vào có thể hoặc không thể giải quyết được.
- Bạn có thể cho rằng mê cung sẽ không lớn hơn 100 ký tự theo cả hai hướng.
- Bạn có thể cho rằng các chữ cái sẽ không xuất hiện trên cạnh của mê cung. (vì đây là trường hợp cho các ví dụ được cung cấp)
- Điểm của bạn là tổng kích thước, tính bằng byte (octet), của tất cả các mê cung được nén.
- Bạn có thể sử dụng hex, base64, chuỗi nhị phân hoặc bất kỳ định dạng tương tự nào làm đại diện cho mê cung nén của bạn nếu bạn thấy thuận tiện hơn. Bạn vẫn nên đếm kết quả trong toàn bộ octet, làm tròn cho mỗi mê cung (ví dụ: 4 chữ số base64 là 3 byte, 2 chữ số hex là 1 byte, 8 chữ số nhị phân là 1 byte, v.v ...)
- Điểm số thấp nhất chiến thắng!