Alak ditemukan oleh ahli matematika AK Dewdney, dan dijelaskan dalam bukunya Planiverse 1984. Aturan Alak sederhana:
Alak adalah gim dua pemain yang dimainkan di papan satu dimensi dengan sebelas slot di atasnya. Setiap slot dapat menampung paling banyak satu bagian sekaligus. Ada dua macam kepingan, "x" dan "o". x milik satu pemain, o milik yang lain. Konfigurasi awal papan adalah:
xxxx___oooo
Para pemain bergiliran bergerak. Di setiap belokan, setiap pemain hanya bisa bergerak satu bagian, satu kali. Seorang pemain tidak bisa melewatkan gilirannya. Seorang pemain dapat memindahkan salah satu bagiannya ke slot kosong berikutnya ke kanan atau kiri, yang mungkin melibatkan melompati slot yang ditempati. Seorang pemain tidak dapat memindahkan bagian dari sisi papan.
Jika suatu gerakan menciptakan pola di mana potongan-potongan lawan dikelilingi, di kedua sisi, oleh dua potong warna penggerak (tanpa ada slot kosong yang tidak diduduki), maka potongan-potongan yang dikelilingi itu dikeluarkan dari papan.
Tujuan dari permainan ini adalah untuk menghapus semua bagian lawan Anda, di mana titik permainan berakhir. Menghapus semua-tetapi-satu juga mengakhiri permainan, karena lawan tidak dapat mengelilingi Anda dengan satu bagian, dan karenanya akan selalu kalah dalam beberapa gerakan saja.
Saya menemukan game ini online dan bertanya-tanya: apakah bisa golf?
Peraturan golf
- Kode Anda harus mengikuti semua aturan dalam permainan, menangani tangkapan, pergerakan yang tepat, dll. (Satu-satunya pengecualian adalah Anda tidak harus menambahkan bot, tetapi Anda harus memiliki entah bagaimana kedua pemain dikendalikan, dan satu pemain harus manusiawi).
- Input harus dipindahkan petak pada ubin X ke ubin Y, atau keluar. Misalnya, Anda dapat menggunakan
1 4
untuk mengatakan 'pindahkan bagian ini di ubin 1 ke ubin 4'.quit
akan mengakhiri program, meskipun menggunakan Control- Cakan diterima. Anda juga harus memeriksa apakah perpindahan tidak valid (dengan pergi ke luar papan atau pindah ke suatu tempat yang Anda harus melewati ruang kosong untuk mendapatkan atau mengirim pesan yang bukan pasangan ubin atauquit
). - Output untuk pemain menang dan tidak valid harus
P1 WINS
,P2 WINS
danINVALID
masing-masing. (Semua ini adalah 7 karakter.) - Output harus menunjukkan papan. Itu saja yang diperlukan.
- Tidak masalah jika Anda menggunakan alat bantu seperti ubin bernomor atau potongan lainnya.
Tantangan berakhir jika:
- Satu jawaban mendapat 50 suara
- Satu jawaban tetap terpilih sebagai teratas selama 3 minggu, dan tidak ada jawaban lain yang diposting pada waktu itu
dan tantangannya memiliki setidaknya 3 jawaban (jadi ada beberapa kompetisi nyata).
Aturan mainnya
- Pemain di sebelah kiri harus mulai duluan.
- Hanya satu bagian menempati persegi pada satu waktu. Anda memindahkan potongan ke kiri atau ke kanan hingga menyentuh ruang kosong. Papan tidak terbungkus, dan Anda tidak dapat bergerak melewati area yang tidak dihuni. Sebagai contoh:
xoo__o
. Di sini,x
bergerak ke kanan akan mengubah papan_oox_o
.xxooo_
. Di sini, yang paling kiri-kirix
bisa bergerak untuk menghasilkan_xooox
, yang menangkapo
, meninggalkan_x___x
.x__oox
. Di sini,o
s tidak ditangkap (masih ada celah). Pengambilan foto tidak dimungkinkan karena Anda tidak dapat bergerak melintasi ruang kosong. Dix
sebelah kiri hanya bisa bergerak satu ruang, karena tidak ada bagian lain di antara (meninggalkan_x_oox
).
- Beberapa potongan yang berdekatan dapat ditangkap sekaligus jika kelompok dikelilingi oleh potongan lawan. Misalnya dari
x_oox
ke_xoox
akan menangkap keduanyao
dan menghasilkan_x__x
. - Jika setelah bergerak, Anda pertama-tama menangkap kepingan lawan , sebelum memeriksa apakah kepingan Anda sendiri harus dihapus. Ambil dua contoh:
o_oxx
untukoxox_
. Pertama, yang keduao
ditangkapox_x_
,, jadi yang pertamax
tetap di papan tulis.o_oox
untukoxoo_
. Kali ini, tidak adao
yang ditangkap, jadi yangx
ditangkap sebagai gantinya.- Jika Anda hanya memiliki satu bagian, permainan berakhir, karena Anda tidak dapat menangkap hanya dengan satu bagian.
Biarkan game dimulai! Saya berharap dapat melihat apa yang Anda hasilkan.
sumber
Jawaban:
C,
617592 byteTerurai:
Saya benar-benar ingin mendapatkan yang ini dalam ~ 400 byte, tetapi ada banyak aturan kecil di sini dan pemrosesan input berakhir sangat menjengkelkan. Saya jelas tidak selesai dengan ini. Berikut adalah serangkaian contoh proses yang mencakup hampir semua hal:
Jika saya salah mengartikan sesuatu, beri tahu saya!
sumber
printf("INVALID");
denganputs("INVALID");
,o<2||x<2
dengano<2|x<2
danprintf(b);while(!q){
denganfor(printf(b);!q;){
PHP - 505
Pemberitahuan harus ditekan dengan mengalihkan
STDERR
ke/dev/null
.Dengan ruang kosong waras:
Dengan kasus uji BrainSteel:
sumber
/dev/null
./dev/null
.Python 2,
536509448441 byteHubungi via
a()
; bergerak harus dimasukkan dalam bentukpiece,destination
(yaitu,1,4
); keluar dengan Ctrl-C. Kalau ada yang bisa melihat lebih banyak potensi golf, saya semua telinga.sumber
SpecBAS - 718 byte
SpecBAS adalah versi terbaru dari Sinclair / ZX BASIC yang dapat berjalan di luar emulator. (Masih ditafsirkan).
Telah menggunakan beberapa fitur baru untuk menurunkan ukuran sebanyak yang saya bisa.
Baris 12 membuat regex untuk mencari potongan "yang di-sandwich" menggunakan inline IF dan baris 18 menggunakan pembungkus di sekitar sifat INC (daripada mengatakan
INC p: IF p=3 THEN LET p=1
)Keluaran (tidak dapat menyalin dari janda keluaran, jadi tangkapan layar)
sumber
C #, 730 byte
Saya membayangkan bahwa perbaikan lebih lanjut dimungkinkan. Di sisi lain, saya menafsirkan
INVALID
output sebagai mengakhiri eksekusi, jadi saya mungkin perlu memperbaiki masalah itu agar setara dengan jawaban lain.sumber