Setiap pemain memiliki nomor. Bisakah Anda menjadi yang terjauh dari semuanya?
Persyaratan
Tulis nama fungsi Java, Python 2, atau Ruby choose()
yang menerima tiga argumen:
- bilangan bulat - jumlah putaran sudah selesai
- integer - jumlah pemain
- array string - hasil dari setiap putaran sebelumnya
- setiap string adalah daftar bilangan bulat yang dipisahkan oleh ruang, disortir dari terendah ke tertinggi
Misalnya, choose(2, 4, ["4 93 93 174", "1 84 234 555"])
berarti:
- sudah ada dua putaran (ini adalah putaran ketiga)
- total ada empat pemain
- di babak pertama, angka yang dipilih adalah 4, 93, 93, 174
- di babak kedua, angka yang dipilih adalah 1, 84, 234, 555
Anda harus mengembalikan seluruh nomor dari 1 hingga 999 (inklusif).
Untuk setiap pemain lain, skor Anda adalah akar kuadrat dari jarak antara nomor Anda dan mereka. Skor Anda untuk babak ini adalah total dari semua skor ini.
100 putaran akan dimainkan. Total skor tertinggi menang!
Aturan
- Kode Anda tidak boleh menggunakan I / O, termasuk konsol, file, jaringan, dll.
- Anda tidak boleh mengganggu program kontrol atau pemain lain.
- Program yang sepertinya melanggar aturan di atas akan dikecualikan.
- Setiap panggilan fungsi harus di bawah lima detik di komputer saya (Intel Core i5 2450M dengan 8GB RAM).
- Jika suatu program melempar pengecualian atau mengembalikan nilai yang tidak valid, itu akan diperlakukan seolah-olah itu mengembalikan 1.
- Setiap pengguna dapat mengirimkan paling banyak satu program.
Lain-lain
- Program kontrol ada di GitHub .
- Ada tiga pemain built-in. Mereka dapat ditemukan dalam jawaban ini .
- Pemenang akan dipilih pada 28 Januari.
Papan peringkat
Pemenangnya adalah Konservator .
Sebutan terhormat untuk Gustav , pemain dengan skor tertinggi dengan strategi tidak konstan.
- Konservator - 36226
- Tinggi - 36115
- FloorHugger - 35880
- NumberOne - 35791
- Overestimator - 35791
- Gustav - 35484
- Sejarawan - 35201
- Sampler - 34960
- Incrementer - 34351
- JumpRightIn - 34074
- Vickrey - 34020
- Remaja - 33907
- Randu - 33891
- Angkat Besi - 33682
- Perantara - 33647
- BounceInwards - 33529
- NastyMathematician - 33292
- Jumper - 33244
- Copycat - 33049
Hasil lengkapnya dapat ditemukan di sini . (Saya sarankan menonaktifkan pembungkus teks.)
king-of-the-hill
Ypnypn
sumber
sumber
Jawaban:
Python, Konservator
Karena setiap pengecualian melempar 1, ia menjauh sejauh mungkin darinya. Membuat kekayaan dengan mengorbankan yang lemah.
Fakta menyenangkan: Saya berpikir untuk memperbaikinya, tetapi tidak bisa menemukan cara yang lebih baik daripada hanya bersembunyi di sudut.
sumber
Nomor Satu, Jawa
Namanya menjelaskan ini sepenuhnya.
sumber
Python, AncientHistorian
Tegas percaya bahwa masa depan akan persis seperti masa lalu, tetapi percaya bahwa ronde terakhir terlalu baru untuk menjadi histiry, sehingga hanya melewati 1-999 dan memilih apa yang akan menjadi yang terbaik dari putaran sebelumnya kecuali yang terakhir. 2 babak pertama menghasilkan 500.
sumber
Python, Vickrey
Membuat daftar angka yang sudah sering diputar, mengasumsikan bahwa semua orang akan bermain secara optimal dan memilih yang kedua pilihan terbaik diberikan daftar.
Misalnya, jika angka yang paling umum adalah
[1, 990, 999]
, maka Vickrey menyisipkan permainan optimal 200 untuk diberikan[1, 200, 990, 999]
, kemudian memilih opsi terbaik untuk array baru (yaitu 556).sumber
Java, Overestimator
Seperti namanya, program ini mengasumsikan semua program lain akan mencoba bermain "dengan baik" dengan memilih jawaban terbaik berdasarkan putaran terakhir - jadi "overestimator" ini selalu memilih posisi terburuk berdasarkan putaran sebelumnya.
sumber
Java - Angkat Besi
Putar 1-999 untuk mencari tahu mana yang akan menjadi yang terbaik untuk setiap putaran. Timbang sesuai dengan kebaruan (putaran terakhir memiliki bobot lebih), dan kembalikan tebakan keseluruhan terbaiknya. Mudah-mudahan jika pola terbentuk di babak selanjutnya, ini akan dapat mengambilnya.
Sunting: Sekarang dengan + Inf% lebih banyak rekursi! Tidak bisa menyimpan / menyimpan / melihat apa yang Anda pilih pada putaran sebelumnya adalah hambatan. Mengambil masukan Anda sendiri ke messes akun Anda ketika mencoba untuk mencari tahu apa yang orang lain akan lakukan. Jadi, mari kita hitung! Ini sekarang akan berulang untuk mencari tahu apa yang dipilih pada putaran sebelumnya dan mengabaikan itu ketika menghitung langkah selanjutnya.
Perhatikan bahwa itu hanya benar - benar mengabaikan input sendiri dari belokan terakhir, tetapi karena yang tertimbang yang tertinggi, tampaknya berfungsi dengan baik. Ini bisa diperbaiki dengan sedikit lebih banyak pekerjaan, tetapi saya akan menunggu leaderboard untuk melihat apakah itu diperlukan.
sumber
Ruby, Copycat
Cukup kembalikan nomor yang menang terakhir kali.
sumber
Ruby, JumpRightIn
Ini mungkin strategi yang paling mudah. Ia menemukan celah terbesar di babak terakhir, dan memilih angka tepat di tengah-tengah celah itu.
sumber
Gustav (Python 2)
Ini adalah strategi meta yang cukup lurus ke depan, disalin tanpa malu-malu dari salah satu jawaban lama saya dalam tantangan KotH yang serupa. Ini mempertimbangkan beberapa strategi sederhana, terlihat bagaimana mereka akan melakukan semua putaran sebelumnya, dan kemudian mengikuti satu penilaian tertinggi untuk babak berikutnya.
Saya menyadari sekarang bahwa algoritma ini masih memiliki beberapa kekurangan. Misalnya ia mungkin terus "mengejar dirinya sendiri" karena ia tidak membedakan gerakannya sendiri dari gerakan lawan. Namun, saya akan membiarkannya seperti ini untuk saat ini.
sumber
Python, Randu
Angka dipilih oleh penghasil angka acak yang paling tidak masuk akal yang pernah ada .
sumber
Tiga program berikut ini terintegrasi.
Tinggi (Ruby)
Incrementer (Jawa)
FloorHugger (Python)
sumber
Python, Sampler
Di luar daftar tempat, pilih tempat yang paling jauh dari angka yang baru digunakan, abaikan giliran sebelumnya.
sumber
Java, BounceInwards
Mulai dari 1, secara bertahap semakin mendekati 500 sambil memantul antara opsi yang lebih tinggi dan lebih rendah.
sumber
NastyMathematician (Jawa)
Periksa dua putaran terakhir (jika angka terbaik adalah 70 dan 80, itu akan menghasilkan 90). Itu jahat karena mencoba mengambil angka setinggi mungkin untuk menang melawan lawan-lawannya.
sumber
Python - Saya tidak ingin memikirkan nama ...
Jika rata-rata angka yang dipilih dalam putaran terakhir kurang dari 500, itu memilih 999. Itu memilih 1 sebaliknya.
sumber
Python, Middleman (berdasarkan konservator oleh @clabacchio)
Setelah saya perhatikan bahwa tepi atas skor tinggi (dan mengungguli tepi bawah), saya bertanya-tanya apakah ada yang lebih buruk daripada hanya terjebak di tengah.
sumber
Jumper (Ruby)
Bergantian antara bagian bawah, tengah dan atas. (5.500.995)
sumber