Diberi posisi dengan deretan benteng dan / atau ruang kosong, hasilkan berapa banyak gerakan benteng yang berbeda dimungkinkan. Benteng dapat bergerak ke kiri atau kanan ke ruang kosong, tetapi tidak ke benteng yang membutuhkan melewati benteng lain. Ketika benteng bergerak, benteng-benteng lainnya tetap di tempatnya.
Misalnya, dari posisi ini, 6 gerakan dimungkinkan:
.R..RRR.
- Benteng pertama (paling kiri) dapat bergerak 1 spasi kiri, atau 1 atau 2 spasi kanan (3 bergerak)
- Benteng berikutnya hanya bisa bergerak 1 atau 2 spasi tersisa (2 bergerak)
- Benteng ketiga tidak bisa bergerak sama sekali karena terjepit di antara dua benteng lainnya (0 bergerak)
- Benteng terakhir hanya bisa bergerak 1 spasi ke kanan (1 bergerak)
Perhatikan bahwa suatu posisi mungkin tidak memiliki benteng sama sekali, atau tidak ada ruang kosong sama sekali.
Input: Daftar non-kosong (string, array, dll.) Dari rooks dan spasi kosong. Anda dapat mewakili mereka sebagai True
/ False
, 1
/ 0
, 'R'
/ '.'
, atau dua karakter byte tunggal yang berbeda atau satu digit angka pilihan Anda. Terserah Anda mana yang berarti benteng dan yang berarti ruang kosong.
Output: Bilangan bulat non-negatif. Mengapung seluruh nomor juga baik-baik saja.
Uji kasus
Outputnya adalah angka di sebelah kiri.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Untuk lebih banyak kasus uji, berikut adalah semua input hingga panjang 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 byteCobalah online!
-1 byte berkat @JoKing
Fungsi ini mengambil string byte Python sebagai input. Setiap ruang kosong dikodekan sebagai tab dan setiap benteng dikodekan sebagai byte yang
b'\x00'
memiliki nilai0
.Perhitungannya sama dengan
lambda s:(s+s).strip().count(b'\t')
saat memiliki jumlah byte lebih rendah.sumber
JavaScript (ES6),
3833 byteDisimpan 5 byte berkat @ JoKing
Mengambil input sebagai string. Mengharapkan ruang untuk kotak kosong dan karakter lain untuk benteng.
Cobalah online!
Berkomentar
Python 2 ,
4033 byteDisimpan 7 byte berkat @Grimy
Cobalah online!
sumber
count
sebagai gantisplit
( TIO )Japt , 5 byte
Cobalah
sumber
Perl 6 , 16 byte
Cobalah online!
Regex yang cocok dengan semua instance rook yang lengkap diikuti oleh spasi, atau spasi yang diikuti oleh rook dan mengembalikan jumlah pertandingan.
sumber
05AB1E , 5 byte
Cobalah online!
sumber
Retina ,
2315 byteGandakan jumlah spasi di antara benteng, garis grep dengan setidaknya satu benteng, kemudian hitung jumlah spasi.
Cobalah online!
Meskipun program ini menggunakan spasi bukan periode, saya menambahkan kode awalan sehingga kasus uji yang diberikan dapat dengan mudah ditempel dan digunakan.
Saya berharap bisa menggunakan pertandingan yang tumpang tindih
(?<=R.*) | (?=.*R)
, tetapi tumpang tindih tidak begitu agresif. Perlu untuk menghitung semua cara yang memungkinkan suatu pertandingan dapat diperoleh untuk mengembalikan hasil yang benar dengan metode itu.sumber
.R.R.R.
mengubah baris pertamaR.+R
mungkin bisa membantu?Jelly , 6 byte
Cobalah online!
Tautan monadik mengambil daftar
0
untuk benteng dan1
untuk ruang dan mengembalikan integer dengan jumlah gerakan. TIO link mengambil daftar papan yang mungkin disisipkan yang diberikan dalam pertanyaan, mengkonversi ke format yang tepat dan kemudian menampilkan jawaban yang dihitung dan benar.Penjelasan
sumber
Japt , 6 byte
Spasi untuk spasi, karakter lain untuk benteng.
Cobalah
sumber
Siput, 7 byte
Setidaknya itu mengalahkan Retina :)
Cobalah online!
sumber
Jelly , 5 byte
Cobalah online!
-1 terima kasih kepada Jonathan Allan .
0
mewakili benteng,1
mewakili ruang kosong.sumber
Ẉ
untuk mendapatkan lima:ḲẈ+ƝS
Ẉ
tetapi menggunakanṣ0
...Stax ,
765 byteJalankan dan debug itu
Gunakan tab untuk kotak kosong dan karakter lain untuk benteng.
sumber
C (dentang) , 57 byte
Cobalah online!
Saya menyadari itu tidak berfungsi untuk daftar kosong .. Sekarang berfungsi! Plus menghemat beberapa byte!
1 = benteng. 0 = spasi.
untuk (.. i + = n ++? - i: 1) // menghitung spasi atau mengatur ulang gerakan ekstra => i = - ~ i ! * n ++ (@ceilingcat)
o + = * n? r = 1, i: r; // menambahkan ke output -i- (gerakan ekstra) ketika sebuah rook bertemu ditambah set -r- (rook met), -i- akan dihapus untuk kalimat kenaikan.
menambahkan -r- untuk setiap ruang (benteng bertemu dijamin)
sumber
Haskell , 36 byte
Cobalah online!
Menggunakan 1 untuk ruang kosong, 0 untuk benteng. Menghitung jumlah 1 yang tidak dalam blok awal, dan menambahkannya ke hasil untuk string yang terbalik.
sumber
Haskell , 33 byte
Cobalah online!
Fungsi anonim yang mengambil input sebagai daftar 1s (spasi) dan 0s (rooks). Ini memangkas spasi dari awal dan akhir daftar, lalu menyatukan dua versi daftar dan menjumlahkannya.
Ini menggunakan GHC 8.4.1 atau lebih baru untuk memiliki akses ke
<>
operator tanpa mengimpornya.sumber
Python 2 , 59 byte
Cobalah online!
sumber
Japt , 6 byte
Cobalah online
sumber
Bahasa Wolfram (Mathematica) ,
4338 byteCobalah online!
Solusi Port of Neil's Retina . Menggunakan 1 untuk spasi dan 0 untuk benteng.
sumber
Haskell ,
685854 byteCobalah online!
sumber
Merah , 46 byte
Cobalah online!
Hanya port Merah solusi JavaScript / Python Arnauld . Mengambil spasi sebagai kotak kosong.
sumber
Java 11,
3532 bytePort of @ Joel 's Python 3 menjawab .
-3 byte terima kasih kepada @ Joel juga.
Menggunakan NULL-byte (
\0
) untuk Benteng dan tab (\t
) untuk spasi.Cobalah online.
Saya mencoba menggunakan
s->(s+s).trim().chars().sum()/9
pada awalnya sebagai 31-byter, tetapi ini tidak berhasil karenaString#trim
builtin tidak hanya menghilangkan spasi / tab / baris baru, tetapi juga semua byte lain yang lebih kecil atau sama denganU+0020
(unicode 32; a space) , jadi itu akan menghapus NULL-byte juga ..Terima kasih kepada Joel untuk merekomendasikan saya Java 11+
String#strip
builtin baru (yang saya lupa mereka tambahkan) sebagai alternatif. Yang ini juga menghilangkan bagian trailing / memimpin, tetapi dalam hal ini hanya spasi putih , sehingga NULL-byte dipertahankan.Penjelasan:
sumber
String.strip()
untuk menghapus hanya spasi putih: 32 bytePerl 5
-MList::Util=sum -pF/R/
, 40 byteCobalah online!
sumber
C # (Visual C # Interactive Compiler) , 27 byte
Menyimpan satu byte berkat @someone
Cobalah online!
sumber
Stax ,
76 byte-1 byte berkat rekursif
Jalankan dan debug itu
sumber
v
, yang akan menghemat satu byte.Befunge-98 (PyFunge) , 73 byte
Cobalah online!
sumber
C ,
1831561511379691 byteBerkat ceilingcat untuk 91 byte.
R adalah benteng, yang lainnya adalah ruang.
TIO
sumber
82
sebagai gantinya'R'
, atau lebih pendek untuk gunakane+e*d
daripadae*(1+d)
,e=0,d=1;else e++; can be changed to
e = -1, d = 1; e ++;, and
b [a] `danb[++a]
dapat diganti dengan*b
dan*++b
Pyth , 7 byte
Cobalah online!
Mengambil string
R
for rooks,(spasi) untuk ruang kosong
sumber
x86-64 - 26 Bytes
Input adalah array hingga 32 bit dan integer yang mewakili jumlah kotak, 1 mewakili benteng, 0 mewakili kosong.
Menyalin bit sehingga ditambahkan ke sebelah kiri dan menghilangkan bit nol yang tertinggal. Kemudian dapatkan jumlah nol bit terkemuka dan kurangi dari jumlah total nol bit.
x86-64 Machine Code - 22 Bytes - hanya peringkat catur panjang reguler.
Input adalah integer 32-bit dengan byte paling signifikan yang dibuat dari 8 bit mewakili rooks. 1 adalah benteng, 0 kosong.
Menyalin bit ke byte signifikan berikutnya dan menghilangkan bit nol yang tertinggal. Kemudian dapatkan jumlah nol bit terkemuka dan kurangi dari jumlah total nol bit.
sumber