Meydan okuma
ASCII labirentlerini sıkıştırmak için özel bir sıkıştırma algoritması tasarlayın. Hem bir sıkıştırma algoritması hem de bir dekompresyon algoritması oluşturmanız gerekir. Puanınız sıkıştırılmış labirentine göre belirlenir.
Labirentler
Bu labirentler öncelikle karakter yapılır (kat),
+
, -
, |
, ve #
(duvarlar) ve tam olarak bir her ^
(başlangıç) ve $
(son). Ayrıca yer karosu olarak sayılan ASCII harfleri içerebilir. Bu zorluğun amaçları için labirentlerin çözülmesi gerekmemektedir ve labirent içeriğinin gerçek anlamı önemsizdir.
+
en az bir yatay olarak bitişik duvar hücresi ve en az bir dikey olarak bitişik duvar hücresi bulunan duvar hücreleri için kullanılacaktır.|
en az bir dikey olarak bitişik duvar hücresinin olduğu, ancak yatay olarak bitişik duvar hücrelerinin olmadığı duvar hücreleri için kullanılacaktır.-
yatay olarak bitişik en az bir duvar hücresinin olduğu, ancak dikey olarak bitişik duvar hücrelerinin bulunmadığı duvar hücreleri için kullanılacaktır.#
yalnızca diğer duvar hücrelerine ortogonal olarak bitişik olmayan duvar hücreleri için kullanılır.
Tüm labirentler dikdörtgen şeklindedir, ancak düzenli bir ızgara / duvar hizalaması olması gerekmez.
Sıkıştırılacak Labirentler
Labirent 1
+----+----
| o | |
| -- | o--+
| | | $
--^-+-+---
Labirent 2
+-----+---+
| a | |
^ +-+-+ # |
| | | B |
| | | --+ |
| c | $
+-------+--
Labirent 3
----------+-+-+-----+-+
^ | | | | |
+-- --+R # | |p| | | |
| | | | | |
+---+ +-+-+-- +-+ | | |
| m| | | | | | | |
| +-+ | | | | | --+ | |
| | | h | | | | |
| | | | | | # --+-+ |
| | | | | | S| $
+-----+-+-+-+-+---+----
Labirent 4
+-----+---+-+---+-------^-----+
| |x | | | tsrq |
+-+-- +-- | +-- # --+---- --+
| | | | | |
| | | | | +-+-+---+ | +-- | +-+
| | | u | | | | | | | | |
| +-+ | | | | +---- +-+---+ | |
| | | | | y | w |
| | --+ | --+ +-- | +---- | | |
| | | | | | | | | |
+-- --+ +-+ | | | | +-- | +-+-+
| | | | | | | | | |
$ | --+-+ | --+-+ | +-+-+-- --+
| | | z| | | v |
+-+---+-------+---+---+-------+
Labirent 5
++ -----------+
++- Beep|
$ ----+---+--+
+-+boop| | |
| +--- | | | ++
| | | +++
+------+-+--+ ^
Labirent 6
+-$---------------+-+--
| | |j
| |l ---- # ---+ | |
| | | m | +--+ |
| | | +-+---- # |
| | | | | +----+ |
|o| | | | +----+ | |
| | | | -- | |
| | | | | | -+ | | |
| | | | | | | +--- | |
| | | | +- | | | | ++
+-+ |n| | | ++ +--+ |
| | -+- | | | +-
+---+ +--- | | | ^
| | --+ --+ | |
| -- | | k | | ++
| | | +--- | ++
| | | | | |
+-- -+---- | +----+--+
Labirent 7
+---+-+-------------+-+^+-----+-------+---+-+---+-+---+-+---+
| |c| | | | c | | | | | | |c| |
+-- | | +-- +-- # | | | +-- --+ +---- +-- | +-+ | | +-+ | --+
| | | | | | | | |c| | |
| | +-- | +-+-- +-+ +-- # +- # -+-- +-- | | --+ | | | | --+C|
|c| | | | c | | |c | | | |
+-+-+---+-+-----+---------+---------+---+-------------+---+$|
Labirent 8
------+-+-+---+-+---+-----------+---+-----+---------------+-+
^ | | | | | | | | | r | |
+-- | | | t | | +-- +----- # ---+-- +-- --+-- ----+-+ --+ | |
| | | | | | | r | | | | | |
| | | | | +-+ --+ --+-- --------+-- | ----+ --+ | | | --+ | |
| |r| | rotation | | | | | | $
+-+-+-+-----------------------------------+---+-+---+---+-+--
Labirent 9
|$|^--+-+---+-----+-+---+-+-+---+---+-+---+-----+
| | | | | | | | | | f | | | | |
| +-+ | | # +-+ --+ +-+ | | | # | +-+ +-- | ----+
| | | | f| | | | | | f |
| |F+-+ | | | | +---+ | | | ----+-+ | | --+ --+-+
| | | | | | | | | f | | | |
| | | | +-+-+---+-- | | | +-+-+-+ +-+ +--- # -+ |
| | | | | | | | | | | | | | |
+-+-+ | +---+ --+ | +---+-+ | | --+ f | | | | --+
| | | | | | | | | |
| --+f| | | +-- --+--f--+ --+ | ----+ | +-+ +---+
| | | | | | | | | |
+---+-----+-+-----+-----+---+-+-----------+-----+
Labirent 10
+-----+-+-----------+
| q | | q |
|Q+-+ | +-+-+-+---- |
$ | | | | | q |
+-+ | | | | | +-- +-+
| | | | | | |
| +-- +-+ |q| +-+ | |
| q| | | | |
| | | +-- | +-+ | --+
| | | | | | | |
+-+-+-+ +-+-+ +-- | |
| | | |
+--- # -+ | | +-- | |
| q | | | | ^
+-+ +-- | | +-+ | +-+
| | | | |q| | |
| +-+-+ | +-+-- | | |
| | | | | | |
| | | +-+-+-- +-+ +-+
| | | | q |
+-+-+---------+-----+
Kurallar, Varsayımlar, Puanlama
- Standart boşluklar yasaklandı
- Sadece on test vakası için çalışan bir program değil, genel bir program yazın. Herhangi bir keyfi labirent işleyebilmelidir.
- Tam olarak bir giriş ve bir çıkış olacağını varsayabilirsiniz. Girişler ve çıkışlar her zaman labirentin sınırında olacaktır.
- Tüm girdilerin yukarıda sıralanan kurallara uyan duvarlar kullandığını varsayabilirsiniz. Sıkıştırma algoritmanızın, bu kuralları ihlal eden duvarlar içeren labirentler için çalışması gerekmez.
- Giriş labirentleri çözülebilir veya çözülmeyebilir.
- Labirentin her iki yönde de 100 karakterden fazla olmayacağını varsayabilirsiniz.
- Harflerin labirentin kenarında görünmeyeceğini varsayabilirsiniz. (verilen örnekler için durum böyle olduğu için)
- Skorunuz, sıkıştırılmış labirentlerin toplam bayt (sekizli) cinsinden boyutudur.
- Daha uygun bulursanız, sıkıştırılmış labirentinizin temsili olarak hex, base64, ikili dizeler veya benzer bir biçim kullanabilirsiniz. Yine de her labirent için yuvarlanmış olan sonucu tüm sekizli olarak saymalısınız (örneğin, 4 temel64 basamak 3 bayt, 2 onaltılık basamak 1 bayt, 8 ikili basamak 1 bayt vb.)
- En düşük puan kazanır!