Matriks Wythoff adalah matriks tak terbatas yang terdiri dari angka Grundy dari setiap kotak di papan catur dalam permainan Wythoff .
Setiap entri dalam matriks ini sama dengan angka nonnegatif terkecil yang tidak muncul di mana pun di atas, ke kiri, atau diagonal barat laut dari posisi entri.
Kotak 20-kali-20 atas-kiri terlihat seperti ini:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 2 0 4 5 3 7 8 6 10 11 9 13 14 12 16 17 15 19 20
2 0 1 5 3 4 8 6 7 11 9 10 14 12 13 17 15 16 20 18
3 4 5 6 2 0 1 9 10 12 8 7 15 11 16 18 14 13 21 17
4 5 3 2 7 6 9 0 1 8 13 12 11 16 15 10 19 18 17 14
5 3 4 0 6 8 10 1 2 7 12 14 9 15 17 13 18 11 16 21
6 7 8 1 9 10 3 4 5 13 0 2 16 17 18 12 20 14 15 11
7 8 6 9 0 1 4 5 3 14 15 13 17 2 10 19 21 12 22 16
8 6 7 10 1 2 5 3 4 15 16 17 18 0 9 14 12 19 23 24
9 10 11 12 8 7 13 14 15 16 17 6 19 5 1 0 2 3 4 22
10 11 9 8 13 12 0 15 16 17 14 18 7 6 2 3 1 4 5 23
11 9 10 7 12 14 2 13 17 6 18 15 8 19 20 21 4 5 0 1
12 13 14 15 11 9 16 17 18 19 7 8 10 20 21 22 6 23 3 5
13 14 12 11 16 15 17 2 0 5 6 19 20 9 7 8 10 22 24 4
14 12 13 16 15 17 18 10 9 1 2 20 21 7 11 23 22 8 25 26
15 16 17 18 10 13 12 19 14 0 3 21 22 8 23 20 9 24 7 27
16 17 15 14 19 18 20 21 12 2 1 4 6 10 22 9 13 25 11 28
17 15 16 13 18 11 14 12 19 3 4 5 23 22 8 24 25 21 26 10
18 19 20 21 17 16 15 22 23 4 5 0 3 24 25 7 11 26 12 13
19 20 18 17 14 21 11 16 24 22 23 1 5 4 26 27 28 10 13 25
Saat ini tidak ada algoritma efisien yang dikenal untuk menghitung entri sewenang-wenang dalam matriks Wythoff. Namun, tugas Anda dalam masalah ini adalah mencoba merancang fungsi heuristik yang akan memberi tahu apakah angka pada koordinat tertentu wythoff(x, y)
genap atau ganjil.
Program Anda mungkin tidak mengandung lebih dari 64 KB (65.536 byte) kode sumber, atau menggunakan lebih dari 2 MB (2.097.152 byte) memori kerja.
Khususnya untuk penggunaan memori, ini berarti bahwa ukuran set residen maksimum dari program Anda tidak boleh melebihi 2 MB lebih dari ukuran set residen maksimum dari sebuah program kosong dalam bahasa itu. Dalam kasus bahasa yang ditafsirkan, itu akan menjadi penggunaan memori interpreter / mesin virtual itu sendiri, dan dalam kasus bahasa yang dikompilasi, itu akan menjadi penggunaan memori dari suatu program yang mengeksekusi metode utama dan tidak melakukan apa-apa.
Program Anda akan diuji pada 10000 x 10000
matriks untuk nilai baris 20000 <= x <= 29999
dan nilai kolom dalam 20000 <= y <= 29999
.
Nilai program Anda adalah tingkat akurasi (jumlah tebakan yang benar) yang dicapai oleh program Anda, dengan kode yang lebih pendek bertindak sebagai tiebreak.
01.R
adalah 05AB1E yang menghasilkan benar atau salah secara acak. Biarkan 0 benar dan 1 salah, program saya secara teoritis akan benar ~ 50% dari waktu. Apakah ini entri yang valid?Jawaban:
Python; akurasi = 54.074.818; ukuran = 65.526 byte
Skor sebelumnya: 50.227.165; 50.803.687; 50.953.001
Pendekatan ini membagi semua entri unik dari matriks menjadi 523.200 grup dan membaca tebakan terbaik untuk grup (x, y) dari string biner. Anda dapat mengunduh kode sumber lengkap dari Google Drive .
Saya telah menggunakan paritas @ PeterTaylor untuk menghasilkan string dan untuk menghitung akurasinya.
sumber
CJam (akurasi 50016828/100000000, 6 byte)
(Dalam pseudocode gaya ALGOL untuk non-CJammers:)
return ((x + y) & 1) == 0
.Ini berkinerja lebih baik daripada dua lusin heuristik sederhana lainnya yang pernah saya coba. Ini bahkan lebih baik daripada kombinasi apa pun dengan dua yang terbaik berikutnya.
Skor tersebut mengasumsikan bahwa bagian matriks yang saya hitung benar. Verifikasi independen disambut. Saya hosting bit paritas yang dihitung di http://cheddarmonk.org/codegolf/PPCG95604-parity.bz2 (unduhan 8MB, ekstrak ke file teks 50MB: karena matriksnya simetris tentang diagonal utama, saya hanya menyertakan masing-masing garis mulai dari diagonal utama, sehingga Anda harus mengimbangi, mengubah posisi, dan bitwise ATAU untuk mendapatkan kuadrat penuh).
Kode yang saya gunakan untuk menghitungnya adalah Java. Ini menggunakan definisi cukup mudah, tetapi dengan struktur data yang panjang run-encode rentang sehingga cepat untuk melompat ke nilai berikutnya yang diizinkan. Optimalisasi lebih lanjut mungkin dilakukan, tetapi berjalan pada desktop saya yang sudah cukup lama dalam waktu sekitar dua jam dan ruang penyimpanan 1,5GB.
sumber
J, akurasi = 50022668/10 8 = 50.0227%, 4 byte
Mengambil koordinat sebagai dua argumen, menghitung LCM di antara mereka dan membawanya modulo 2. A
0
berarti genap dan1
berarti aneh.Kinerja didasarkan pada bit paritas yang disediakan oleh @ Peter Taylor .
Versi PRNG sebelum selama 7 byte,
2|?.@#.
memiliki akurasi 50010491/10 8 .Penjelasan
sumber
1
hanya 25% dari waktu, ketika proporsi yang benar hampir persis 50%), namun itu lebih baik daripada banyak yang tidak begitu jelas buruk.AND
.