Kekurangan makanan di Snakepit
Untuk pertama kalinya dalam 35 tahun, snakepit kehabisan makanan. Ular penghuni sekarang harus saling bertarung untuk bertahan hidup dari kekurangan makanan ini. Hanya satu ular yang bisa berdiri di puncak rantai makanan!
Papan peringkat
Belum datang!
Pembaruan terakhir pada 24 Februari
Tautan ke visualisasi pertandingan terakhir
Deskripsi
Jika Anda ingin memperjuangkan sisa apel / ceri / apa pun yang tersisa, Anda harus memberikan ular dalam bentuk program yang menerima input yang diberikan dan mengembalikan langkah selanjutnya.
Satu-satunya twist adalah bahwa Anda tidak sendirian di lubang Anda. Ular lain juga akan mencoba mendapatkan makanan langka! Tapi gelap di dalam snakepit sehingga Anda hanya bisa melihat diri sendiri dan apel. Menabrak lawan akan menghasilkan kematian Anda, seperti menggigit diri sendiri atau menabrak tembok. Selain itu, karena apel jarang ada hari ini, Anda kelaparan jika lawan makan cukup untuk mencapai panjang 7.
Snakepit adalah peta dua dimensi dengan lebar dan tinggi 15, sedangkan ubin terluar membangun dinding yang tidak bisa dilewati:
0 1 2 . . . c d e
0 # # # # # # # # #
1 # #
2 # x #
. # #
. # #
. # #
c # #
d # #
e # # # # # # # # #
Koordinat tidak diindeks, jadi titik di mana x
is akan 12,2
.
Bot Anda akan dipanggil dengan dua argumen:
- Lokasi makanan
- Lokasi segmen tubuh Anda, dipisahkan oleh
/
Maka harus menulis salah satu dari berikut ini ke stdout:
L
untuk seperempat belok kiri sebagai langkah selanjutnyaR
selama seperempat belokan kanan- Ada hal lain untuk bergerak ke arah yang sama
Contoh:
Projects/Snakepit> python bot.py 12,2 4,8/4,9/3,9/2,9
'R'
Projects/Snakepit>
Aturan
Bot Anda diizinkan untuk:
- Keluarkan sesuatu, karena segala sesuatu adalah langkah yang valid
- Baca / tulis file di direktori sendiri yang berada di bawah ./snakes/ThisIsYourSnake
- Jalankan pada Ubuntu 14.04 dan Windows 7 (sebenarnya harus)
Bot Anda tidak boleh:
- Baca / tulis file di luar direktori sendiri
- Gunakan sumber daya eksternal seperti internet
- Miliki runtime di atas 10 detik per eksekusi
Anda harus memberikan jawaban Anda:
- Kode sumber bot
- Nama bot / ular
- (Nama Anda sendiri)
- Perintah untuk menjalankan bot Anda
Jika Anda ingin membuat hidup saya lebih mudah, berikan garis seperti
CoolSnake MyOwnName python bot.py
.
Mencetak gol
Ular Anda mendapat poin karena memenangkan pertandingan melawan ular lain. Game dimenangkan dalam kondisi berikut:
- Lawan Anda mengenai dirinya sendiri, Anda atau tembok
- Anda mencapai panjang 7
Selain itu, kedua ular kelaparan setelah 200 siklus.
Setiap ular akan bertarung 10 pertandingan untuk bertahan hidup melawan satu sama lain ular.
Contoh Bot
Sekadar memberi Anda ide, saya akan memberikan dua contoh ular (yang berpartisipasi) ini:
SneakySnake
#!/usr/bin/env python
import sys, random
def main(food, me) :
food = [int(i) for i in food.split(",")]
me = [[int(i) for i in seg.split(",")] for seg in me.split("/")]
head = me[0]
v = [head[0] - me[1][0], head[1] - me[1][1]]
if food[0] < head[0] :
vn = [-1, 0]
elif food[0] > head[0] :
vn = [1, 0]
elif food[0] == head[0] :
if food[1] < head[1] :
vn = [0, -1]
elif food[1] > head[1] :
vn = [0, 1]
if v == vn :
return "..."
elif [-v[1], v[0]] == vn :
return "R"
elif [v[1], -v[0]] == vn :
return "L"
else :
return random.choice(("R", "L"))
if __name__ == "__main__" :
print main(*sys.argv[1:3])
SneakySnake Cipher python bot.py
ViciousViper
#!/usr/bin/env python
import sys, random
def main(food, me) :
food = [int(i) for i in food.split(",")]
me = [[int(i) for i in seg.split(",")] for seg in me.split("/")]
head = me[0]
v = [head[0] - me[1][0], head[1] - me[1][1]]
vn = [food[0] - head[0], food[1] - head[1]]
if 0 not in vn :
vn[v.index(0)-1] = 0
vn[vn.index(0)-1] = vn[vn.index(0)-1] / abs(vn[vn.index(0)-1])
if v == vn :
return "..."
elif [v[0] + vn[0], v[1] + vn[1]] == [0, 0] :
return random.choice(("R", "L"))
else :
return "R" if [-v[1], v[0]] == vn else "L"
if __name__ == "__main__" :
print main(*sys.argv[1:3])
ViciousViper Cipher python bot.py
Dan pertandingan mereka:
Program kontrol
Anda dapat menemukan program kontrol di github , beserta semua bot dan catatan pertandingan sebelumnya.
Persyaratan:
- Python 2 + perpustakaan
numpy
danpillow
(Anda dapat memeriksa apakah mereka hadir melaluipython -c "import numpy, PIL"
, jika ada kesalahan modul yang hilang) - Menyalin struktur folder lengkap diperlukan agar pengontrol berfungsi
- Daftarkan bot Anda di
./snakes/list.txt
file dengan gayaCoolSnake MyOwnName Command To Run My Bot
- Tempatkan bot Anda di dalam direktori dengan namanya di bawah
./snakes
- Baik nama bot Anda maupun bot Anda tidak boleh mengandung spasi putih!
Pemakaian:
python run.py [-h] [-n int] [-s int] [-l int] [-c int] [-g]
python run.py
akan menjalankan turnamen dengan semua bot terdaftar di list.txt dan properti standar. Opsi lanjutan adalah:
-h
menampilkan pesan bantuan-n int
putaran pertempuran untuk setiap kombinasi lawan-s int
menentukan ukuran grid (lebar dan tinggi)-l int
setel panjang yang dibutuhkan untuk menang-c int
menetapkan batas siklus-g
atau--no-gifs
tidak membuat gif pertandingan
Jawaban:
Zen - C ++
Ini Codémon tidak ada di sini untuk makan tapi untuk melawan. Dia tahu bahwa musuh yang mati tidak akan mencuri apelnya.
Name| Author |Launch with
Zen GholGoth21 Zen.exe
Strategi
Semua orang (kecuali CircleOfLife) bergegas ke apel, tetapi bukan Zen, tidak selalu. Jika musuh dapat mencapai makanan sebelum dia, dia hanya menunggu di tengah (apa? Tapi apa yang kamu lakukan di sini, CircleOfLife?). Lain, Zen pergi ke apel dan berbalik sambil menunggu sesuatu terjadi. Bahkan, ia menggunakan apel sebagai umpan.
Saya tidak mengkodekan apa pun terhadap strategi CircleOfLife yang aneh karena dia hanya bisa menang dengan sangat banyak keberuntungan.
Kode
Ini adalah kode lengkap proyek C ++. Potong 11 file sumber dan Makefile dan kompilasi dengan
make
Atau unduh file zip: Zen.zip
Hasil
Dan beberapa pertempuran biasa (ViciousViper vs Zen dan SneakySnake vs Zen):
Sunting : Saya menambahkan pertempuran yang sangat menarik ini terhadap CircleOfLife:
sumber
CircleOfLife (Jawa)
CircleOfLife Manu java CircleOfLife
(Kompilasi denganjavac CircleOfLife.java
)Berlari menuju tengah dan tetap di sana. Saya berharap bahwa beberapa pengiriman akan menabraknya dalam perjalanan ke makanan.
sumber