Konteks
Chess960 (atau Fischer Random Chess) adalah varian catur yang diciptakan dan dianjurkan oleh mantan Juara Catur Dunia Bobby Fischer, diumumkan secara publik pada 19 Juni 1996 di Buenos Aires, Argentina. Ini mempekerjakan papan dan potongan yang sama seperti catur standar; Namun, posisi awal dari potongan-potongan pada peringkat rumah pemain secara acak
Aturan
- Bidak putih ditempatkan di peringkat kedua seperti dalam catur standar
- Semua potongan putih yang tersisa ditempatkan secara acak di peringkat pertama
- Para uskup harus ditempatkan di bujur sangkar berwarna berlawanan
- Raja harus ditempatkan di sebuah kotak di antara benteng.
- Potongan Black ditempatkan sama dan berlawanan dengan White.
Dari: http://en.wikipedia.org/wiki/Chess960
Untuk semua orang yang ingin memposting jawaban ...
Anda harus membuat generator posisi Chess960, yang mampu menghasilkan satu dari 960 posisi secara acak mengikuti aturan yang dijelaskan di atas (harus mampu mengeluarkan salah satu dari 960, hardcoding satu posisi tidak diterima!), dan Anda hanya perlu output peringkat putih satu potong.
Contoh output:
rkrbnnbq
dimana:
- k raja
- q ratu
- b uskup
- dan ksatria
- rook
Ini akan menjadi kode golf, dan pemutus dasi akan menjadi upvotes.
sumber
Jawaban:
GolfScript (
4948 karakter, atau 47 untuk output huruf besar)Ini menggunakan teknik standar permutasi secara acak sampai kita memenuhi kriteria. Tidak seperti solusi GolfScript w0lf, ini tidak memeriksa string, sehingga cenderung berjalan melalui loop lebih sering.
Menggunakan huruf besar memungkinkan menyimpan satu karakter:
sumber
Ruby 1.9,
6765 karakterAh, teknik "terus acak sampai Anda menghasilkan sesuatu yang valid" ...
(Di Ruby 2.0,
%w(r r n n b b q k)
bisa jadi'rrnnbbqk'.chars
)sumber
~
dengan biaya peringatan, jika tersedia. pastebin.com/nuE9zWSw$_
variabelnya. Ia bekerja karena ruby memiliki beberapa metode rapi seperti Kernel # chop yang berfungsi seperti metode String # chop yang setara tetapi dengan$_
sebagai penerima. Ini menghemat banyak waktu ketika (misalnya) Anda menulis loop baca / proses / tulis menggunakanruby -n
atauruby -p
.GolfScript
6049(dipersingkat menjadi 49 karakter berkat kiat hebat Peter Taylor)
Tes online di sini .
Penjelasan kode:
sumber
b
s tampaknya sangat panjang. Bagaimana dengan.'b'/1=,2%
?'qbbnnxxx'
keluar dari loop dan perombakan string yang sama.J, 56 karakter
dibutuhkan beberapa detik pada mesin saya karena algoritma yang tidak efisien. Beberapa kecepatan mungkin diperoleh dengan menambahkan
~.
(menghapus duplikat) sebelumnya'kqbbnnrr'
.penjelasan:
?~!8
penawaran8!
elemen acak dari0 ... 8!
'kqbbnnrr'A.~
menggunakannya sebagai indeks anagram ke stringkqbbnnrr
.(#~'...'&rxeq"1)'
menyaringnya dengan regex dalam tanda kutip.{.
berarti "ambil elemen pertama"sumber
K, 69
sumber
Python, 105 karakter
Pada dasarnya teknik chron, minus barang-barang Ruby yang elegan.
Terima kasih kepada Peter Taylor untuk mempersingkat regex.
sumber
not s('b(..)*b',a)
sepertinya cara bertele-teles('b.(..)*b',a)
. Juga,sample
mungkin satu karakter lebih pendek darishuffle
, tetapi memerlukan argumen tambahan.Shuffle
kembaliNone
meskipun, jadi itu tidak baik :(or
regex , karena Anda memeriksa string yang sama dan setara dengan regex alternation (|
). Menghemat 13 karakter.