Pembukaan
Dalam penurunan harga Stack Exchange, kami menggunakan ** untuk menebalkan teks. Misalnya, penurunan harga ini:
The **quick brown fox jumps over the lazy** dog.
Render sebagai:
The cepat rubah cokelat melompat di atas malas anjing.
Tentu saja, kami menggunakan ** untuk menutup keberanian juga. Jadi lebih sedikit jawabannya akan berani. Sebagai contoh:
The **quick** brown fox jumps over the **lazy** dog.
Render sebagai:
The cepat rubah cokelat melompat di atas malas anjing.
Namun, jika boldness tidak ditutup, itu menjadikannya tidak berani :
The **quick brown fox jumps over the lazy dog.
Render sebagai:
** Rubah cokelat cepat melompati anjing malas.
Jika teks memiliki garis miring terbalik tunggal \
, keberanian tidak berlaku, baik:
The \**quick brown fox jumps over the lazy dog.**
Render sebagai:
** Rubah cokelat cepat melompati anjing malas. **
Trailing white space menghasilkan teks yang tidak dicetak tebal (perhatikan, spasi putih setelah cokelat adalah satu tab):
The** quick** brown fox jumps over the lazy dog.**
Render sebagai:
** Cepat ** rubah cokelat melompati anjing malas. **
Kita juga dapat menggunakan __ untuk huruf tebal, tetapi perhatikan bahwa hanya satu yang dapat aktif sekaligus. Berikut ini contoh yang lebih rumit:
The __quick**__ brown **fox__ jumps** over__ the__ lazy **dog.
Render sebagai:
The cepat ** coklat fox__ melompat over__ the__ anjing ** malas.
Pertanyaan:
Anda dapat menulis sebuah program atau fungsi, mengingat teks ASCII baik sebagai String
argumen atau STDIN, di mana satu-satunya karakter khusus **
, __
, \
(untuk melarikan diri) dan trailing spasi, menentukan berapa banyak karakter yang berani ada. Nilai ini harus dicetak ke STDOUT atau dikembalikan dari fungsi Anda. Anda tidak perlu mendukung string yang sangat panjang; Panjang string dijamin tidak lebih dari 30K
, yang merupakan batas untuk posting Stack Exchange.
Cetak halus:
- Bisakah saya melempar pengecualian / kesalahan lain untuk satu kasus, dan kembali secara normal untuk yang lain?
- Tidak. Ini harus berupa nilai pengembalian yang jelas, tidak ambigu, tidak salah untuk kedua kasus. Output STDERR akan diabaikan.
- Apakah spasi di antara kata-kata dianggap berani?
- Iya.
**quick brown**
memiliki 11 karakter tebal di dalamnya.
- Iya.
- Haruskah
\
dalam\**
, jika tebal, dihitung?- Tidak. Ini merender sebagai **, jadi jika harus dicetak tebal hanya 2 karakter.
- Menjadi sangat jelas: apa yang Anda maksud dengan jumlah karakter
- Total karakter yang akan dicetak tebal. Ini berarti bahwa
**
ini tidak diberikan jika mengubah teks, tetapi diberikan jika tidak. - Perhatikan bahwa dimungkinkan untuk dibuat
**
tebal dengan beberapa cara, misalnya**\****
-> ** . - Jangan mempertimbangkan kemungkinan bahwa beberapa teks dapat dikonversi menjadi miring. Satu- satunya aturan penurunan harga yang harus dipertimbangkan adalah ** = tebal *.
- Total karakter yang akan dicetak tebal. Ini berarti bahwa
- Di Stack Exchange, HTML Bold juga berfungsi. yaitu <b> </b>
- Ya saya sadar. Jangan pertimbangkan hal ini, ini adalah teks normal.
- Bagaimana dengan HTML? misalnya
<
-><
- Ini juga harus dianggap sebagai teks normal, tidak ada konversi entitas HTML.
- Saya telah memikirkan contoh yang tidak Anda bahas di atas!
- Aturan berfungsi persis seperti jika teks diposting di Stack Exchange, dalam jawaban (bukan komentar), kecuali bahwa blok kode tidak dianggap sebagai karakter khusus . Baik tipe ruang empat dan tipe backtick. Jika Anda tidak yakin tentang bagaimana teks harus diterjemahkan, cukup masukkan ke kotak jawaban di suatu tempat sebagai ujian, itulah aturan yang harus Anda ikuti.
Contoh:
Memasukkan:
The **quick brown fox jumps over the lazy** dog.
Keluaran:
35
Memasukkan:
The **quick brown fox jumps over the lazy dog.
Keluaran:
0
Memasukkan:
The __quick**__ brown **fox__ jumps** over__ the__ lazy **dog.
Keluaran:
18
Memasukkan:
The __quick\____ brown fox **jumps over\** the** lazy \**dog.
Keluaran:
23
Memasukkan:
The****quick brown fox****jumps over **the****lazy** dog.
Keluaran:
11
Celah Standar dilarang.
18
benar untuk kasus uji ketiga?**fox__ jumps**
mengakhiri bold tertentu.\**
atau\__
beberapa urutan karakter, tetapi di StackExchange hanya ada dua urutan karakter\*
atau\_
. Sehingga\***a**
menghasilkan tanda bintang diikuti oleh huruf tebala
. Ada juga pelarian lain\\
,. Haruskah kita menangani yang itu?Jawaban:
rs , 107 byte
Demo langsung dan uji kasus.
Ini hal yang cukup gila ...
Kasing uji terbaru belum berfungsi. WIP ...
Penjelasan
Ganti tab dengan spasi. Mereka memiliki jumlah karakter yang sama, dan tab digunakan nanti sebagai karakter khusus.
Ganti teks dengan panjang apa pun
N
yang harus dicetak tebal denganN
baris baru diikuti oleh teks asli.Ganti setiap pembatas yang segera didahului dengan garis miring dengan tab. Ini untuk memastikan bahwa entri suka
**a\***
memiliki jumlah karakter 2 bukannya 3.Hapus karakter apa pun yang bukan tab atau baris baru.
Ganti semua baris baru dengan garis bawah.
Hapus semua tab (yang mewakili pembatas yang lolos), bersama dengan setiap garis bawah yang mungkin mengikuti mereka. Ini terkait dengan masalah jumlah karakter di atas dengan pembatas akhir yang lolos.
Ganti urutan garis bawah dengan panjangnya. Ini adalah jumlah karakter.
sumber
**a****b**
output 2, seharusnya 6. Lihat: a **** bPython: 133 karakter
Ini harus bekerja secara identik di kedua Python 2 dan 3. Fungsi
f
mengembalikan jumlah karakter tebal yang akan berada di string yang dilewatkan ketika diformat oleh sistem penurunan harga Stack Overflow.Saya pikir saya mendapatkan sebagian besar kasus sudut kanan (termasuk semua yang disebutkan dalam komentar sejauh ini), tetapi masih belum sepenuhnya sempurna. Saya tidak mengerti mengapa
x***x**
tidak membuat*x
huruf tebal (seperti***x**
halnya), jadi kode saya akan mendapatkan setidaknya beberapa input yang salah.Kode ini memiliki empat langkah utama. Yang pertama melakukan penggantian regs backslash diikuti oleh karakter apa pun dengan karakter 'x'. Langkah kedua menggantikan setiap urutan empat asterix atau garis bawah dengan empat karakter 'x'. Langkah ketiga menggunakan regex
findall
untuk menemukan semua blok yang akan dicetak miring. Langkah terakhir adalah ekspresi generator di dalamsum
panggilan, yang menambah panjang blok-blok itu, mengurangi 4 karakter dari masing-masing, karena kami tidak ingin menyertakan pembatas dalam hitungan kami.Inilah beberapa hasil tes:
sumber
x***x**
tidak bekerja di kotak input. AnehJavaScript ES6, 91 byte
Berurusan dengan semua lolos sebelumnya, lalu gunakan ekspresi reguler. Banyak potensi bermain golf.
Penjelasan
sumber
**a*b*c**
ini mengembalikan 9, yang saya percaya tidak benar. Hitungan sebenarnya adalah 5 (atau 3, jika Anda mempertimbangkan huruf miring, yang menurut OP Anda tidak boleh).