Perburuan Telur Paskah
Bot menemukan telur sebelum kelinci menemukan telur. Bot senang.
Gambaran
Ini adalah tantangan raja untuk menghormati Paskah dan tradisi berburu telur Paskah!
Bot Anda memiliki visi dua ruang di setiap arah, termasuk diagonal, menciptakan kotak 5x5 di sekitar Anda yang dapat Anda lihat. Ia mencari telur, dan siapa pun yang menemukan telur terbanyak akan menang!
Papan
Papan akan terdiri dari o
s, yang merupakan telur Paskah, #
s, yang merupakan dinding, *
s, yang merupakan pemain lain, dan s, yang merupakan ruang kosong.
- Itu akan menjadi persegi dengan panjang tepi
(number of entries) * 3
. - Itu akan dikelilingi oleh dinding.
- Di dalam dinding akan ada bermacam-macam dinding garis lurus yang ditempatkan secara acak
#
, yang akan memiliki panjang acak antara 2 dan 10 inklusif. Akan ada(number of entries) * 3
dari mereka. - Telur-telur itu kemudian akan ditempatkan secara acak. Akan ada
(number of entries) * 4
dari mereka, dan mereka hanya akan dihasilkan padakotak kosong ( ).
- Harus ada setidaknya 7 entires agar proses pembuatan papan berfungsi dengan benar.
Berikut ini adalah JSFiddle yang akan menghasilkan papan acak untuk Anda uji. Ini sebuah contoh, dengan (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Setelah papan dibuat, setiap pemain ditempatkan pada kotak acak (ruang kosong).
Memasukkan
Anda akan mengambil enam baris input. Lima baris pertama adalah bidang penglihatan Anda (ruang di luar batas papan akan diwakili oleh X
, dan ruang tengah akan selalu *
, Anda), dan baris keenam akan kosong (pada awalnya).
Keluaran
Anda akan menghasilkan tiga baris. Pertama, arah yang Anda inginkan:
1 2 3
8 YOU 4
7 6 5
(9 adalah no-op jika Anda tidak ingin pindah), kedua, salah satu taktik A
, C
ounter, atau N
othing (ini akan dijelaskan secara mendalam segera), dan baris ketiga akan menjadi string dengan panjang hingga 1024 Ini akan menjadi memori bot Anda. Anda dapat menggunakannya untuk apa pun yang Anda inginkan, atau Anda dapat membiarkannya kosong. Memori ini kemudian akan menjadi baris input keenam untuk program Anda pada proses selanjutnya.
Semua jalur keluaran selanjutnya diabaikan, dan jika hanya ada satu jalur, yang kedua diasumsikan kosong.
Bergerak
Proses berikut digunakan untuk menentukan ke mana Anda pindah:
- Jika, ketika Anda bergerak, Anda berakhir di ruang kosong (
), pemain Anda ditempatkan di ruang itu.
- Jika Anda berakhir di dinding (
#
), gerakan Anda diabaikan dan Anda kehilangan giliran. - Jika Anda berakhir dengan telur (
o
) atau pemain (*
), informasi ini disimpan dan akan digunakan setelah semua orang pindah.
Setelah semua orang pindah, ambiguitas teratasi.
Jika ada dua pemain yang mendarat di ruang yang sama, perkelahian terjadi! Di sinilah A
/ C
/ N
masuk untuk bermain. Serangan A
ketukan N
othing (serangan normal), N
othing ketukan C
ounter (Anda tidak dapat melawan apa-apa), dan C
ounter mengalahkan detak A
(serangan balik). Pemain yang memenangkan pertarungan ini tetap berada di kotak mereka, dan pemain yang kalah akan kembali ke kotak awal yang mereka mulai. Jika terjadi seri, kedua pemain kembali ke posisi semula.
Jika pemain yang kalah atau terikat kembali ke tempat mereka berada dan ada pemain lain di sana, tidak ada pertarungan dan pemain lain juga akan kembali ke ruang asalnya. Jika ini ruang memiliki pemain lain, bahwa pemain kembali, dan ini terus sampai semua pemain berada dalam ruang yang berbeda.
Jika ada tiga atau lebih pemain dalam satu ruang, mereka semua kembali ke posisi semula.
Jika ada pemain yang masih berdiri di atas telur ...
- Jika pemain memilih
A
, telur dihancurkan. - Jika pemain memilih
C
, tidak ada yang terjadi dan pemain kembali ke ruang aslinya. - Jika pemain memilih
N
, pemain mengambil telur! Skor pemain bertambah satu dan telur dikeluarkan.
Bahasa
Anda dapat menggunakan bahasa apa pun yang tersedia secara bebas di Windows, OSX, dan Linux, untuk memastikan keadilan di antara setiap kontestan. Jika kode ini tidak dapat dijalankan secara bebas tetapi dapat dikompilasi atau dikemas ke dalam format yang ada, harap sertakan juga format ini dalam jawaban Anda. Idealnya, jika Anda dapat mengkompilasi kode Anda ke bahasa yang lebih umum (mis. CoffeeScript -> JavaScript), silakan lakukan.
Mencetak gol
Skor Anda akan menjadi jumlah rata-rata telur yang Anda kumpulkan dari sepuluh run. Berlari berakhir ketika semua telur dikumpulkan atau ketika (number of entries * 25)
belokan telah lewat. Saya akan secara manual memastikan bahwa mungkin untuk mencapai semua telur untuk setiap peta (dengan terus menghasilkan peta sampai semua telur dapat dijangkau).
Papan angka
Papan skor akan ditambahkan ketika semua kondisi berikut dipenuhi:
- Setidaknya tujuh entri yang valid dengan skor positif atau nol (tidak diturunkan) telah dikirimkan
- Setidaknya 48 jam telah berlalu sejak penciptaan tantangan ini (UTC 14:23)
Aturan tidak akan berubah selama periode pra-kontes ini, kecuali untuk menambahkan klarifikasi di mana aturan tidak jelas. Setelah papan skor dipasang, program pengujian juga akan diposting di sini sehingga Anda dapat menguji entri Anda. Kode pengujian untuk ini masih dalam proses, tetapi dapat dimainkan dan berfungsi. Ini repo GitHub.
9
, ia tidak akan pernah bisa diserang secara berarti. Jika pemain lain (B) melangkah ke kotak pemain itu dan menang, A akan dipindahkan kembali ke kotak aslinya (yang sama). Tapi sekarang ada bentrokan karena A dan B ada di sana, jadi B harus kembali ke alun-alun sendiri. Jadi hasilnya tidak tergantung pada pertarungan yang sebenarnya, B selalu bergerak kembali ke awal kuadrat dan A selalu bertahan. Itu akan memungkinkan saya untuk menulis keduanya yang dapat membantu pengiriman lain dengan memblokir jalan bagi orang lain.