Kurulum
Aşağıdaki Şekil 1'de gösterildiği gibi 29 numaralı hücre içeren garip şekilli bir kutuyu düşünün.
Bu 2D kutunun içinde iki kare şekilli hayvan türü vardır: shubble ve smol. Şekil 1 (a) bazı shubble'ları mavi ve bazı smolleri kırmızı gösterir. Her canlı tam olarak bir ızgara hücresi kaplar. Kutu 0 ile 26 arasında shubble içerebilir, ancak her zaman tam iki smol içerecektir.
Yerçekimine maruz kalan shubbles ve smoller kutunun altında oturur ve altındaki herhangi bir şeyin üstüne istiflenir. Her iki tür de son derece tembeldir ve sürekli hareketsiz kalır.
Kutu ayrıca, tam olarak bir ızgara hücresini kaplayan siyah bir kare olarak tasvir edilen bir stot içerir. Stot yer çekimine tabi değildir .
Kutuda, şekilde gösterildiği gibi, 28 hücresinin altında bir delik bulunur.
Kutunun içindeki shubble, smol ve stot yapılandırmasını metinsel olarak .
temsil etmek için, numaralandırılmış sırada, boş bir hücreyi o
temsil eden, x
bir smolble'ı temsil eden, ve @
stotı temsil ediyor. Örneğin, Şekil 1 (a) 'nın konfigürasyonu ip ile temsil edilmektedir .........@...o....ooo..xox...
.
Manipulasyonları
Kutu, 90 ° 'nin katları ile döndürülebilir . Kutu döndürülürken, shubbles ve smoller ızgara hücreleri içinde sabit kalır. Bir rotasyon tamamlanır tamamlanmaz, i ) aşağıdaki duvarlardan biri tarafından engellenene kadar doğrudan aşağıya düşer , ii ) bir shubble, smole veya altındaki stot tarafından bloke edilirler veya iii ) 28 hücresindeki delikten düşerler ve kutudan çıkın. Stot düşmez; yaratıklar üstünde dursa bile mevcut hücresinde sabit kalır.
Yaratıklar düşene ve yeni bir kararlı konfigürasyona ulaşana kadar kutu tekrar döndürülemez.
Metinsel olarak, kutu dönüşleri +
saat yönünde 90 ° döndürme, |
180 ° döndürme ve -
saat yönünün tersine 90 ° döndürme ile gösterilir.
Ek olarak stot, bir ızgara hücresinin artışlarıyla dört pusula yönünde hareket ettirilebilir . Hareket şunları yapamaz: i ) stot ile yaratık arasında bir çarpışmaya neden olabilir (yani hedef ızgara hücresi boş olmalıdır), ii ) stot ve duvar arasında bir çarpışmaya neden olabilir veya iii ) stotun kutudan çıkmasına neden olabilir 28 hücresindeki delik.
Ayrıca, üzerinde duran herhangi bir canlı varsa (mevcut yerçekimine göre) stot hareket etmeyebilir .
Metin olarak, stot hareketleri <
sol, >
sağ, ^
yukarı ve v
aşağı için ile gösterilir. Stot hareketleri her zaman şekillerde gösterilen "standart" (döndürülmemiş) çerçeveye göre belirlenir. Yani, eğer hücre 10 hücresindeyse, hareket ^
daima hücre 5'e hareket >
edecektir ve hareket daima hücre 11'e hareket edecektir. Kutunun oryantasyonu hareketin yönünü etkilemez.
Manipülasyon dizileri soldan sağa karakter dizgileri kullanılarak kodlanır. Örneğin, dize +<<^-
kutunun saat yönünde 90 ° döndürüldüğünü gösterir, daha sonra stot iki kez ve standart çerçeveye göre bir kez yukarı sola hareket ettirilir, daha sonra kutu saat yönünün tersine 90 ° döndürülür.
Meydan okuma
Gayet iyi nedenlerden dolayı (ben ifşa edemez), biz kutusundan tüm shubbles kurtarmak isteyen olmadan tek Smole extricating. Bunu başarmak için, yukarıda özel olarak açıklanan manipülasyonları kullanabiliriz.
Bu sorunu çözmeden önce, çeşitli manipülasyonlarımızın, bu zorluğun odağı olan kutunun içeriğini nasıl etkileyeceğini simüle etmek bizi harekete geçirir.
stdin
(Veya dengi) ifadesinden iki bağımsız değişkeni kabul eden bir program yazmalısınız :
- kutunun başlangıç durumunu tanımlayan bir dize
- bir dizi manipülasyon
Her iki argümanın da sözdizimsel olarak geçerli olduğunu, kutunun standart yönde başladığını ve kutunun başlangıç durumunun kararlı ve yasal olduğunu varsayabilirsiniz.
Program aşağıdakilerden birine stdout
(veya eşdeğerine) çıktı almalıdır :
( durum 1 ) hamle sırası yasalsa (stot hamle kurallarını ihlal etmiyorsa) ve herhangi bir smolenin kutudan çıkmasına neden olmazsa, dize olarak ifade edilen kutunun son durumu. Kutunun son yönü önemsizdir.
( durum 2 )
!
hamle sırası yasadışıysa veya herhangi bir küçükün kutudan çıkmasına neden oluyorsa , tek bir ünlem işareti
puanlama
Kazanan program, son derece kazançlı bonus çarpanlarına tabi olarak, bayt sayısına göre en kısa programdır :
Bir İstem 0.65 çarpanı halinde yerine durumda 1 kodlanmış çıkış baskı, programın shubbles, smoles, stots ve boş hücreler için spec karakterleri kullanarak ve a yerleştirilmesi, son durumunda ve yönelimde meydana gelen kutusunun bir ASCII resim üretir
*
Hücre 28'deki deliğin hemen dışında yer alır.Örneğin, Şekil 1 (a) 90 ° döndürülürse, çıkış
. . ..... .o... xo.@. *ooo.. x .
Bir İstem 0.22 çarpanı halinde yerine durumda 1 kodlanan çıkış baskı, program bir görüntü dosyası ya da görüntüler son durumunda ve yönelimde meydana gelen kutusunda bir resim ile bir GUI penceresi verir. Resim, Şekil 1 (a) 'daki tarzda olmalı ve ızgara kutuları, duvarlar ve renkli kutular kullanarak yaratıkları / stoku göstermelidir.
durum 1 için kodlanmış çıktıyı yazdırmak yerine, program 1 saniye aralıklarla simülasyondaki tüm ara durumları gösteren bir animasyonlu .gif veya animasyonlu GUI penceresi çıkarırsa 0.15 çarpanı talep edin. 0.22 çarpanı ile aynı resim kuralları geçerlidir. Animasyonun ilk karesi, simülasyonun başlangıç durumunu göstermelidir. Ayrıca, animasyon "gizli" ara durumları göstermelidir.
bir döndürmeden sonra animasyon çerçevesi başına bir hücre tarafından kararlı bir konfigürasyona düşen shubbles / smol
180 ° dönüşte kutunun ara 90 ° döndürülmüş durumu
Program yukarıdaki stilde bir animasyonlu .gif veya animasyonlu GUI penceresi oluşturuyor, ancak 20 fps'de çalışıyorsa ve şovlar gösteriyorsa 0.12 çarpanını talep edin
Kutunun dönmesinin düzgün, sürekli animasyonları
hareket eden stoğun ve sabit bir konfigürasyona düşen shubbles / smollerin düzgün, sürekli animasyonları
28 hücresindeki delikten düşen shubble'lar kutudan çıkarken gösterilmeli ve tamamen dışarıda bir kez yok olmalıdır. En fazla 1 manipülasyon / sn gerçekleştirilmediği sürece animasyon için kendi zamanlamanızı seçebilirsiniz.
Toplam puan floor( base score * multiplier )
. Yalnızca bir çarpan talep edilebilir.
Ne de olsa akıllı bir dünya. ;)