J, 28 karakter
((C.!.2=_1^i.&0)&.".&.stdin''
Urutan input adalah baris-utama dengan baris yang dibaca bergantian dari kiri ke kanan dan kanan ke kiri dalam satu jalur di seberang tabel. Diasumsikan nol milik sudut kiri atas.
Penggunaan di Windows:
<nul set /p="0 1 2 3 7 6 5 4 8 9 10 11 15 14 13 12" | jconsole c:\...\15.jhs
Penjelasan:
<nul set /p=
digunakan untuk mencegah baris baru dalam input, yang echo
menghasilkan yang ".
tidak suka. Tentu saja, Unix mendukung echo /n
.
v&.".&.stdin''
membaca "v under parse di bawah stdin" berarti "input, lalu parsing input, lalu lakukan v, lalu unduh parse (= format), lalu undo input (= output)". 1!:1]3
lebih pendek satu karakter, tetapi tidak memiliki invers yang ditentukan.
C.!.2
berarti "paritas permutasi". Ia mengembalikan 1
(bahkan paritas) atau _1
(paritas ganjil). Itu adalah,_1^inversions
_1^i.&0
berarti "-1 pangkat indeks 0".
- dengan demikian,
C.!.2=_1^i.&0
berarti "apakah paritas permutasi sama dengan paritas posisi lubang?"
Ini berfungsi untuk papan 4x4, tetapi jika posisi ujung yang diinginkan adalah baris-utama kiri-ke-kanan, maka permutasi untuk posisi yang diselesaikan memiliki jumlah ganjil inversi, dan dengan demikian paritas ganjil. Juga, paritas dibalik (untuk urutan input apa pun) ketika posisi lubang yang diinginkan bergerak dari kiri atas ke kanan bawah. Dalam kedua kasus, perbaikannya adalah satu karakter: tambahkan -
setelah =
untuk membalikkan paritas yang diharapkan.
Bukti kebenaran:
Setelah setiap gerakan, nol bertukar posisi dengan beberapa angka, membalikkan paritas permutasi. Angka nol juga bergantian antara posisi kotak-kotak putih dan hitam, ditunjukkan oleh posisi ganjil dan genap dalam pemesanan input. Dengan demikian, kondisi ini perlu. Ini juga cukup dengan argumen penghitungan: sudah menjadi rahasia umum bahwa separuh dari posisi itu bisa dipecahkan. Kondisi ini menyaring tepat setengah dari posisi yang mungkin.