Permainan
Sebagian besar dari kita tahu tentang Frogger , game arcade era 80-an di mana tujuannya adalah untuk melompat katak dengan aman melintasi jalan raya yang sibuk dan kolam penuh bahaya untuk tiba dengan selamat di rumah.
Sebuah tantangan dikeluarkan beberapa bulan lalu untuk mengembangkan klon Frogger. Tapi mengapa mengkloning Frogger ketika Anda bisa bermain Frogger? :)
Pertimbangkan kotak permainan yang disederhanakan berikut:
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
Kami memiliki lima jalur lalu lintas, lebar masing-masing 23 sel, dan dua zona aman (tempat katak dapat bergerak dengan aman ke kiri dan ke kanan), juga lebar 23 sel. Anda dapat mengabaikan batas kanan dan kiri karena ini untuk kejelasan gambar.
Katak kami mulai di zona aman selatan, di sel tengah (ke-12), seperti yang ditunjukkan pada gambar @
di atas.
Waktu dalam game dibagi menjadi beberapa langkah yang disebut frame. Froggy adalah katak cepat dan dapat melompat satu sel ke segala arah (atas, bawah, kanan, kiri) per bingkai. Dia juga dapat memilih untuk tetap diam untuk setiap frame. Lalu lintas di lima jalur bergerak dengan kecepatan konstan sebagai berikut:
- lalu lintas di jalur cepat barat (jalur 1) bergerak 2 sel meninggalkan setiap bingkai
- lalu lintas di jalur timur kemacetan (jalur 2) bergerak 1 sel ke kanan setiap frame kedua
- lalu lintas di jalur barat lalu lintas yang mengalir bebas (jalur 3) bergerak 1 sel ke kiri setiap frame
- lalu lintas di jalur barat kemacetan (jalur 4) bergerak 1 sel tersisa setiap frame kedua
- lalu lintas di jalur ekspres timur (jalur 5) bergerak 2 sel ke kanan setiap frame
Lalu lintas itu sendiri secara unik ditentukan untuk kira-kira. 3.000 tanda waktu dalam file teks ini . 'Lalu lintas' terdiri dari kendaraan dan ruang antar kendaraan. Setiap karakter yang bukan merupakan ruang adalah bagian dari kendaraan. File teks berisi lima baris, sesuai dengan lima jalur lalu lintas (dengan urutan yang sama).
Untuk jalur yang mengarah ke barat, pada awal frame 0 (awal permainan), kami menganggap kendaraan pertama di jalur tersebut berada tepat di luar tepi kanan kotak permainan.
Untuk jalur yang menuju ke timur, tali lalu lintas harus dianggap "mundur" dalam arti bahwa kendaraan muncul mulai dari ujung tali. Pada awal frame 0, kami menganggap kendaraan pertama di jalur ini berada tepat di luar tepi kiri lapangan bermain.
Pertimbangkan sebagai Contoh:
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
Maka kotak bermain akan muncul sebagai berikut:
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
Setelah semua lalu lintas di jalur "habis" (mis. String habis), kami menganggap semua karakter dalam string sebagai spasi.
Katak kami diperas jika terjadi hal-hal berikut:
- katak menempati sel yang ditempati oleh kendaraan, pada bingkai apa pun
- katak tetap diam di jalur cepat dan kendaraan sel 1 melewatinya dalam bingkai itu
- katak melompat ke timur "melalui" kendaraan yang menuju ke barat, atau melompat ke barat melalui kendaraan yang menuju ke timur
- katak melompat di luar 7 (garis) dengan 23 (sel) bermain kotak, pada bingkai apa pun
Perhatikan bahwa ini adalah satu - satunya kondisi di mana seekor katak terjepit. Khususnya, katak yang melompat-lompat di sepanjang "dengan" lalu lintas diizinkan, seperti katak yang melompat masuk atau keluar sel dalam jalur cepat yang dilewati oleh kendaraan lebar-1 dalam bingkai yang sama.
Objektif dan Penilaian
Tujuan dari tantangan pemrograman adalah untuk mendapatkan katak menyeberang jalan sebanyak mungkin sebelum kendaraan terakhir keluar dari kisi bermain . Yaitu, program berakhir segera setelah frame X selesai , di mana frame X adalah frame pertama yang membawa grid ke keadaan di mana tidak ada lagi kendaraan yang ada.
Output dari program Anda harus berupa string (atau file teks) yang berisi urutan gerakan untuk katak menggunakan pengkodean berikut:
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
Misalnya, string <<^.^
menunjukkan bahwa katak bergerak ke kiri dua kali, lalu naik, lalu berhenti untuk satu bingkai, lalu bergerak ke atas lagi.
Satu titik diberi skor setiap kali katak menyeberang dari zona aman selatan ke zona aman utara, dan satu titik diberi skor setiap kali katak menyeberang dari zona aman utara ke zona aman selatan.
Beberapa aturan penting:
- Katak tidak harus diperas.
- Silakan posting solusi Anda (urutan langkah) bersama dengan kode program Anda, baik sebaris atau sebagai file teks (misalnya menggunakan pastebin.com).
- Katak kami mahir dan prekognisi, karenanya program Anda dapat menggunakan setiap dan semua data lalu lintas dalam kerangka apa pun sembari mencari solusi. Ini termasuk data untuk lalu lintas yang belum mencapai kotak permainan.
- Grid tidak membungkus. Keluar dari kisi akan menyebabkan katak menjadi terjepit dan karenanya tidak diizinkan.
- Pada titik tidak lalu lintas "reset" atau katak "teleport". Simulasi ini kontinu.
- Katak dapat kembali ke zona aman selatan setelah keluar, tetapi ini tidak dihitung sebagai titik. Demikian juga untuk zona aman utara.
- Pemenang kontes adalah program yang menghasilkan urutan langkah menghasilkan jumlah penyeberangan tertinggi.
- Untuk pertanyaan atau masalah tambahan, silakan bertanya di bagian komentar.
Untuk beberapa insentif tambahan, saya akan menambahkan hadiah +100 perwakilan ke program pemenang ketika saya bisa melakukannya.
Bonus
+ 2,5% hingga skor dasar * (hingga + 10%) untuk setiap sudut kotak permainan yang disentuh katak. Empat sudut kisi adalah sel paling kiri dan paling kanan dari dua zona aman.
+ 25% ke skor dasar * jika urutan gerakan Anda membuat katak terbatas dalam +/- 4 sel di kiri atau kanan sel awal untuk seluruh simulasi (tentu saja ia dapat bergerak bebas secara vertikal).
Tidak ada bonus penilaian, tetapi alat peraga khusus di OP akan diberikan kepada siapa saja yang memposting validator solusi cepat dan kotor sehingga saya tidak harus memprogramnya. ;) Seorang validator hanya akan menerima serangkaian langkah, memastikan legalitasnya (sesuai aturan dan file lalu lintas), dan melaporkan skornya (yaitu jumlah total penyeberangan).
* Total skor sama dengan skor dasar ditambah bonus, dibulatkan ke bilangan bulat terdekat.
Jawaban:
C ++: 176
Keluaran:
Ada di bawah 8 juta
negarakombinasi posisi X waktu X set sudut yang dikunjungi, sehingga mereka dapat dicari secara mendalam dalam waktu kurang dari 1 detik. Jika kode tidak memiliki bug, seharusnya tidak mungkin dikalahkan. Strategi optimal adalah menggunakan seluruh papan, karena itu memungkinkan froggy untuk menyeberang jalan 160 kali, dibandingkan sekitar 120 ketika terbatas pada pusat. Mengunjungi sudut tidak memerlukan biaya penyeberangan karena lalu lintas sangat padat.sumber