Hapus tanda hubung


15

Waktunya untuk yang baru tantangan ! Ini adalah masalah umum ketika menyalin-menempel antara berbagai format dokumen: tanda hubung. Meskipun mengurangi keretakan tata letak kiri rata atau bahkan spasi dalam tata letak yang dibenarkan, ini benar-benar menyakitkan ketika PDF Anda tidak dibangun dengan benar dan mempertahankan tanda hubung dalam tata letak, membuat teks yang Anda salin sulit diedit atau diubah.

Untungnya, jika kita percaya pada buku-buku swadaya yang tak terhitung jumlahnya di luar sana, tidak ada masalah jika Anda melihatnya sebagai sebuah tantangan. Saya percaya buku-buku self-help ini tanpa kecuali merujuk pada PPCG, di mana masalah apa pun akan diselesaikan jika disajikan sebagai tantangan. Tugas Anda adalah untuk menghapus hyphenation dan linebreak yang menyinggung dari suatu teks, sehingga siap untuk ditempelkan pada editor teks apa pun.

Deskripsi masalah

Anda akan menulis program atau fungsi yang menghilangkan tanda hubung dan jeda baris jika berlaku. The masukan akan menjadi string pada stdin(atau alternatif terdekat) atau sebagai masukan fungsi. The Output (atas stdoutatau paling dekat alternatif atau fungsi output) akan menjadi teks 'dikoreksi'. Teks ini harus secara langsung dapat disalin-salin. Ini berarti bahwa memimpin atau mengeklik keluaran tidak apa-apa, tetapi keluaran tambahan setengah dari teks Anda yang sudah dikoreksi (mis. Spasi terkemuka di setiap baris) tidak .

Kasus paling mendasar adalah sebagai berikut (catatan: tidak ada spasi tambahan)

Lorem ipsum dolor sit amet, con-
sectetur adipiscing elit. Morbi
lacinia nisi sed mauris rhoncus.

Tanda hubung dan linebreak yang menyinggung harus dihapus, untuk mendapatkan

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia nisi sed mauris rhoncus.

Namun, beberapa pengecualian harus diperhatikan.

  • Double newlines menunjukkan jeda paragraf, dan harus dipertahankan.
  • Kata benda dan nama yang benar tidak pernah dibagi dalam dua baris, kecuali mereka sudah berisi tanda hubung (misalnya persamaan Navier-Stokes). Line-break harus dihilangkan, tetapi tanda hubung tetap dipertahankan. Kasus-kasus ini dapat diidentifikasi dengan hanya menggunakan huruf kapital pertama.
  • Kadang-kadang, tanda hubung menunjukkan kelompok kata (mis. Abad kesembilan belas dan kedua puluh). Ketika ini terjadi di dua baris, ini ditunjukkan dengan spasi di baris berikutnya.

Contoh: (pandangan yang diungkapkan dalam contoh ini adalah fiksi dan tidak selalu mewakili pandangan penulis; penentang metode Runge-Kutta-Fehlberg sama-sama dipersilakan untuk berpartisipasi dalam tantangan ini)

Differential equations can
be solved with the Runge-Kutta-
Fehlberg method.

Developed in the nineteenth-
 or twentieth century, this
method is completely FANTAS-
TIC.

akan menjadi

Differential equations can be solved with the Runge-Kutta-Fehlberg method. 

Developed in the nineteenth- or twentieth century, this method is completely FANTASTIC. 

Linebreak dapat berupa titik kode ASCII \natau \r\ntergantung pada preferensi Anda, dan tanda hubung adalah ASCII sederhana -(tanda minus). Dukungan UTF-8 tidak diperlukan. Tantangan ini adalah , sehingga kode terpendek menang.

Jawaban:


9

Retina , 58 byte

(?<!\n)\n(?!\n)
<space>
- (?! |[A-Z][a-z])| (?= )|(?<=-) (?=[A-Z])
<empty>

<space>mewakili ruang tunggal pada barisnya sendiri dan <empty>mewakili garis trailing kosong Untuk tujuan penghitungan, setiap baris masuk ke file terpisah dan \ndiganti dengan karakter linefeed yang sebenarnya. Untuk kenyamanan Anda dapat menempatkan semua hal di atas dalam satu file dan jalankan dengan -sflag.

Saya cukup yakin ada cara yang lebih pendek untuk melakukan ini, jadi saya akan menunggu dengan penjelasan sampai saya selesai bermain golf.


Saya sebenarnya ingin menangani yang ini di Retina, tetapi tidak ingin mengacaukan Mono :(
orlp

2

GNU Sed, 68

Skor termasuk +2 untuk -zropsi yang diteruskan kesed .

s/\n\n/:/g
s/-\n([A-Z][a-z])/-\1/g
s/-\n /- /g
s/-\n//g
y/\n:/ \n/

Diasumsikan bahwa aliran input tidak mengandung :karakter apa pun . Jika ini tidak dapat diterima, maka semua yang ada :dalam kode dapat diganti dengan karakter ASCII lain yang tidak dapat dicetak, mis. BEL 0x7.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.