Kami telah mengkloning 2048, menganalisis 2048, tetapi mengapa kami belum memainkannya? Tulis snipet javascript 555 byte untuk bermain 2048 secara otomatis, skor terbaik setelah satu jam akan dihitung (lihat skor di bawah).
Mempersiapkan:
Goto 2048 dan jalankan:
a = new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager);
a
adalah objek untuk mengontrol permainan.
Aturan:
Setelah pengaturan, Anda dapat menjalankan 555 byte javascript dari konsol untuk mengontrol permainan. Kode sumber permainan dapat ditemukan di sini (termasuk komentar).
- Itu hanya dapat melakukan hal-hal yang memungkinkan bagi pengguna:
a.move(n)
untuk memicu aksi kunci di salah satu dari 4 arah.- 0: atas, 1: kanan, 2: bawah, 3: kiri
a.restart()
untuk memulai kembali game. Restart diperbolehkan di tengah permainan.
- Informasi tentang keadaan permainan dapat ditemukan di
a.grid.cells
. Informasi ini hanya baca - Mengaitkan ke salah satu fungsi diizinkan, mengubah perilaku mereka dengan cara apa pun tidak (atau mengubah data lain)
- Pindah hanya diperbolehkan sekali setiap 250ms
Contoh
Hanya contoh yang sangat sederhana untuk memulai. Tanpa komentar dan memasukkan 181 byte .
//bind into new tile function and change m(ove) variable when a tile was moved
b = a.addRandomTile.bind(a);
m = !1;
a.addRandomTile = function() { m = !0; b(); };
//number of move fails
mfs = 0;
setInterval(function() {
//set global moved tracking variable to false
m = !1;
a.move(Math.floor(4 * Math.random()));
m || mfs++;
//restart after 10 moves failed
10 < mfs && (mfs = 0, a.restart());
}, 250);
Penilaian dan hasil
Saya akan menjalankan cuplikan selama satu jam berturut-turut dan skor terbaik akan dihitung. Memang ada kemungkinan bahwa di randombot
atas akan menang seperti itu, tetapi 1 jam harus cukup untuk mengalahkannya:
- Raja
Bottomstacker VII
: 9912 - Ratu
Bottomstacker V
: 9216 - Pangeran
Bottomstacker II
: 7520 - Tuhan
Bottom and Right
: 6308 - Petani
Randombot
: 1413 didiskualifikasi untuk membuat dua gerakan dalam satu interval (dalam 250ms)Bottomstacker IV
: 12320
Faq
- Mengapa tantangan ini bukan agnostik bahasa melalui terminal?
- Untuk alasan sederhana bahwa ini lebih menyenangkan seperti ini. Menonton permainan itu sendiri secara grafis jauh lebih memikat daripada melihat konsol yang mengeluarkan angka. Bahkan tanpa mengetahui javascript Anda harus dapat bergabung ke dalam tantangan ini karena ini bukan tentang fitur bahasa terutama (cukup gunakan alat ini untuk meminimalkan kode)
sumber
...best score after an hour will count...
Mengapa hanya satu jam?Jawaban:
Saya tidak bisa kode javascript, jadi saya mencuri jawaban Anda.
Itu menggunakan strategi yang juga saya gunakan.
EDIT: Bagus, baru saja mengalahkan skor Anda setelah sekitar 5 menit di mesin saya: D
Sunting: Lupa untuk turun dua kali alih-alih hanya sekali, ini adalah kode yang harus Anda gunakan:
Juga, ada bug di dalamnya yang restart ketika tidak diperlukan, tapi saya tidak yakin bagaimana cara memperbaikinya. EDIT: Saat ini memiliki skor tertinggi 3116 (setelah 3 menit). Saya pikir aman untuk mengatakan algoritme ini lebih baik daripada hanya melakukan gerakan acak.
EDIT Versi yang lebih baru:
EDIT: Versi baru lainnya, versi ini langsung turun setelah naik.
EDIT: Perbarui: itu baru saja memecahkan rekor pribadi saya dengan skor yang cukup gila di 1.2596.
EDIT: Hei, saya bottomstacker: D Juga:
(Sebenarnya bukan perubahan, hanya dikompresi.)
5 kali pesona? Tidak yakin. Bagaimanapun:
dan:
Versi baru lainnya:
dan:
(Saya harap ini tidak terlalu menjadi masalah bahwa ini terus berlanjut di belakang layar gameover? Saya pikir Anda bisa menambahkan
a.over=0
tempat yang sering dieksekusi. Saya akan mencari tahu suatu hari nanti.)EDIT (lagi): Saya membuang cara permainan standar dan kembali ke cara lama dalam melakukan sesuatu. Saya sekarang menguji tambahan yang akan selalu digabung jika ada 2 ubin yang terdiri dari 16 atau lebih bersama-sama:
sumber
mfs=0
di dalamaddRandomTile
, dengan cara itu akan memulai kembali penghitungan setelah langkah yang berhasil.Bot Kanan dan Bawah: 345 byte
Versi pendek
Versi panjang
Dalam kata kata
Bergerak ke bawah, lalu ke kanan, jika Anda tidak dapat bergerak, bergerak ke atas (atau jika Anda tidak bisa, bergerak ke kiri), jika kedua sudut kanan atas dan kanan bawah terisi, bergerak ke kanan jika tidak memulai dari awal.
Skor tertinggi saat ini
Skor terbaik saya sendiri adalah 7668, tetapi itu berjalan pada kecepatan yang jauh lebih besar daripada
t=250
(dan dengan demikian secara tidak langsung lebih dari satu jam).sumber
Entah bagaimana saya berlari melintasi kontes yang lebih tua pagi ini, dan karena saya suka 2048, saya suka AI, dan JS adalah salah satu dari sedikit bahasa yang saat ini saya kenal dengan baik, saya pikir saya akan mencobanya.
GreedyBot (
607536 bytes)Versi pendek:
Versi panjang (kedaluwarsa):
Versi yang lebih panjang sama sekali tidak golf (selain menyusutkan nama variabel), sehingga bisa disingkat sedikit saat masih dapat dibaca. Versi yang lebih pendek dibuat menggunakan Closure Compiler (terima kasih atas tautannya!), Yang berakhir pada 650. Dengan beberapa modifikasi khusus pada bagian saya, saya dapat mencukur
43lagi.bit 114 yang .Pada dasarnya, ia mencari melalui kisi-kisi untuk kemungkinan gerakan, dan setiap kali menemukannya, menambah nilainya ke total horizontal atau vertikal. Setelah mencari melalui setiap gerakan yang mungkin, ia menentukan arah mana yang harus bergerak, berdasarkan pada apakah total H atau V lebih tinggi, dan arah yang telah dicoba. Kanan dan Bawah adalah pilihan pertama.
Melihat ke belakang pada hal ini, saya menyadari sekarang bahwa jika salah satu totalnya bukan nol, upaya pertama untuk menggeser ubin ke arah itu dijamin berhasil. Mungkin saya bisa menyederhanakan bagian penentu langkah menuju akhir berdasarkan ini.
Saya meninggalkan program ini berjalan selama satu jam dan berakhir dengan skor tinggi
6080
. Namun, dalam salah satu uji coba (pra-minifikasi), itu berhasil skor tinggi6492
, hanya 128 di belakang terbaik pribadi saya6620
. Logikanya bisa sangat ditingkatkan dengan membuatnya bergerak ke kiri sesekali, karena jumlahnya cenderung menumpuk seperti ini:( EDIT: Saya membiarkannya berjalan lebih lama, dan berhasil beberapa
7532
poin. Sial, program saya lebih pintar dari saya ....)Satu berita gembira yang lebih menarik: dalam salah satu upaya saya yang salah dalam menciptakan sesuatu yang bisa digunakan, entah bagaimana itu berakhir sehingga setiap kali dua ubin berada di baris atau kolom yang sama, mereka digabungkan. Hal ini menyebabkan perkembangan menarik karena 2s atau 4s acak akan berulang kali bergabung dengan ubin tertinggi, menggandakannya setiap waktu. Suatu kali, entah bagaimana berhasil mencetak lebih dari 11.000 dalam 15 detik sebelum saya mematikannya .... XD
Setiap saran untuk perbaikan sangat kami harapkan!
sumber
Wiper Kaca Depan: 454 byte
Langsung saja Kanan, Atas, Kiri, Atas ... berulang (seperti wiper pada mobil) kecuali macet. Jika macet, ia akan berusaha mematikan wiper dan menyalakannya kembali. Skor tertinggi yang saya dapatkan dalam satu jam adalah 12.156 - Namun, sebagian besar skor berada di antara 3k - 7k.
Ini akan menampilkan skor ke konsol setelah setiap upaya.
sumber
UpAndLeftBot
Seperti judulnya, bergerak ke atas & kiri dengan mencuri karya David Mulder & bertukar beberapa nomor (saya tidak tahu jack tentang Javascript, jadi yang terbaik yang bisa saya lakukan adalah ini).
sumber