Jack dan Jane memutuskan untuk memainkan permainan catur untuk sementara waktu. Sayangnya, Jack agak buruk dalam memvisualisasikan. Dia merasa sulit untuk membayangkan gerakan yang mungkin untuk bagian tertentu selain bidak, tentu saja!
Tantangan Anda adalah membantu menemukan Jack opsi yang memungkinkan untuk karya yang diberikan (selain gadai).
Jika seseorang lupa, berbagai bagian dilambangkan dengan:
- K: Raja
- T: Ratu
- N: Ksatria
- B: Uskup
- R: Benteng
Sebagai contoh, pada gambar berikut Knight terletak di d4
dan dapat pindah ke c2
, b3
, b5
, c6
, e6
, f5
, f3
, e2
. Untuk input yang diberikan:
Nd4
Anda akan menghasilkan:
Nc2 Nb3 Nb5 Nc6 Ne6 Nf5 Nf3 Ne2
Aturan:
- Urutan output tidak masalah selama semua gerakan yang mungkin terdaftar
- Pergerakan yang mungkin dapat dipisahkan dengan spasi putih, baris baru atau pembatas lainnya
- Input dapat diteruskan ke program sebagai parameter atau via
STDIN
- Spasi putih dalam program harus dihitung, jadi manfaatkan secara optimal
Ini kode golf. (Harap menghindari penggunaan alat / utilitas yang dirancang khusus untuk tujuan itu.) Jawaban terpendek menang!
f(x)... case "Q": {f("B");f("R")}
Jika fungsi memerlukan #includes ini harus menjadi bagian dari jumlah byte.Jawaban:
GolfScript,
9493 karakterProgram GolfScript pertama saya! Ini membutuhkan waktu satu jam untuk mencari-cari tidak benar-benar tahu apa yang saya lakukan, tetapi saya bertahan dan saya pikir saya berhasil mempelajari dasar-dasar bahasa dan bermain golf dengan cukup baik.
Sepenuhnya golf :
Sumber yang dikomentari dan lebih bagus :
Ini mungkin terlihat seperti jawaban Claudiu, yang karena saya mereferensikan jawabannya, serta solusi C saya (yang tidak dikirim), sementara membuat jawaban saya. Dia memberikan spesimen yang baik dari program GolfScript yang bekerja (kompleks) kompleks, dan itu membantu saya belajar banyak tentang bahasa tersebut. Terima kasih, Claudiu!
Masih baru di GolfScript, jika kalian punya umpan balik, saya sangat senang mendengarnya!
sumber
Python,
217212220217213 karakterTerikat solusi Mathematica 213-byte
Saya memulai dengan menghasilkan semua gerakan yang valid tetapi itu tumbuh terlalu besar sehingga pendekatannya sangat mirip dengan yang Mathematica.
sumber
Mathematica,
278272264260215213 karakterVersi tidak disatukan:
Contoh penggunaan:
Versi ungolfed membuat papan penuh, dan kemudian memilih posisi yang benar dengan
Cases
, sedangkan versi golf menjatuhkan gerakan tidak valid segera dalamTable
perintah dengan mengeluarkan##&[]
, yang hilang begitu saja.sumber
N4d
? Bukankah seharusnya begituNd4
?Nd4
.ChessboardDistance
Abs
di Mathematica, karena bilah ini menunjukkan alternatif dalam suatu pola.Haskell
225 220 208 205 200182Akan sulit untuk menyentuh Mathematica ketika itu memiliki gerakan catur bawaan: rollseyes: (dimainkan dengan baik oleh m.buettner)Saya mengambil semuanya kembali. Mengalahkan Mathematica pada usia 31!Suntingan terakhir: penggantian case dengan fungsi, inline filter menjadi pemahaman, untuk mengalahkan entri dalam R;)
pemakaian:
Tidak Digubah (sesuai dengan 208 versi char sebelum 'u' diuraikan):
sumber
piece
ke daftar[piece,newfile, newrank]
jika Anda tidak menggunakannya dalam pencocokan pola, dapat menghemat beberapa karakter?Bash, 238
Bagaimana itu bekerja
Idenya adalah untuk mewakili setiap bidang di papan tulis dengan nilai numerik, menggunakan koordinatnya sebagai angka dasar-20 dan mengurangi 200. Dengan cara ini,
a1
menjadi20 * 10 + 1 - 200 = 1
,h8
menjadi20 * 17 + 8 - 200 = 148
, dll.Sekarang, kemungkinan pergerakan Uskup dapat diwakili oleh kelipatan (positif atau negatif) dari 19 - jumlah langkah yang sama (+20) dan ke kiri (-1) - atau 21 - jumlah langkah yang sama (+20) ) dan ke kanan (+1).
Penempatan sosok setelah bergerak hanyalah jumlah dari posisi semula dan gerakannya. Setelah menambahkan angka-angka itu, kita harus memeriksa apakah jumlahnya sesuai dengan bidang yang valid di papan tulis.
Karena basis (20) lebih dari dua kali lebih besar dari angka tertinggi yang dimungkinkan (8), jumlah tidak dapat membungkus papan, misalnya, memindahkan Bh1 tujuh langkah ke kanan dan naik akan menghasilkan posisi papan tidak valid.
Garis
menghitung semua kemungkinan pergerakan potongan yang diwakili oleh angka positif.
Perintahnya
menyimpan pengenal potongan dalam variabel a , representasi numerik posisi awal dalam b dan huruf a hingga h dalam array d .
Setelah penjepit ekspansi,
eval{,} echo '$'$a
menjadieval eval echo '$'$a
(kejahatan ganda), yang mengevaluasi, misalnyaeval echo $K
, yang mengevaluasiecho 1 19 20 21
.for i in $c -${c// / -};do …; done
loop semua gerakan yang mungkin dan rekan-rekan negatifnya.echo $a${d[$[(i+=b)/20]]}$[i%20]
memberikan posisi akhir setelah gerakan.grep '[a-h][1-8]$'
memastikan bahwa kami memiliki posisi dewan yang valid.sumber
Golfscript,
144135 karakterAlih-alih terus mencoba golf solusi Python saya , saya menerjemahkannya ke Golfscript:
Terjemahan langsung tanpa banyak bermain golf sehingga kemungkinan besar dapat dikecilkan lebih jauh. Mengambil input dari stdin tanpa baris baru, coba di sini (dua baris pertama adalah untuk meniru stdin).
sumber
C
634632629625600 karakterAda saran tentang cara meningkatkan ini? Ini adalah pertama kalinya saya mengirimkan jawaban.
sumber
C
dapat sangat disederhanakan menggunakan operator ternary?:
dan dengan menggunakan nilai balikprintf
. (printf
Mengembalikan jumlah karakter yang ditulis, sehingga dalam hal ini selalu non-nol.)C(P,c,r){return(0<=c)&(c<8)&(0<r)&(r<9)?printf("%c%c%d ",P,c+'a',r):0;}
. Sunting kecil: ada ruang tambahanM
setelahif
Anda dapat menghapus.Haskell,
300269 karakterTerima kasih kepada bazzargh untuk bantuan kehilangan 31 karakter ...
Algoritma yang sama dengan versi Mathematica. Contoh keluaran dari ghci:
(Anda tidak meminta pemeriksaan kewarasan!)
sumber
Haskell, 446 karakter
Disebut menggunakan
j
fungsiSaya belum bekerja dengan Haskell dalam beberapa bulan, jadi itu tidak berakhir sesingkat sebagian besar solusi lain, tapi saya yakin ada beberapa optimasi yang dibuat, terutama dengan
h
. Saya mungkin mempersingkatnya sedikit.sumber
q & k [
311262 karakter]Ada potensi mengurangi beberapa karakter lagi. Saya akan mengurangi itu di iterasi berikutnya.
Pemakaian
Benteng
Raja
Ksatria
Uskup
Ratu
sumber
R, 203 karakter
Versi tidak disatukan:
Pemakaian:
Solusinya bahkan bisa dibaca. Namun saya menambahkan beberapa tanda kurung dan komentar untuk pembaca yang tidak terbiasa dengan kode R (pada versi yang tidak diklik).
sumber
Haskell (hipotetis), 248 karakter
Sayangnya, setiap kompiler Haskell yang bisa saya dapatkan sekarang memiliki masalah dengan string Unicode literal. Inilah versi (lebih panjang) yang benar-benar berfungsi:
Definisi
h x y=...
adalah fungsi hash; bergerak valid akan hash ke nomor karakter yang ada di string 41 karakter. Ini menghilangkan kebutuhan akan pernyataan "kasus" atau yang setara.Saya tidak berencana untuk bekerja lebih jauh tentang ini sekarang. Akan menyenangkan untuk melihat apakah seseorang dapat menggunakan fungsi hash dalam bahasa yang lebih ringkas untuk membuat solusi yang lebih pendek.
sumber