Göreviniz bir RoboZZle yorumlayıcısı yazmaktır. Oyuna aşina değilseniz, lütfen robozzle.com adresindeki videoyu izleyin veya aşağıdaki açıklamamı okuyun.
Bir robot, kırmızı, yeşil, mavi veya siyah renkli dikdörtgen bir ızgara üzerinde yaşar. Siyah karelere erişilemez. Diğerlerine erişilebilir ve bazılarında yıldız vardır. Amaç, siyah karelere basmadan veya haritadan düşmeden tüm yıldızları toplamaktır. Robot bir kareyi işgal eder ve belirli bir yöne bakar - sola, sağa, yukarı veya aşağı. F1, F2, ..., F5 alt rutinlerine gruplanmış montaj benzeri talimatları takip eder. Bir talimat bir çift yüklem ("hiçbiri", "kırmızı ise", "yeşil ise", "mavi ise") ve bir eylem ("ileri git", "sola dön", "sağa dön"), "mevcut kareyi kırmızıya boya", "yeşil boya", "mavi boya", "hiçbir şey yapma", "F1'i ara", ..., "F5'i ara"). Altyordamlara yapılan çağrılar bir yığın kullanır ve özyinelemeli olabilir. Tıpkı konvansiyonel programlamada olduğu gibi, bir altyordamın son talimatı tamamlandıktan sonra, yürütme altyordamın çağrıldığı noktadan itibaren devam eder. Uygulama, F1'in ilk talimatından başlar ve robot yıldızlarla tüm kareleri ziyaret edene veya robot siyah bir kareye veya haritanın dışına adım atana veya 1000 talimat yürütüldüğünde (başarısız tahminler ve "hiçbir şey yapma" eylemleri gerçekleşene kadar devam eder. sayılmaz) veya yürütmek için başka talimat yoktur (yığın düşük akışı).
girişler:
a
- bir haritayı kodlayan 12x16 karakterlik bir matris (genellikle dilinizde gösterildiği gibi, örneğin dizeler dizisi) -'#'
erişilemez (siyah) kareler için,'*'
yıldız içeren kareler'.'
için, geri kalanı içinc
- erişilebilir karelerin renklerini tanımlayan 12x16 karakterlik bir matris -'R'
(kırmızı),'G'
(yeşil) veya'B'
(mavi). Ulaşılamayan kareler üçünden rasgele bir harfle temsil edilecektir.y
vex
- robotun 0 tabanlı sırası ve sütunu;a[y][x]
olduğu garanti edilmektedir'.'
d
- yön robot karşı karşıyadır:0 1 2 3
hakkı için, aşağı, yani doğru, yukarı, sol(y,x+1)
,(y+1,x)
,(y,x-1)
,(y-1,x)
f
- tek bir dize, F1 ... F5'in sıralı uygulamaları. Her uygulama, a ile sonlandırılmış (muhtemelen boş) yüklem eylemi çiftleri dizisidir (alt rutin başına en fazla 10 çift)'|'
.yüklemler:
'_'
hiçbiri,'r'
kırmızı,'g'
yeşil,'b'
mavieylemler:
'F'
ileri git,'L'
sola'R'
dön, sağa dön,'r'
kırmızı'g'
boya, yeşil'b'
boya, mavi boya,'1'
F1'i ara, ...,'5'
F5'i ara,'_'
hiçbir şey yapma
Girdilerinizi yukarıdaki gibi adlandırmanız gerekmez, ancak değerleri belirtildiği gibi olmalıdır.
Çıktı: 1
(veya true
) robot tüm yıldızları kurallara göre toplarsa, 0
( false
) aksi takdirde.
Örnek :
a=["################","################","##*....*...*#.##","##.####.#####.##","##.####.#####.##","##.####*...*#.##","##.########.####","##*........*#.##","################","################","################","################"]
c=["RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRBBBBRGGGGRRRR","RRBRRRRGRRRRRRRR","RRBRRRRGRRRRRRRR","RRBRRRRRGGGBRRRR","RRBRRRRRRRRGRRRR","RRRBBBBGGGGBRBRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR"]
y=2; x=6; d=2
// and then depending on "f":
f="_FrLg2_1|_FbLrR_2||||" // result:1
f="_FrRg2_1|_FbLrR_2||||" // result:0 (stepped on a black square)
f="_FrLrL_1|_FbLrR_2||||" // result:0 (1000-step limit exceeded)
f="_FrLg2__|________||||" // result:0 (stack underflow)
"Boya" talimatlarını içeren başka bir örnek :
a=["#***************","#*###*###*###*##","#*###*###*###*##","***#***#***#***#","***#***#***#***#","*###*###*###*###","***#***#***#***#","***#***#***#***#","***#***#***#***#","*###*###*###*###","*.*#***#***#***#","***#***#***#***#"]
c=["RGGGGGGGGGGGGGGG","RBRRRGRRRGRRRGRR","RBRRRGRRRGRRRGRR","RBRRGGGRGGGRGGGR","BRRRGGGRGGGRGGGR","BRRRGRRRGRRRGRRR","BRRRGGGRGGGRGGGR","RBRRGGGRGGGRGGGR","BRRRGGGRGGGRGGGR","BRRRGRRRGRRRGRRR","BGRRGGGRGGGRGGGR","RBRRGGGRGGGRGGGR"]
y=10; x=1; d=0
f="_2_R_R_1|_FgRgFgFg3rRr4b2_Fgb|_F_F_R|_2_L_r||"
// result:1
Kendi testinizi oluşturmak için robozzle.com adresindeki listeden bir bulmacaya gidin , çözmeye çalışın (veya çözmeyin ), tarayıcınızda F12 tuşuna basın, JS konsoluna yazın:
r=robozzle;s=JSON.stringify;with(r.level)console.log('a='+s(Items)+'\nc='+s(Colors)+'\ny='+RobotRow+'\nx='+RobotCol+'\nd='+RobotDir+'\nf='+s(r.encodeSolution()))
ve sonucu diliniz için yeniden biçimlendirin.
En kısa kazanç. Boşluk yok.