Bu zorluk, 2D labirentlerini 1D labirentlerine dönüştürmekle ilgilidir.
genel bakış
+-+-+-+-+-+-+ +-+-+-+-+-+-+ graph {
| | | | |A| | B| A B A -- D
+ + + + +-+-+ + + + + +-+-+ \ | C -- D
| | | | | | | | \ | D -- E
+-+-+ +-+-+ + +-+-+ +-+-+ + \ | E -- F
| | |C D E F| C---D-E---F E -- G
+-+-+-+ +-+ + +-+-+-+ +-+ + | | B -- F
| | | | G | | .---G | F -- J
+ +-+-+-+ + + + +-+-+-+ + + .' / | G -- H
| | | | |H|I |J| H I-' J G -- I
+-+-+-+-+-+-+ +-+-+-+-+-+-+ (ascii) } // (graphviz dot)
Figure 1 Figure 2 Figure 3
Bu zorluğun amaçları doğrultusunda, geleneksel bir 2D labirent, aşağıdakilerin hepsinin tuttuğu kafes noktalarından oluşan dikdörtgen bir labirenttir:
- Kapalı (dış kenar duvarlarla birbirine bağlanmış).
- Tüm kafes noktaları duvarlara bağlanır
- Bağlandı (her iki boşluk için X ve Y, aralarında bir yol var)
- Asikliktir (geri izlemeden X'ten X'e geri hiçbir alan yoktur)
Şekil 1, geleneksel bir 2D labirenti göstermektedir. Bu labirentlerin üç ilgi alanı vardır:
- Çıkmazlar - sadece bir uygun yolun olduğu yerler
- Koridorlar - Kullanılabilir iki yolun olduğu yerler
- Karar noktaları - üç veya dört kullanılabilir yolun olduğu yerler
Böyle labirentlerin her biri için, ölü uçların ve karar noktalarının düğüm olduğu bir grafik oluşturabilir ve her iki düğüm arasında bir koridor boyunca bir yolla bağlanan bir kenar vardır. Şekil 2, etiketli düğümlerle aynı labirenti göstermektedir ve Şekil 3, labirentin grafiğini (ASCII ve Graphviz nokta notasyonunda) göstermektedir.
1D labirentine
1D labirentler, çiftler halinde gelen ve bir harf (her iki durumda da) kullanılarak tanımlanmış çözgü noktalarını içerir. Şekil 4, bir 1D labirent örneğini göstermektedir. Bu, aksi halde Şekil 5'de gösterildiği gibi 1 yüksekliğinde bir 2D labirent ile aynıdır. Özellikle Şekil 5'te, +
soldan sağa dönüşümlü olarak işaretlenen kafes nokta konumlarını not edin ; 1D labirentte, en soldaki duvarla başlayan diğer her karakter de bir kafes noktasıdır.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| D| D E|G E F| F | G | | D| D E|G E F| F | G |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4 Figure 5
Bu labirentte gezinmek için kurallar aşağıdaki gibidir. Her hareket ileri ( >
) veya geri ( <
) olarak gösterilebilir. Burada ileri ve geri varsayılan olarak sezgisel mekansal farkındalığımızla aynı anlama gelir; ileri, hemen sağa, hemen sola geri gider.
Çözgü noktaları, asimetrik olarak komşularla bağlantıyı değiştiren yerleri temsil eder. Bir komşundan bir çözgü noktasına geliyorsanız, iki çözgü noktasının konumu değiştirilir; Eğer bir warp noktasından komşuya geliyorsanız, bunlar değiştirilmez. Örneğin, Şekil 6'da 1'den geriye doğru hareket etmek sizi 2'ye getirir (1, G'nin komşusu olduğundan ve biz komşumuzdan hareket ediyoruz, 2 ve @ noktaları değiştirilir). 2'den (G noktası) ileri doğru hareket etmek sizi 3'e getirir (burada, bir warp noktasından başlıyoruz, bu yüzden takas yok). Aynı şekilde, 3'ten geriye doğru hareket etmek sizi @ konumuna getirir.
54 2367 89^ @1
| D| D E|G E F| F | G |
Y X
Figure 6
Şekil 6 aynı zamanda, hareket sırasını kullanarak X'den Y'ye bir örnek navigasyon göstermektedir <<>><>>>>>
. Bu hamleler, sizi 123456789^
sırasıyla bu sırayla etiketlenmiş noktalara getirir . Bir sonraki bölümdeki kod pasajını kullanarak kendinizi keşfetmekten çekinmeyin.
2D'yi 1D'ye dönüştürme
Bir 1D labirent verildiğinde, her düğümün bir çıkmaz veya bir çözgü noktası çifti olduğu ve bir koridor boyunca bağlanmış herhangi iki düğüm arasında kenarların bulunduğu bir grafik oluşturabilir. Bu grafik 1D ve 2D labirentlerini karşılaştırmamıza izin veriyor.
Örneğin, Şekil 4'teki 1D labirenti, Şekil 1'deki aynı labirenttir. Bir grafik oluşturmak için bu etiketleri kullanarak, Şekil 7'nin grafiği sadece Şekil 3'tür. Şekil 8, bu grafiğin oluşturulmasının bir kopyasını göstermektedir.
| D| D E|G E F| F | G |
A C B J H I
Figure 7
| D| D E|G E F| F | G |
+ + + + + + + + + + + + + + + <- lattice points
|A |C | |B J|H I| <- dead ends
|A D|C D E|G E F|B F J|H G I| <- all nodes (dead ends+warp points); i.e.:
"where each end is either a dead end
or a warp point pair"; note that each
pair of warp points is the same node.
|A-D|C-D-E|G-E-F|B-F-J|H-G-I| <- corridors; note each is a connection, since
1 2 3 4 5 6 7 8 9 "edges exist between any two nodes
connected along a corridor"
graph { graph {
A -- D // 1 <----> A -- D
C -- D // 2 <----> C -- D
D -- E // 3 <----> D -- E
G -- E // 4 <----> E -- G
E -- F // 5 <----> E -- F
B -- F // 6 <----> B -- F
F -- J // 7 <----> F -- J
H -- G // 8 <----> G -- H
G -- I // 9 <----> G -- I
} ^ }
Built from | From Figure 3
1D maze `-> isomorphic mappings
Figure 8
(Her grafiğin etiketlerinin ve düzeninin yapay olarak çizim amacıyla hizalanması için seçildiğini unutmayın; genel olarak bunun bir grafik izomorfizma problemi olduğunu söyleyin ).
1 sn labirentinin mekaniğini ve 1D labirenti, denklik grafiğini ve 2B labirent arasındaki bağlantıyı görselleştirmek için aşağıdaki kod parçası sağlanmıştır.
Bu snippet'te 1D labirentinde gezinirken, dokunduğunuz son iki düğüm vurgulanır. Aynı düğümler denklik grafiğinde ve 2B labirentte aynı şekilde vurgulanır.
Genel olarak, herhangi bir geleneksel 2D labirent için bu türden eşdeğer bir 1D labirent oluşturulabilir. Biraz daha karmaşık bir örnek, Şekil 9:
+-+-+-+-+-+-+ +-+-+-+-+-+-+ graph {
| | | | | |A| | |B| A B A -- D
+ + + + + + + + + + + + + + \ / C -- D
| | | | | | | | | | \ / D -- E
+-+-+ + +-+-+ +-+-+ + +-+-+ \ / B -- E
| | |C D E | C---D-E E -- F
+-+-+-+ +-+ + +-+-+-+ +-+ + |\ E -- I
| | | | F | | .---F \ F -- G
+ +-+-+-+ + + + +-+-+-+ + + .' / \ G -- H
| | | | |G|H |I| G H-' I H -- I
+-+-+-+-+-+-+ +-+-+-+-+-+-+ (ascii) } // (graphviz dot)
Figure 9 Figure 10 Figure 11
| D| D E |F E | F | | D| D E |F E | F |
A C I B G H
Figure 12 Figure 13
Bu labirent dört yollu bir düğüme sahiptir (Şekil 10'da E). Şekil 11, grafiğini göstermektedir. Şekil 12, eşdeğer bir 1D labirenttir; ve Şekil 13, Şekil 11 ile karşılaştırılmak üzere çıkmazlar için etiketlere sahip aynı labirenti göstermektedir.
Meydan okuma
Giriş olarak 2D Labirent verildiğinde, 2D labirenti çözgü noktalarıyla 1D labirentine dönüştüren bir fonksiyon veya program yazın. Çözgü noktaları, her durumda 52 harften herhangi birini kullanabilir.
Girdi garantileri (bunlardan herhangi biri girişte karşılanmazsa, başa çıkmak zorunda kalmazsınız):
- Giriş labirentine bağlı (yani, herhangi bir noktadan diğerine her zaman gidebilirsiniz).
- Giriş labirenti kapalı.
- Giriş labirent dikdörtgendir.
- Tüm kafes noktaları kullanır
+
. - Aynı sıradaki kafes noktaları arasındaki tüm duvarlar
|
- Kafes arasındaki tüm duvarlar aynı kolon kullanımında işaret eder
-
. - Tüm alanlar bir yolun parçasıdır (ve hepsi labirentin içindedir).
- Yolların hepsi boşluktur (bu her zaman geleneksel olacak, çözgü olmayan)
- Yollar tam olarak bir boşluk genişliğindedir.
- Labirent, kafes üzerindeki bağlantı noktaları ile oluşturulmuştur.
- Labirentin grafiğinde toplam 52'den fazla düğüm yoktur (yani çıkmazlar artı karar noktaları).
Çıkış biçimi:
- Çıktınız bir 1D labirent gösteren tek bir satır olmalıdır .
- Çıktınızın başında / sonunda boşluk bulunmamalıdır; Bunun dışında takip eden bir satırsonu iyi.
- İlk karakter ve daha sonra diğer her karakter kafes noktalarıdır.
- Tüm duvarlar kafes noktalarında olmalıdır; ve aralarındaki tüm çözgü noktaları.
- 1D labirentinizin grafiği 2B labirentin grafiğine eşdeğer olmalıdır.
- 1D labirentleriniz kompakt olmalıdır; kafes olmayan tüm noktalar çıkmaz (duvarlara bitişik) veya çözgü noktaları olmalıdır.
- Sadece harfler çıktınıza çözgü noktaları olmalıdır. Her çözgü noktası çizgide tam olarak iki kez oluşur.
Örnek:
| D| D E|G E F| F | G | <- (1,2) The single line output
+ + + + + + + + + + + + + + + <- lattice point spacing... (3)
(4,6) lattice points are all walls or spaces
(5) See Figure 8
(7) D, E, F, G appear twice; no other labels
Bu kod golfü. Kazanan en az bayt ile doğru kaçamak olmayan teslim olduğunu.
Test yapmak
Önemsiz labirent için çok sayıda doğru çıktı olduğundan, bu zorluğun test sonuçları yoktur.
Bununla birlikte, C ++ 'ta bir denetleyici oluşturdum (bu denetleyici, her iki çözümü de bir grafik kurallaştırma yoluyla çizer ).
Ayrıca, doğru biçimlendirmeyi göstermeye yardımcı olacak birkaç örnek:
örnek 1
+-+-+-+-+-+-+
| | | |
+ + + + +-+-+
| | | |
+-+-+ +-+-+ +
| |
+-+-+-+ +-+ +
| | |
+ +-+-+-+ + +
| | | |
+-+-+-+-+-+-+
->
| D| D E|G E F| F | G |
Örnek 2
+-+-+-+-+-+-+
| | | | |
+ + + + + + +
| | | | |
+-+-+ + +-+-+
| |
+-+-+-+ +-+ +
| | |
+ +-+-+-+ + +
| | | |
+-+-+-+-+-+-+
->
| D| D E |F E | F |