Siz iki kasaba arasındaki çölü geçen bir gezginsiniz. Durmadan geçebilecek kadar su taşıyamazsınız. Bu klasik bir bulmacanın bir çeşididir.
Kurallar
Bir çöl şöyle görünür: çoğunlukla boş alanlardan oluşan bir Gxy ızgarası. İşaretli S
alan başladığınız E
yerdir, bitirmek istediğiniz yerdir ve N ile işaretlenmiş bir kare N birim su tutar. .
Sıfır su ile işaretlenmiş kareler .
.....................................
........S............................
.....................................
.........7...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
S'den 5 birim su ile başlıyorsunuz.
En fazla 5 birim su taşıyabilirsiniz.
Her dönüşte
- bir kare yukarı, aşağı, sola veya sağa hareket ettirme,
- taşıdığınız 1 birim su tüket,
- bir miktar su alın veya bırakın .
A dönüş böylece notated edilir (direction)(+|-)(units of water)
, +
, Suyu toplayıp düzenliyor olabilir -
bunu olarak düştüğünü.
Örnek dönüşler:
D+0 Move Down
R+0 Move Right
D+2 Move Down, pick up two units of water.
U-1 Move Up, drop one unit of water.
Yukarıdaki örnekte S'den başlayarak bu hareketleri yaparsanız, çöl daha sonra böyle görünür.
.....................................
........S............................
.........1...........................
.........5...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
Karenizde olduğundan daha fazla su alamazsınız. Suyu aldığınızda, o sayıda birimi karo sayımından çıkarın.
En fazla 5 ünite tutmak için sadece su alabilirsiniz.
Sonsuzluk birimleri olan S dışında hiçbir döşemede 9'dan fazla birim bulunamaz.
Sadece elinde tuttuğunuz kadar su damlatabilirsiniz.
Yerdeki su siz tekrar alana kadar değişmeden kalır.
S'ye dönerseniz, tüketmeden herhangi bir miktarda suyu alabilirsiniz.
E'ye ulaşırsan kazanırsın . E'deki son su biriminizi tüketirseniz hala kazanırsınız.
Sıranızdan sonra sıfır suyunuz varsa ve E'de değilseniz, ölürsünüz .
Giriş ve çıkış
Programınız, STDIN
yukarıdaki formatta ASCII sanatı olarak isteğe bağlı boyutta bir başlangıç haritası alacaktır . Dikdörtgen olduğunu varsayabilirsiniz, yani tüm satırlar aynı uzunluktadır, tam olarak bir S
ve bir E
kare vardır, tüm satırlar ile sonlandırılır \n
ve STDIN'in tamamı bu normal ifadeye uyacaktır:/^[SE1-9\.\n]+$/
Programınız STDOUT'a aşağıdaki çıktıyı yazacaktır:
- hamle listesi,
- haritanın son durumu.
Hareket listesini uygun herhangi bir formatta çıkarabilirsiniz.
Haritanın son durumu, girişle aynı formatta yazdırılacaktır, ancak ek olarak #
, eğer çini su içermiyorsa ve S veya E değilse ( ziyaret edilen tüm karoları işaretleyerek çölde geçtiğiniz rotayı gösterecektir. öyle .
).
ÖRNEK giriş:
.....S.
.......
.......
E......
....8..
ÖRNEK kazanan çıktı:
D+0
D+0
D+0
D+0
L+5
L+0
L+0
L+0
L+0
U+0
.....S.
.....#.
.....#.
E....#.
####3#.
Nontriviality
Kodunuzu yüklediğinizde, kodunuzun aşağıdaki önemsiz durumları karşılayan bir çözüm bulduğu örnek bir harita girişi gönderin:
- S ve E birbirinden en az 10 harekettir.
- Başlangıçta N birim su içeren herhangi bir kare, tüm karelerin bulunduğu N genişliğinde bir kenarlıkla çevrelenmelidir
.
(su veya S veya E değil)
MİSAL
........2.
..........
..........
S.1..2....
..........
..........
........1.
..3.......
.........E
Herhangi bir karodaki su miktarını artırırsanız, yukarıdakiler önemsiz hale gelir.
Gereksinimler
Muhtemelen programınız, bir çözüm bulmadan önce bir dizi başarısız denemeyle karşılaşacaktır.
- Programınız sonunda çözülebilir girdileri çözmelidir.
- Ölmene izlemek istiyorum program çıktısı hamle ve idama rotanın son harita - her bir çözüm bulmak için başarısız girişimi.
- Kazanan bir çözümle karşılaşırsanız, bunun için tam çıktıyı yazdırın ve sonlandırın.
- Bir çözüm bulunana kadar devam edin, ancak aynı çözümü iki kez denemeyin - tüm ölümler ayrı yollardan yapılmalıdır.
- Bunu bir test girişi kullanın:
(bazı orta noktalarda su önbelleği bırakmak için en az bir hareket gerekir).
S........
.........
.........
........E
Çözdüğü önemsiz bir tanıtım girişi ile gönderilen en kısa kod kazanır.