Oyun
Birçoğumuz , bir kurbağayı yoğun bir karayolu ve eve güvenli bir şekilde gelmesi için tehlike dolu bir gölet boyunca güvenli bir şekilde atlamak olan 80'li yılların arcade oyunu Frogger'i biliyoruz .
Bir meydan okuma verildiği bir Frogger klon geliştirmek için birkaç ay önce. Ama neden Frogger oynayabiliyorsanız Frogger'ı klonlayın ? :)
Aşağıdaki basitleştirilmiş oyun ızgarasını düşünün:
XXXXXXXXXXXXXXXXXXXXXXX North Safe Zone
-----------------------
| | <<<< Express Lane West (Lane 1)
| | > Gridlock East (Lane 2)
| | << Freeflowing Traffic West (Lane 3)
| | < Gridlock West (Lane 4)
| | >>>> Express Lane East (Lane 5)
-----------------------
XXXXXXXXXXX@XXXXXXXXXXX South Safe Zone
\__________ __________/
'
23 cells horizontally
Her biri 23 hücre genişliğinde ve kurbağanın güvenli bir şekilde sola ve sağa hareket edebildiği iki güvenli bölgeye, ayrıca 23 hücre genişliğine sahip beş şerit şeridimiz var. Resimsel netlik için sağ ve sol sınırları göz ardı edebilirsiniz.
Kurbağa @
, yukarıdaki şekilde a ile gösterildiği gibi, güney güvenli bölgede, orta (12.) hücrede başlar .
Oyundaki süre, kare adı verilen ayrık adımlara ayrılmıştır. Froggy hızlı bir kurbağadır ve bir hücreyi çerçeve başına herhangi bir yönde (yukarı, aşağı, sağ, sol) atlayabilir. Herhangi bir çerçeve için sabit kalmayı da seçebilir. Beş şeritteki trafik aşağıdaki gibi sabit hızlarda hareket eder:
- ekspres şerit batıdaki (şerit 1) trafik her hücreyi 2 hücre sola taşır
- gridlock doğu şeridindeki (şerit 2) trafik her saniye karesinde 1 hücre sağa hareket eder
- serbest akışlı trafikteki batı şeridindeki (şerit 3) her kareyi 1 hücre sola taşır
- gridlock batı şeridindeki (şerit 4) trafik her saniye karesinde 1 hücre sola hareket eder
- ekspres şeritte doğu şeridi (şerit 5) her kareyi 2 kare sağa taşır
Trafiğin kendisi yaklaşık olarak tanımlanır. Bu metin dosyasında 3.000 zaman aralığı . 'Trafik' araçlardan ve araçlar arasındaki boşluklardan oluşur. Boşluk olmayan herhangi bir karakter bir aracın parçasıdır. Metin dosyası, beş şerit şeridine karşılık gelen beş satır içerir (aynı sırada).
Batıya giden şeritlerde, 0 karesinin başlangıcında (oyunun başlangıcı), şeritteki ilk aracın oyun ızgarasının sağ kenarının hemen ötesinde olduğunu düşünüyoruz.
Doğuya giden şeritlerde, trafik ipinin araçların ipin sonunda başladığı anlamında "geri" olarak düşünülmesi gerekir . 0 çerçevesinin başlangıcında, bu şeritlerdeki ilk aracın oyun alanının sol kenarının hemen ötesinde olduğunu düşünüyoruz.
Örnek olarak düşünün:
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
Ardından oyun ızgarası aşağıdaki gibi görünecektir:
Start of Frame 0 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 1 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 2 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 3 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Bir şeritteki tüm trafik "tükendikten" (yani, dize bittikten) sonra, dizedeki tüm karakterlerin boşluk olduğunu düşünürüz.
Aşağıdakilerden herhangi biri gerçekleşirse kurbağa ezilir :
- kurbağa, herhangi bir çerçevede bir araç tarafından işgal edilen bir hücreyi işgal eder
- kurbağa ekspres şeritte sabit kalır ve bu çerçevede 1 hücre genişliğinde bir araç onun üzerinden geçer.
- kurbağa batıya doğru giden bir araçtan doğuya atlar veya doğuya doğru giden bir araçtan batıya atlar
- kurbağa 7 (çizgi) dışında 23 (hücre) oyun ızgarası dışında herhangi bir kareye atlar
Bunların bir kurbağanın ezildiği tek koşullar olduğunu unutmayın . Özellikle, aynı çerçeve içinde bir genişlik-1 aracı tarafından geçirilen ekspres şeritte bir hücreye hücrenin içine veya dışına atlayan bir kurbağa gibi, "ile" trafiği boyunca atlayan bir kurbağaya izin verilir.
Amaç ve Puanlama
Programlama zorluğunun amacı , son araç oyun ızgarasından çıkmadan önce kurbağayı mümkün olduğunca çok kez yoldan geçirmektir . Yani, program X çerçevesinin tamamlanmasından hemen sonra sona erer , burada X çerçevesi, ızgarayı daha fazla aracın olmadığı bir duruma götüren ilk çerçevedir.
Programınızın çıktısı, aşağıdaki kodlamayı kullanarak kurbağa için hareket sırasını içeren bir dize (veya metin dosyası) olmalıdır:
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
Örneğin, dize <<^.^
kurbağanın iki kez sola, sonra yukarı, sonra bir kare için durakladığını, sonra tekrar yukarı hareket ettiğini gösterir.
Kurbağa güney güvenli bölgeden kuzey güvenli bölgeye geçtiğinde bir puan, kurbağa kuzey güvenli bölgeden güney güvenli bölgeye geçtiğinde bir puan kaydedilir.
Bazı önemli kurallar:
- Kurbağa ezilmemelidir.
- Lütfen çözümünüzü (hamle sırası) satıriçi veya bir metin dosyası (örn. Pastebin.com kullanarak) program kodunuzla birlikte gönderin.
- Kurbağamız ileri görüşlü ve öngörüldür, bu nedenle programınız çözüm ararken herhangi bir çerçevedeki tüm trafik verilerini kullanabilir . Bu, henüz oynatma ızgarasına ulaşmamış trafik verilerini içerir.
- Izgara etrafına sarılmaz. Izgaradan çıkmak kurbağanın ezilmesine neden olur ve bu nedenle izin verilmez.
- Hiçbir noktada trafik "sıfırlanmaz" ya da kurbağa "ışınlanır". Simülasyon süreklidir.
- Kurbağa çıktıktan sonra güney güvenli bölgeye dönebilir, ancak bu bir nokta olarak sayılmaz. Aynı şekilde kuzey güvenli bölgesi için.
- Yarışma kazananı, en yüksek geçiş sayısını veren hareket dizisini üreten programdır.
- Başka sorularınız veya endişeleriniz varsa, lütfen yorum bölümünde sormaya çekinmeyin.
Eklenen bazı teşvikler için, kazanan programa bunu yapabildiğimde +100 temsilcilik bir ödül ekleyeceğim .
Bonuslar
Kurbağanın temas ettiği oyun ızgarasının her köşesi için % + 2,5 taban puan * (% + 10'a kadar). Izgaranın dört köşesi, iki güvenli bölgenin en sol ve en sağdaki hücreleridir.
Taban puanına +% 25 * Eğer hareket diziniz tüm kurgu için kurbağanın başlangıç hücresinin solunda veya sağında +/- 4 hücre içinde kalmasını sağlıyorsa (tabii ki dikey olarak serbestçe hareket edebilir).
Hiçbir puanlama bonusu, ama OP özel sahne hızlı bir n 'kirli çözüm doğrulayıcı gönderen herkese gidecek, böylece bir programlamak zorunda kalmazsınız. ;) Bir validator basitçe bir dizi hamleyi kabul eder, yasallığını sağlar (kurallara ve trafik dosyasına göre) ve puanını rapor eder (yani toplam geçiş sayısı).
* Toplam puan taban puan artı ikramiye eşittir, en yakın tamsayıya yuvarlanır.