J, 28 karakter
((C.!.2=_1^i.&0)&.".&.stdin''
Giriş sırası satır-büyüktür ve satırlar tablo boyunca tek bir yolda dönüşümlü olarak soldan sağa ve sağdan sola okunur. Sıfırın sol üst köşeye ait olduğunu varsayar.
Windows üzerinde kullanım:
<nul set /p="0 1 2 3 7 6 5 4 8 9 10 11 15 14 13 12" | jconsole c:\...\15.jhs
Açıklama:
<nul set /p=
girişte yeni bir satır olmasını önlemek için kullanılır echo
, bu ".
da bunu beğenmez. Elbette Unix destekliyor echo /n
.
v&.".&.stdin''
"stdin altında ayrıştırma altında v" girişini okur, sonra girişi ayrıştırır, sonra v'yi yapar, sonra ayrıştırmayı geri alır (= format), sonra girişi geri alır (= çıktı) ". 1!:1]3
bir karakter daha kısadır, ancak tanımlanmış bir tersi yoktur.
C.!.2
"permütasyon paritesi" anlamına gelir. Ya 1
(çift parite) ya da _1
(tek parite) döndürür . Yani,_1^inversions
_1^i.&0
"-1 indeksinin gücüne -1" anlamına gelir.
- dolayısıyla,
C.!.2=_1^i.&0
"permütasyon paritesi delik pozisyon paritesine eşit mi?"
Bu bir 4x4 kartı için işe yarar, ancak istenen son konum soldan sağa satır-büyükse, çözülmüş konumun permütasyonu tek sayıda inversiyona ve dolayısıyla garip pariteye sahiptir. Ayrıca, istenen delik konumu sol üstten sağa doğru hareket ettiğinde eşlik (herhangi bir giriş sırası için) ters çevrilir. Her iki durumda da düzeltme bir karakterdir: beklenen pariteyi tersine çevirmek için -
after =
.
Doğruluk kanıtı:
Her hareketten sonra sıfır, permütasyon paritesini çevirerek bir sayı ile bir konum değiştirir. Sıfır ayrıca giriş sıralamasında tek ve çift konumlarla gösterilen beyaz ve siyah dama tahtası konumları arasında değişir. Bu nedenle, bu durum gereklidir. Sayma argümanı ile de yeterlidir: pozisyonların tam yarısının çözülebilir olduğu yaygın bir bilgidir. Bu koşul olası konumların tam yarısını filtreler.