Eminim o bardakların piramitlerde (ve diğer şekillerde) istiflenebildiğinden eminim:
A
A A A
A A A A A
A A A A A A A A
Evet, A
kesinlikle bir bardağı temsil etmek için yeterli bir karakter.
Zemine, yapının sağına veya iki bitişik bardağın üzerine yeni bardaklar eklenebilir. İşte yine yukarıdaki yapı, ancak yeni kupalar için mevcut tüm noktalar aşağıdakilerle işaretlenmiştir _
:
_ A
A A A
A _ _ A A A A
A A A A A A A A _ _ _
Diyelim ki bu bardak yığınlarını monte edebilecek bir robot yapmak istiyoruz. Robot, böyle bir yapıyı işlemek için iki basit talimatı anlayacaktır:
a
: Soldan sağa okuma sırasına göre ilk kullanılabilir noktaya yeni bir bardak ekleyin (yani, uygun bir nokta bulana kadar satırları yukarıdan aşağıya, soldan sağa tarayın, sonra bardağı yerleştirin). Yukarıdaki örnek şöyle olacaktır:A A A A A A A A A A A A A A A A A A
r
: İlk kabı soldan sağa okuma sırasına göre çıkarın. Yukarıdaki örnek şöyle olacaktır:A A A A A A A A A A A A A A A A
Sadece bu iki işlem kullanılarak herhangi bir yapının sıfırdan inşa edilebileceği ortaya çıktı . Örneğin
A
A A A
A A A A A
Talimatların sırası ile inşa edilebilir
aaaaaaaaaaaarrrrraa
Yukarıdaki daha büyük örnek kullanılarak oluşturulabilir
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrraaaaaaarr
İşte daha da büyüğü:
A
A A A
A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A A
ile inşa edilebilir
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrraaaaaaaaaaaaaarrrrrrrrrrraaaaaaaa
Not: Yerdeki lekeler sökme talimatı ile serbest bırakılırsa, bardakları mevcut tüm bardakların sağına yerleştirmeden önce yeniden kullanılacaktır . Örneğin
aaaarrra
verecek
A A
değil
A A
Yerin, yarı sonsuz bir fincan bardak üstünde olduğunu düşünebilirsiniz.
Meydan okuma
Yığılmış bardakların bir yapısı göz önüne alındığında, bu yapıyı oluşturmak için talimatları temsil eden bir sıra döndürün. Birincil puanınız, altta verilen test durumlarına ilişkin talimat sayısının toplamıdır. Eşitlik durumunda (bu muhtemelen etkili bir en uygun çözümün mümkün olduğuna ikna olduğum için), en kısa çözüm kazanır.
İşte kurallar hakkında daha ayrıntılı bilgi:
- Girişin alt satırında ön boşluk bulunmadığını, bu nedenle her zaman kullanılan bir bardak için en soldaki zemin noktasının olduğunu varsayabilirsiniz.
- Makul miktarda takip eden boşluk (varsayımsız boşluk bırakabilirsiniz (boşluk bırakmayın, bir boşluk bırakmayın, bir dikdörtgene kadar yatık bir dikdörtgene kadar doldurun).
- İsteğe bağlı olarak, girişin tek bir izleyen yeni satırda bitmesini bekleyebilirsiniz.
A
Boşluklar yerine herhangi iki farklı yazdırılabilir ASCII karakteri (0x20 - 0x7E, dahil) seçebilirsiniz ( boşluklarla ilgili kurallar sonra seçtiğiniz karaktere aktarılır).- Çıktınız, işlemleri temsil eden yalnızca iki farklı karakter içermelidir (
a
ve dışında başka karakterler seçebilirsinizr
). İsteğe bağlı olarak tek bir izleyen yeni satır yazdırabilirsiniz. - Kodunuz makul bir masaüstü bilgisayarında aşağıdaki test durumlarından herhangi birini bir dakikadan daha kısa sürede çözebilmelidir (benim için iki dakika sürerse, size şüphe avantajı veririm, ancak ondan alırsam 't - Bir tanesinden daha kısa sürede çözen optimal bir algoritmanın mümkün olduğuna inanıyorum).
- Kodunuzu bireysel test durumlarına göre optimize etmemelisiniz (örneğin, bunları kodlayarak). Bunu yapan birinin şüphesini alırsam, test durumlarını değiştirme hakkını saklı tutarım.
Bu CJam betiğini ters işlem için kullanabilirsiniz : bir dizi inşaat talimatı alacak ve elde edilen bardak yığınını yazdıracaktır. (Snippet'i yeniden yazdığı ve önemli ölçüde hızlandırdığı için Dennis'e teşekkür ederiz.)
Sp3000 aynı zamanda bu alternatif Python betiğini de aynı amaçla sağladı .
Test Kılıfları
Her test durumundan sonra, Ell'in cevabına göre en uygun talimat sayısını belirten bir numara vardır.
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
820
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
1946
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
2252
A A
A A A A
A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
9958
A A
A A A A
A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5540
A A A A A A A A A A A A A A A A A A A A
10280
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
10320
A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5794
A
A A
A A A
A A A A A
A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
3297
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A
A A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
4081
A
A A A A
A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
4475
A
A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5752
Bu, mümkün olan en iyi skor 64.515 talimatı anlamına gelir .