Ini king-of-the-bukit tantangan didasarkan dari game show, Weakest Link . Bagi mereka yang tidak terbiasa dengan pertunjukan, inti dari tantangan ini berkaitan dengan siapa yang Anda pilih :
- Jika pemain lain lebih pintar dari Anda, maka Anda memiliki peluang lebih sedikit untuk mendapatkan pot.
- Jika pemain lain lebih bodoh dari Anda, maka Anda memiliki pot yang lebih sedikit.
Pada awal setiap putaran, Pot dimulai dengan $ 0. Sekelompok 9 pemain dibentuk, dan masing-masing pemain diberi Smartness unik dari 1 hingga 9.
Di awal setiap belokan, Pot += Smartness
untuk setiap pemain masih di babak. Kemudian, pemain memberikan suara pada pemain yang ingin mereka hapus. Pemain dengan suara terbanyak dihapus. Dalam kasus seri, pemain yang lebih pintar disimpan.
Ketika hanya ada 2 pemain yang tersisa di babak, mereka berhadapan dalam pertempuran akal. Peluang pemain menang adalah Smartness/(Smartness+OpponentSmartness)
. Pemain yang menang kemudian menerima seluruh pot.
Pemain yang telah menerima uang paling banyak di akhir pertandingan menang.
Input output
Setiap belokan, Anda akan menerima daftar lawan saat ini. Anda akan memiliki akses ke kecerdasan Anda dan seluruh riwayat pemilihan seluruh pemain untuk putaran melalui fungsi di kelas Player.
Sebagai hasil, Anda harus mengembalikan bilangan bulat tunggal, mewakili pemain yang ingin Anda pilih (mewakili kecerdasannya). Voting untuk diri sendiri adalah diperbolehkan (tapi tidak direkomendasikan).
Babak 9 akan diulang sampai semua pemain bermain setidaknya 1.000 10.000 putaran, dan semua pemain telah bermain dalam jumlah putaran yang sama.
Anda dapat menemukan pengontrol di sini: https://github.com/nathanmerrill/WeakestLink
Untuk membuat pemain, Anda perlu memperluas kelas Player, dan menambahkan pemain Anda ke kelas PlayerFactory. Kelas Anda harus mengikuti aturan berikut:
Komunikasi atau gangguan dengan pemain lain (termasuk pemain lain dengan jenis yang sama) sangat dilarang.
Refleksi dan variabel statis (kecuali untuk konstanta) tidak diperbolehkan.
Jika Anda ingin menggunakan keacakan, saya telah menyediakan
getRandom()
fungsi di kelas Player. Gunakan itu, sehingga simulasi bisa menjadi deterministik.
Saya telah menyediakan banyak fungsi di kelas Player untuk akses mudah ke data. Anda dapat menemukannya online di Github . Pemain Anda akan dipakai setiap babak baru. Pemain "Bisu / bunuh diri" diperbolehkan (tetapi tidak pemain dengan strategi yang sama).
Skor
377195 WeakestLink.Players.PrudentSniper
362413 WeakestLink.Players.Sniper
353082 WeakestLink.Players.VengefulSniper
347574 WeakestLink.Players.AntiExtremist
298006 WeakestLink.Players.BobPlayer
273867 WeakestLink.Players.MedianPlayer
247881 WeakestLink.Players.TheCult
240425 WeakestLink.Players.Leech
235480 WeakestLink.Players.SniperAide
223128 WeakestLink.Players.Guard
220760 WeakestLink.Players.Anarchist
216839 WeakestLink.Players.RevengePlayer
215099 WeakestLink.Players.IndependentVoter
213883 WeakestLink.Players.SniperKiller
210653 WeakestLink.Players.MaxPlayer
210262 WeakestLink.Players.Bandwagon
209956 WeakestLink.Players.MeanPlayer
208799 WeakestLink.Players.Coward
207686 WeakestLink.Players.Spy
204335 WeakestLink.Players.Hero
203957 WeakestLink.Players.MiddleMan
198535 WeakestLink.Players.MinPlayer
197589 WeakestLink.Players.FixatedPlayer
197478 WeakestLink.Players.HighOrLowNotSelf
181484 WeakestLink.Players.RandomPlayer
165160 WeakestLink.Players.BridgeBurner
sumber
src\WeakestLink
saya biasajavac Game\*.java Players\*.java Main.java
mengkompilasi danjava -cp .. WeakestLink.Main
menjalankan.Jawaban:
Penembak jitu
Gagasan umum adalah mempertahankan salah satu pemain bodoh (yaitu pemain yang lebih mungkin kita kalahkan saat berhadapan) untuk merebut poin. Setelah itu kami mencoba untuk menghapus pemain bernilai rendah lainnya untuk meningkatkan pot. Tetapi ketika kita sampai ke pemain cerdas kita memilih untuk menghapus yang paling berbahaya kalau-kalau pemain bodoh kita dihapus. Dengan begitu, jika kita tidak memiliki seseorang untuk menembak kita harus mendapatkan seseorang yang setidaknya kita punya kesempatan untuk melawan. Juga, karena kami selalu memberikan suara dengan pemain minimum atau pemain maksimal, saya berharap kami cukup efektif dalam mendapatkan jalan kami.
sumber
PrudentSniper
Sniper , tetapi dengan dua perilaku kasus khusus. Salah satunya adalah jika ada tiga bot yang tersisa, dan PrudentSniper adalah yang paling cerdas, ia akan memilih bot tengah daripada yang paling tidak pintar. Ini memungkinkan untuk memenangkan beberapa pertikaian lagi. Perilaku lainnya adalah bahwa jika bot yang paling pintar memacu untuk itu (memilihnya atau bot analog terakhir kali) dan yang paling tidak pintar tidak, itu akan memilih yang paling cerdas dalam pertahanan diri.
sumber
Kultus
Para pemain kultus memiliki skema pemungutan suara yang agak esoteris dimana mereka mencoba mengidentifikasi satu sama lain dan memilih sebagai sebuah kelompok, hanya menggunakan catatan pemungutan suara. Karena setiap anggota kultus tahu cara memilih, siapa pun yang memilih secara berbeda diungkapkan sebagai bukan anggota dan akhirnya ditargetkan untuk dieliminasi.
Sekilas tentang skema pemungutan suara:
Kode:
Pikiran akhir:
Sekte sekarang beralih ke pemungutan suara untuk pemain paling berbahaya ketika hanya ada dua atau lebih sedikit anggota kultus yang tersisa untuk berhadapan. Saya diuji beberapa kali dengan
cult_cnt>1
dancult_cnt>2
kondisi dan menang kemudian lebih sering.Namun, ini adalah tindakan pencegahan dan kultus benar-benar tidak dirancang untuk bekerja sebagai pemain tunggal, sehingga jumlah pemain baru meningkat kultus masih harus kalah pada akhirnya.
sumber
unusedPlayers.addAll(allPlayers);
dalam Game.java diduplikasi sekitar sembilan kali, sehingga semua pemain dapat muncul dalam multiplisitas yang bervariasi (seperti menyeret bersama beberapa deck kartu) ... tidak tidak tentu saja, itu benar-benar permintaan yang bias tetapi Sangat menarik untuk melihat seberapa kuat strategi berbasis tim masih bisa jika mereka memiliki peluang kecil untuk disatukan.BridgeBurner
Bukan di suatu tempat di mana saya dapat menguji ini sekarang, dan ini keluar terasa seperti kode yang benar-benar jelek / bodoh, tetapi harus bekerja.
Bot ini hanya ingin dibenci. Ini suara untuk siapapun yang memilih menentang itu yang paling . Dalam hal seri, ia memilih siapa pun yang telah berjalan paling lama tanpa memilihnya. Jika terjadi dasi lain, ia memilih yang paling pintar dari mereka (mungkin karena mereka akan membuat musuh terburuk). Itu tidak akan memilih sendiri, karena tidak ada yang akan benar-benar membencinya ketika tidak ada.
sumber
-1
yang dipilih. Tapi itu harus diperbaiki sekarang.Kereta musik
Mengikuti orang banyak dalam pemungutan suara, kecuali dia yang menjadi sasaran.
Saya kira yang satu ini hanya akan membuat penembak jitu lebih kuat dengan mengikuti mereka, tetapi juga menghindari menjadi sasaran oleh kultus dan pembantu sniper dengan cara yang sedikit efektif. Ini mungkin juga menjadi daging bagi pembunuh sniper atau membantu mereka jika ada lebih banyak dari mereka. (Perlu menguji dengan pembaruan terbaru).
Menggunakan fitur java 8 karena permainan tetap membutuhkannya.
sumber
RevengePlayer
Bot ini akan memilih siapa pun yang memilihnya paling banyak, tiebreak menjadi pemain paling cerdas. Teorinya adalah bahwa pemain yang memilih Anda di masa lalu kemungkinan akan memilih Anda lagi.
sumber
MeanPlayer
Pilih pemain yang paling bodoh atau paling cerdas, dan dia membawa pistol (menyelinap melewati keamanan)
sumber
Anti Ekstremis
Sosialis ekstrem ini percaya bahwa semua orang harus memiliki kecerdasan yang sama. Dia mencoba membunuh mereka yang jauh lebih pintar atau bodoh daripada dia. Dia menganggap keduanya tetapi dia lebih suka bisu secara umum. Dia memihak orang bodoh pada awalnya dan pandai pada akhirnya, tapi itu tertimbang berdasarkan seberapa ekstrim orang-orang itu.
CATATAN: Menurut Linus ini akan memberikan suara yang sama dengan penembak jitu sebagian besar waktu (525602: 1228).
sumber
static Sniper S = new Sniper()
danstatic long agrees=0, disagrees=0;
. Dalam metode pemungutan suara saya, saya menambahkanS.setSmartness(getSmartness()); int sniper_answer=S.vote(currentOpponents);
yang menghitung bagaimana penembak jitu akan memilih di posisi Anda, kemudian memasukkan jawaban Anda ke dalam variabel untuk menghitung apakah itu setuju atau tidak setuju sebelum mengembalikan jawabannya. Setelah permainan selesai, Anda dapat mencetak setuju: tidak setuju yang 525602: 1228.Mengintai
Mata-mata dicadangkan. Dia tidak suka menembak orang yang paling pintar. Demikian juga, dia tidak seperti memilih pada
quartataidiot berdaya. Jadi, dia suka menghilangkan orang-orang terdekatnya dalam kecerdasan.Anda baru saja ditikam, mes amis . Dia tidak peduli jika dia menang. Dia seperti suara pisau di punggung Anda saat ia memilih Anda dengan sukses.
sumber
Math.abs(enemyIntel - selfIntel) < closestIntel
seharusnyaMath.abs(enemyIntel - selfIntel) < Math.abs(closestIntel - selfIntel)
.MedianPlayer
Pemain ini berusaha untuk menjadi yang paling kejam (baik, medianness) yang tersisa.
Itu memilih untuk menghilangkan lawan paling pintar dan paling bodoh (dengan sedikit bias terhadap memilih dari yang paling cerdas), tergantung pada apakah ada lebih atau kurang lebih pintar / bodoh daripada mereka sendiri.
Kerangka kerja terang-terangan dicuri dari @Linus di atas.
sumber
Pengecut
Hanya tidak ingin mendapatkan suaranya, jadi suara untuk lawan yang paling mirip dengan pemain yang mendapat putaran terakhir untuk memaksimalkan peluang berada di tim yang menang.
Tidak melakukannya dengan sangat baik sekarang, tetapi mungkin juga melemparkannya ke dalam campuran.
sumber
Pahlawan
Memberi suara mereka yang memilih yang lemah ... atau mengganggunya
sumber
Bob
Bob hanyalah pria biasa yang berpikir bahwa dia lebih pintar daripada dia sebenarnya. Tidak dapat memenangkan keluarga penembak jitu tetapi mendapatkan 5 besar dalam simulasi saya sebagian besar waktu.
sumber
FixatedPlayer
Pilih sasaran acak, lalu pilih untuk mereka sampai hilang. Tidak akan memilih dirinya sendiri.
sumber
Statistik
Ini bukan entri untuk kontes. Ini hanyalah cara untuk mendapatkan statistik permainan yang bermanfaat. Statistik ini mencetak persentase kemungkinan bahwa pemain tertentu akan kalah dalam satu ronde.
Untuk melakukan ini, tambahkan baris berikut ke
Round.java
sehingga bagian atas file terlihat seperti ini:Kemudian modifikasi metode pemilihan agar terlihat seperti ini:
Contoh Output:
sumber
MaxPlayer
Tahu segalanya. Lebih suka menyingkirkan siapa pun dengan kecerdasan tinggi (yang karenanya dapat menantang kecerdasannya yang tak tertandingi)
sumber
Menjaga
Pilih yang memilih kuat ... atau yang mengganggu dia.
sumber
Lintah
Bergantung pada bot lain untuk memilih orang-orang yang paling pintar dan bodoh dari .. semacam.
Dia puas dengan muncul di suatu tempat di tengah dan akhirnya membelah pot dengan pemenang (karena dia sebenarnya adalah bot
pria yangbenar-benar layak ).sumber
SniperKiller
Jawaban lain tanpa malu-malu dicuri dari kode Linus . Yang ini akan membunuh semua penembak jitu, bukan melindungi mereka. Jika tahu bahwa tidak ada penembak jitu yang tersisa, itu akan bertindak seperti penembak jitu itu sendiri.
sumber
RandomPlayer
sumber
MinPlayer
Seorang Elitist. Lebih suka menghapus siapa pun dengan kecerdasan rendah.
sumber
VengefulSniper
Ini dimulai sebagai sesuatu yang saya pikir asli disebut
StupidBuffering
(nama yang saya benci untuk menyerah), kemudian berakhir hanya PrudentSniper yang tidak peduli jika dia menjadi sasaran. Ini juga tampaknya menjadi satu-satunya alasan dia tidak bisa mengalahkan PrudentSniper, jadi saya sedikit mengubah hal-hal untuk menjadikannya fokus.Sekarang, ini pada dasarnya adalah penembak jitu, tetapi jika bot paling pintar atau paling bodoh membidiknya, ia akan menargetkan siapa pun yang mendapat suara terbanyak di putaran terakhir. Jika mereka berdua mendapat jumlah suara yang sama dan keduanya menargetkannya, ia kembali ke perilaku sniper-y normal. Dalam pengujian saya, ini sebenarnya mengalahkan PrudentSniper pada kesempatan.
sumber
Perantara
MiddleMan mencoba yang terbaik untuk memaksimalkan keuntungan sambil tetap waspada bahwa dia tidak terputus dari permainan. Dia terus berkeliling kontestan yang lebih rendah untuk meningkatkan peluangnya untuk mencapai babak berikutnya (dan untuk meninggalkan penyelesaian mudah). Dia akan memilih seseorang yang lebih pintar darinya hanya jika ada lebih banyak kontestan lebih pintar daripada ada lebih sedikit kontestan. Mana pun dari dua kelompok, ia selalu memilih yang terendah dari kelompok untuk menjaga pot tetap naik.
PS berharap itu mengkompilasi, saya bukan orang Jawa.
Pikirkan skema ini sebelum membaca entri lainnya. Kemudian saya terkejut seberapa dekat (tapi sangat berbeda) Sniper jadi saya pergi ke depan dan menggunakannya sebagai titik awal karena saya tidak tahu sintaksis Java. Terima kasih @Linus
sumber
Perkiraan Posisi
Bot ini mencoba memotret kira-kira di sekitar nilai kecerdasan yang hilang, dengan anggapan bahwa grup akan melanjutkan dengan pola yang sama, artinya akan menargetkan jenis target yang sama. Itu selalu memilih yang paling cerdas dari dua pemain ketika ada pilihan.
Lama saya tidak menggunakan Java, dan saat ini sedang bekerja jadi ... Tidak bisa mengujinya, harap tidak terlalu buggy, mohon dengan lembut :).
Omong-omong, ini menggunakan awt.Point hanya karena aku terlalu malas untuk mengimplementasikan tuple n_n.
sumber
emptyPosition[emptyPosition.length]=j;
akan selalu memberi Anda array di luar batas. Akhirnya, tidak yakin mengapa, tetapi Anda akan memilih pemain yang tidak ada dalam putaran.emptyPosition[emptyPosition.length]
itu, itu adalah kesalahan bodoh karena panjang selalu satu di atas indeks terakhir ^^. Terima kasih atas perubahannya, saya akan menggunakan versi baru ini untuk memperbaikinya. Tentang blok ternary ... yeah, merasa ingin menggunakannya, dan mungkin terlalu terbiasa menulis untuk diriku sendiri, tidak berguna untuk membaca kurasa. Melakukan koreksi dan memperbaruinya.SniperAide
Sebelum penambahan PrudentSniper saya menulis bot untuk membantu Sniper mengalahkan AntiExtremist dan penipuan lainnya (saya menggunakan kata itu dengan cinta). Bot, SniperAide, mencari pemain yang memilih seperti penembak jitu dan memilih seperti yang mereka pikirkan ketika ada konsensus. Jika semua pemain terlihat seperti penembak jitu ia memilih untuk max, melindungi Penembak jitu yang lebih rendah (yang juga akan beralih ke max pada saat ini), bahkan jika itu adalah dirinya sendiri.
Kode :
Dia saat ini tidak banyak membantu melawan PrudentSniper.
sumber
HighOrLowNotSelf
Menghapus pemain intelijen terendah atau tertinggi secara acak (tetapi tidak mandiri).
sumber
long
, bukanint
. Kedua,ops
tidak mengandung diri sendiri. (Jika Anda ingin memilih sendiri, secara eksplisit Anda harus memasukkannya). Terakhir, if / else yang Anda masukkan bukan Java valid. Saya telah memperbaiki kode Anda, dan menambahkannya ke githubAnarkis
Kaum anarkis tidak menyukai rezim.
Sang anarkis akan mencoba membunuh presiden saat ini.
Jika anarkis adalah presiden, ia memutuskan untuk menyalahgunakan kekuasaannya dan membunuh para perampas yang tidak berguna. Kecuali jika dia menjadi sasaran salah satu bawahannya, karena mereka seharusnya membakar.
sumber
Pemilih Independen
Bot ini tahu bahwa populasi umum selalu salah! Jadi ia memilih siapa pun yang mendapat suara paling sedikit.
Kode ini hampir identik dengan "Bandwagon" SolarAaron, tetapi logika akhirnya dibalik.
sumber