Aturan dasar (berbeda dengan saya)
Cerita
Ini adalah tahun 4579, manusia sekarang memiliki 2 tangan dengan masing-masing 1001 jari. Sumpit telah menjadi dasar dari poin. Dan @Dennis memiliki lebih banyak rep daripada @Martin ... Lingkaran merah digambar tangan sekarang diturunkan ... Jon Skeet telah mencapai 2 triliun rep di setiap situs SE ... Ya menakutkan saya tahu
Sumpit adalah permainan tangan yang telah diselesaikan. Jadi untuk menyiasati ini saya telah membuatnya bermutasi. Saya meningkatkan jumlah jari.
Aturan mainnya
Cara ini dimainkan
Semua orang mulai dengan 2 tangan. Setiap tangan memiliki 1001 jari. Setiap tangan dimulai dengan 1 (satu) jari di atas masing-masing tangan. Selama giliran Anda, Anda dapat "memukul" tangan pemain lain. Untuk memukul Anda memilih 1 tangan Anda untuk memukul dan 1 tangan mereka untuk memukul. Tangan yang dipukul sekarang memiliki jumlah jari pada awalnya dan jumlah jari yang ada pada tangan yang Anda pukul.
EX
P1: 1,1
P2: 1,1
. P1[0]
hit P2[1]
. Sekarang jari P1:1,1
P2:1,2
. Sekarang P2[1]
hit p1[0]
. Jari-jarinya sekarang P1: 3,1
P2 1,2
.
Jika satu tangan sampai 1001 jari ke atas atau lebih maka tangan itu keluar. Kemudian pemain yang mendapat hand out (untuk giliran mereka) dapat "membagi". Membelah adalah ketika Anda mengambil tangan yang ada di dalam dan membagi dua jumlah jari (bulat) dan memberikan jari-jari ke tangan lain untuk mendapatkannya kembali.
EX
P1: 1000,2
P2 7,7
. P2[0]
hit P1[0]
. Skor adalah P1: 0,2
P2 1,1
. P1[1]
membagi untuk gilirannya dan skornya adalah P1: 1,1
dan P2 7,7
.
Permainan berakhir ketika satu pemain memiliki kedua tangan. Poin dicetak dengan jumlah jari yang dimiliki pemenang. Lebih banyak poin = lebih baik. Yang kalah tidak mendapatkan poin.
Ada aturan lain yang digunakan tetapi ini adalah yang digunakan di sini.
Semua orang memainkan semua orang (round robin)
Akhir permainan
Jumlahkan poin Anda dari setiap putaran yang Anda menangkan. Kemudian rata-rata semua orang menunjukkan poin. Bagilah total Anda dengan poin rata-rata dan dapatkan skor akhir Anda. Sebagian besar poin menang.
Aturan yang sebenarnya
Jangan tidak mencoba memecahkan permainan. Saya sebenarnya harus bisa menjalankannya: P
Pastikan bot bisa berlari cepat. Dengan panjang putaran menilai ini akan memakan waktu cukup lama
Semua perpustakaan yang dibutuhkan dalam program Anda harus berada di perpustakaan python default. Juga daftarkan yang Anda perlu impor. Impor hanya akan menjadi impor dasar (untuk matematika saya lakukan import math
:)
Jawaban harus bekerja dalam Python 3.x
Handler
Bot Anda akan menjadi file Python 3 sendiri dengan play
fungsi.
play
akan melewati dua daftar dari dua angka masing-masing. Angka ini menunjukkan berapa banyak jari di atas masing-masing tangan. Daftar pertama adalah tangan Anda sendiri.
Jika Anda memilih untuk memukul tangan pemain lain, maka kembalikan daftar dua bit. Bit pertama adalah indeks dari tangan yang Anda gunakan untuk memukul ( 0
untuk yang pertama, 1
untuk yang terakhir), dan bit kedua adalah indeks dari tangan yang Anda pukul lawan.
Jika Anda memilih untuk membagi, kembalikan nilai kebenaran lainnya.
Tada!
Kontroler dapat ditemukan di sini . Simpan setiap bot di file sendiri dan daftar setiap nama file bot (tanpa .py
) di botnames
.
Catatan akhir:
Anda dan bot lain akan bergiliran pergi terlebih dahulu. Jika permainan tidak berakhir dalam 100.000 (seratus ribu) putaran, permainan akan dihentikan dan bot tidak akan menang.
Kontroler tidak terlindung dari gerakan yang berlangsung selamanya, tetapi overhead yang tidak perlu akan sangat disukai.
sumber
My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!
Apa, jadi kita yang melakukan perhitungan untuk KoTH?Jawaban:
Algoritma CodingAnd
Jawaban ini sebenarnya menggunakan coding dan algoritma, tidak seperti yang lain sejauh ini!referensi: imgur (juga mengalahkan semua jawaban yang diposting sebelum ini)
sumber
CautionBot
CautionBot tidak ingin menyebabkan terlalu banyak masalah, jadi itu mengenai tangan lawan yang lebih kecil dengan tangan yang lebih kecil jika memiliki kedua tangan, dan jika tidak terbelah. Namun, CautionBot bukan orang bodoh, jadi jika ia bisa mengeluarkan tangan lawan tanpa segera kehilangan giliran berikutnya, itu akan dilakukan alih-alih langkah normalnya.
sumber
Equalizer
Jika Equalizer hilang tangan, itu akan terbelah. Kalau tidak, ia akan memukul lawan terkecilnya dengan tangan terbesarnya sendiri.
sumber
Agresor
Bot pemula yang lain, Aggressor akan memukul tangan lawan yang lebih besar dengan tangan yang lebih besar jika kedua tangannya tidak kosong; jika tidak, itu akan pecah.
sumber
RandomBot
Hanya untuk memulai, inilah bot yang membuat pukulan acak jika kedua tangannya tidak kosong; jika tidak, perpecahan.
Golf karena mengapa tidak: 3
sumber
Kesalahan
Ya, itulah nama bot itu.
Saya tiba di sini dengan menguji dengan bot lain. Namun secara konsisten kedua-terakhir dalam simulasi saya. Jadi aku akan membuat bot lain pada akhirnya.
Sunting: Sepertinya saya tidak bisa menulis bot apa pun yang mengalahkan CautionBot, dan pengujian tambahan saya tampaknya menunjukkan bahwa ini adalah yang terbaik kedua, bukan yang terburuk kedua.
sumber
Maraton
Saya men-tweak kode Aggressor yang disediakan oleh "HyperNeutrino" hanya untuk menekan yang lebih kecil dari dua tangan lawan dengan yang lebih kecil dari tangannya. Tentu saja ini adalah strategi yang sangat konyol, tetapi saya tidak bisa menolak untuk berada di puncak tangga lagu! (Meskipun grafik itu akan menjadi kerugian)
Saya tidak yakin apakah kode ini akan berjalan tanpa kesalahan karena saya tidak dapat mengujinya karena sedang bekerja. Namun, itu harus berjalan dengan sempurna.
sumber