Tulis sebuah program yang menghasilkan urutan kemenangan untuk varian deterministik permainan 2048. Urutan harus dalam bentuk string angka 0-3, dengan 0: atas, 1: kanan, 2: bawah, 3: kiri. Misalnya, string "1132" berarti kanan kiri ke bawah. Program yang menang adalah kode sumber terpendek yang mencapai 2048!
Aturan untuk deterministik 2048: Permainan ini dimainkan pada kotak 4x4 yang awalnya berisi 1 ubin, di sudut kiri atas. Setiap gerakan terdiri dari perintah "kiri", "kanan", "atas" atau "bawah". Perintah kiri menggeser semua ubin di grid ke kiri, lalu menggabungkan dan menjumlahkan seperti ubin mulai dari kiri. Demikian juga, perintah kanan menggeser ubin ke kanan, lalu menggabungkan mulai dari kanan.
Setiap ubin hanya dapat berpartisipasi dalam satu kombinasi per gerakan.
Setelah pindah, 2 ubin baru dibuat di kolom pertama dari kiri dengan ruang yang tersedia, di ruang pertama yang tersedia dari atas di kolom itu.
Misalnya, urutan "kanan kanan kiri bawah" mengarah ke status
2___
____
____
____
2__2
____
____
____
2__4
____
____
____
24__
2___
____
____
2___
____
____
44__
Perintah kanan diterapkan ke baris _ 2 2 2 menghasilkan _ _ 2 4 Perintah kanan diterapkan ke baris 2 2 2 2 menghasilkan _ _ 4 4
Pertanyaan ini terinspirasi oleh http://jmfork.github.io/2048/
sumber
$(".tile-container").addItem("<div class="tile tile-2048 tile-position-3-4">2048</div>");
Jawaban:
Python, 740 karakter (665 karakter terkompresi)
Kode :
(Campurkan tab dengan spasi untuk lekukan untuk menyimpan beberapa byte)
Saya pasti tersedot dalam bermain golf karena jika saya hanya memampatkan kode di atas, base-64 mengkodekannya, dan
exec
itu, hanya 665 karakter. Berikut ini persis sama dengan di atas, tidak ada solusi hard-coded atau apa pun:Jawaban :
Dibutuhkan ~ 47 detik (17 detik tidak diubah) untuk menemukan urutan 1111-bergerak:
Dengan posisi dan langkah dewan final berikut:
Trivia: solusinya adalah 309 byte gzipped dan 418 byte jika gzipped dan base64-encoded. Dengan demikian itu akan menjadi program yang lebih pendek untuk hanya memecahkan kode itu dan mencetaknya, tetapi itu tidak menyenangkan sama sekali .
Penjelasan :
Ini adalah versi pastebin dari versi yang tidak disatukan yang mencetak papan setelah setiap gerakan, sangat menyenangkan untuk ditonton!
Ini adalah AI brute force yang sangat sederhana. Ini memberikan EV untuk setiap posisi dewan:
Ia melakukan pencarian kedalaman-pertama empat gerakan ke depan dan memilih jalur yang mengarah ke EV tertinggi dalam empat gerakan. Fungsi ev mendorongnya untuk membersihkan papan dan untuk menjaga potongan bernilai tinggi di sudut, yang akhirnya menjadi cukup optimal. Cukup sampai di sana!
Jika Anda memodifikasi fungsi EV untuk menempatkan nilai yang lebih tinggi di tempat papan lain, sesuatu seperti:
Fungsi itu membuatnya sejauh:
16k :
Eureka! Dengan lookahead 5 langkah bukannya 4, dan bobot berikut:
Hampir hampir mendapat 32rb, berakhir pada:
Urutannya ada di sini .
32rb :
Ya tuan dan nyonya, kami telah mencapai angka 32 ribu. Fungsi EV, alih-alih mengalikan kuadrat dengan konstanta, menaikkan setiap kuadrat ke kekuatan berikut dan menambahkannya.
x
berarti kotak tidak terlibat:Itu masih menjumlahkan semua nilai sekali dan menambahkan 256 untuk setiap kotak kosong. Lookahead berusia 4 hingga 32rb, dan kemudian naik menjadi 5rb, tapi sepertinya tidak terlalu berpengaruh. Papan akhir:
Pastebin dari urutan 24.625-langkah .
sumber