Latar Belakang
Dalam permainan Nim , pemain secara bergantian menghilangkan "batu" dari "tumpukan": di setiap belokan, pemain harus melepas di antara satu dan semua batu dari satu tumpukan. Tujuan Nim adalah untuk mengambil batu terakhir atau, dalam varian misere, untuk memaksa lawan Anda melakukannya - namun, ternyata strateginya hampir identik.
Nim membuat permainan bar yang menyenangkan. Anda dapat menggunakan korek api atau koin untuk "batu," dan "tumpukan" biasanya disusun dalam garis. Di bawah ini adalah pengaturan klasik dengan tumpukan 1, 3, 5, dan 7:
Jika Anda belum pernah bermain Nim sebelumnya, Anda dapat mencobanya sebelum mencoba tantangan ini. Inilah versi yang disebut "Mutiara Sebelum Babi" .
Strategi
Strategi optimal dalam Nim cukup rumit sehingga kebanyakan orang awam kehilangan secara konsisten oleh seorang ahli, tetapi sederhana untuk digambarkan dengan aritmatika biner .
Melakukan operasi biner XOR mental, bagaimanapun, itu sulit, jadi untungnya ada cara yang setara untuk memvisualisasikan strategi yang benar yang lebih mudah untuk diterapkan secara real time, bahkan ketika mabuk.
Hanya ada tiga langkah:
- Secara mental kelompok "batu" di setiap baris ke dalam subkelompok yang ukurannya adalah kekuatan 2, dimulai dengan ukuran terbesar yang mungkin: 8, 4, 2, dan 1 cukup untuk sebagian besar permainan.
- Cobalah untuk mencocokkan setiap kelompok dengan kembaran di baris lain, sehingga setiap kelompok memiliki pasangan.
- Jika ini tidak memungkinkan, hapus "batu" tidak berpasangan dari satu baris (ini akan selalu mungkin - lihat tautan Wikipedia untuk alasannya) sehingga langkah 2. menjadi mungkin.
Atau, katakan dengan cara lain: "Keluarkan beberapa batu dari satu tumpukan sehingga jika Anda kemudian mengelompokkan tumpukan menjadi kekuatan 2 semua kelompok dapat dipasangkan dengan grup di tumpukan lain." Dengan peringatan bahwa Anda tidak dapat memecah kekuatan yang lebih besar dari 2 menjadi yang lebih kecil - misalnya, Anda tidak dapat mengelompokkan garis dengan 8 batu menjadi dua kelompok yang terdiri dari 4.
Misalnya, inilah cara Anda memvisualisasikan papan di atas:
Papan ini seimbang sempurna, jadi Anda ingin lawan Anda bergerak terlebih dahulu.
Tantangan
Diberikan daftar bilangan bulat positif yang mewakili ukuran "tumpukan" Nim, kembalikan visualisasi teks polos papan Nim seperti yang dilihat oleh seorang ahli.
Apa yang merupakan visualisasi yang valid paling baik dijelaskan dengan contoh, tetapi Anda harus:
- Tetapkan karakter yang berbeda untuk setiap "subkelompok kekuatan-2" dan pasangannya (subkelompok tidak berpasangan tidak memenuhi syarat), dan gunakan karakter itu untuk mewakili "batu" di kedua subkelompok dan pasangan.
- Mewakili setiap berpasangan "batu" (yaitu, orang-orang ahli akan menghapus ketika bermain yang normal - tidak misere - Nim) menggunakan tanda hubung:
-.
Akan ada banyak cara untuk mencapai visualisasi yang valid, dan semuanya valid. Mari kita bahas beberapa kasus uji:
Uji Kasus
Input: 1, 3, 5, 7
Kemungkinan Output 1:
A
BBA
CCCCD
CCCCBBD
Anda dapat secara opsional memasukkan spasi di antara karakter, serta garis kosong di antara baris:
Kemungkinan Output 2:
A
B B A
C C C C D
C C C C B B D
Input: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Urutan dan pilihan karakter dapat apa saja yang Anda suka:
Kemungkinan Output 1:
G
E E
E E G
C C C C
C C C C F
B B B B D D
B B B B D D F
H H I - - - - -
A A A A A A A A I
A A A A A A A A H H
Simbol Unicode juga ok:
Kemungkinan Output 2:
◎
◈ ◈
◈ ◈ ◎
△ △ △ △
△ △ △ △ ◉
◐ ◐ ◐ ◐ ◀ ◀
◐ ◐ ◐ ◐ ◀ ◀ ◉
▽ ▽ ◒ - - - - -
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ◒
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ▽ ▽
Input: 7
Dari aturan berikut bahwa "tumpukan tunggal" harus dihapus sepenuhnya.
Kemungkinan Output 1:
-------
Kemungkinan Output 2:
- - - - - - -
Input: 5, 5
Kemungkinan Output:
A A A A B
A A A A B
Aturan tambahan
- Ini adalah kode golf dengan aturan standar. Kode terpendek menang.
- Input fleksibel, dan dapat diambil dalam bentuk list-ish apa pun yang nyaman bagi Anda.
- Keluaran juga fleksibel, seperti contoh di atas. Variasi paling masuk akal akan diizinkan. Tanyakan apakah Anda tidak yakin tentang sesuatu.
["H","EE","EEH","CCCC","CCCCI","DDDDFF","DDDDFFI","AAAAAAAA","AAAAAAAA-","----------"]
AAAABBBBsebenarnya tidak valid, dan ABBtidak - tetapi itu membuat output kurang dapat dibaca jadi saya pikir hanya membuat penurunan dalam garis aturan eksplisit adalah yang terbaik.

