Ratakan teks dengan menambahkan spasi

10

Diberikan teks ini

Anda juga dapat memilih dari semua yang Anda butuhkan, dan juga semua yang Anda sukai, juga melakukan hal-hal lain di luar dan di luar untuk melakukan yang lebih baik. Jika Anda menggunakan minimal video, ini adalah cara terbaik untuk bekerja dengan lebih baik dan lebih baik. Setelah itu, pilih warna di layar sentuh atau klik untuk melihat lebih banyak di bawah ini. Pengecualian untuk tempat kejadian bukan tempat tinggal Anda, kecuali di kota ini, Anda pasti akan melihat lebih banyak lagi.

menulis program terpendek yang menghasilkan teks yang sama dibenarkan pada 80 karakter. Teks di atas harus persis sama dengan:

Lorem ipsum dolor sit amet,  consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut  labore et  dolore magna aliqua.  Ut  enim ad  minim veniam,  quis
nostrud exercitation ullamco laboris nisi ut  aliquip ex  ea  commodo consequat.
Duis aute irure dolor in  reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident,  sunt in
culpa qui officia deserunt mollit anim id est laborum.

Aturan:

  • kata-kata tidak boleh dipotong
  • ruang ekstra harus ditambahkan
    • setelah satu titik.
    • setelah koma
    • setelah kata terpendek (dari kiri ke kanan)
    • hasilnya tidak boleh lebih dari 2 spasi berturut-turut
  • baris terakhir tidak dibenarkan.
  • garis tidak boleh dimulai dengan koma atau titik.
  • berikan output dari program Anda

pemenang: Program terpendek.

Catatan: String input diberikan pada STDIN sebagai satu baris (tidak ada umpan baris atau carriage return)

memperbarui:

String input dapat berupa teks apa saja dengan panjang kata yang masuk akal (mis. Tidak lebih dari 20 ~ 25 karakter) seperti:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed bukan risus. Anda dapat menggunakan tortor, dignissim duduk, dan memilih nec, dan akhirnya, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Portir Proporsi, atau non-molestie nonummy, en el estife mi, non fermentum dan duduk diam. Duis semper. Duis arcu massa, scelerisque vitae, akibatnya dalam, pretium a, enim. Congent Pellentesque. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Bersenang-senang dengan egestas di pede. Bersyukur blandit odio eu enim. Ini adalah tempat yang bagus untuk bermain blandit sodales. Vestibulum ante ipsum primis dalam faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris dan pede pellentesque fermentum. Maecenas mengadopsi ante non diam sodales hendrerit. Utas mauris, egestas sed, gravida nec, ornare ut, mi. Aenean or orci atau massa suscipit pulvinar. Nulla sollicitudin. Varius yang berbeda, ligula non tempus aliquam, nunc turpis ullamcorper nibh, pada tempus sapien eros vitae ligula. Rhonus nunc et augue yang bagus. Felis id integer. Curabitur juga tersedia. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elite. Morbi atau erat-erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, tambahan non elementum posuere, metus purus iaculis lectus, dan tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Aliquam terpuji, di fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Semu semusif dengan sapien. Vivamus leo. Aliquam euismod libero eu enim. Tidak ada masalah dengan leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curacitur iaculis, lorem atau rhoncus faucibus, ditambahkan oleh felis magna fermentum, dan akhirnya lacus lorem varius purus. Curabitur eu amet.

Toto
sumber
3
Mengapa meminta orang untuk memberikan output dari program mereka? Apakah Anda khawatir tentang orang yang gagal memeriksa hasil sebelum mengirim?
Peter Taylor
1
Saya tergoda untuk menyediakan program php yang terdiri dari teks output. ;-) Meskipun serius, spasi pada baris kedua dari teks keluaran tampaknya telah ditambahkan ke spasi secara acak? Apakah ada beberapa pola yang tidak saya lihat, dan jika tidak, bagaimana kita bisa diharapkan untuk menghasilkan output yang tepat untuk input yang diberikan?
Gareth
@ Gareth: Maaf, salahku. Saya melakukan kesalahan, setelah koma, bukan setelah insididunt. Pertanyaan diedit.
Toto
@ Peter Taylor: Hanya karena saya tidak dapat menguji semua bahasa.
Toto
1
@Ilmari Karonen: Ya, string input bisa apa saja.
Toto

Jawaban:

5

Perl, 94 karakter

for(/(.{0,80}\s)/g){$i=1;$i+=!s/^(.*?\.|.*?,|(.*? )??\S{$i}) \b/$1  /until/
|.{81}/;chop;say}

Jalankan dengan perl -nM5.01. ( nTermasuk dalam jumlah karakter.)

Kode di atas adalah terpendek saya bisa membuat yang dapat menangani setiap curveball saya melemparkan di itu (seperti kata salah satu huruf pada awal garis, jalur input tepatnya 80 karakter panjang, dll) tepat sesuai dengan spec:

Lorem ipsum dolor sit amet,  consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut  labore et  dolore magna aliqua.  Ut  enim ad  minim veniam,  quis
nostrud exercitation ullamco laboris nisi ut  aliquip ex  ea  commodo consequat.
Duis aute irure dolor in  reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident,  sunt in
culpa qui officia deserunt mollit anim id est laborum.

I'm  tempted to  provide a  php  program which consists of  the output text. ;-)
Seriously though,  the spaces on the second line of the output text seem to have
been added to  the spaces at  random? Is  there some pattern to  it that I'm not
seeing,  and if  not,  how can we be expected to produce exactly that output for
the given input?

(Dengan permintaan maaf kepada Gareth karena menggunakan komentarnya sebagai input tes tambahan.)

Versi 75-char berikut berfungsi cukup baik untuk menghasilkan output sampel dari input sampel, tetapi dapat gagal untuk input lainnya. Selain itu, ia meninggalkan karakter spasi tambahan di akhir setiap baris output.

for(/(.{0,80}\s)/g){s/(.*?\.|.*?,|.*? ..) \b/$1  /until/.{81}/||s/
//;say}

Kedua versi akan berulang selamanya jika mereka menemukan input yang tidak dapat dibenarkan dengan benar. (Dalam versi yang lebih panjang, mengganti untildengan until$i>80||akan memperbaikinya dengan biaya tujuh karakter tambahan.)

Ilmari Karonen
sumber
Ah, saya seharusnya mulai dengan solusi perl ;-) Bahasa ini tentu saja sangat bagus untuk tugas seperti itu.
Howard
Saya mendapatkan Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.*?\.|.*?,|(.*? )??\S{ <-- HERE 32767}) \b/teks kedua.
Toto
@ M42: Itu karena contoh teks kedua tidak dapat dibenarkan sesuai dengan aturan. Jika saya menambahkan $i>80cek, ini memperluas baris ke-11 pede  pellentesque  fermentum.  Maecenas  adipiscing  ante  non  diam  sodales, yang hanya 78 karakter, dan kemudian menyerah karena setiap kata (kecuali yang terakhir) diikuti oleh dua spasi.
Ilmari Karonen
2

Ruby, 146 karakter

$><<gets.gsub(/(.{,80})( |$)/){$2>""?(s=$1+$/;(['\.',?,]+(1..80).map{|l|"\\b\\w{#{l}}"}).any?{|x|s.sub! /#{x} (?=\w)/,'\& '}while s.size<81;s):$1}

Ini mencetak dengan tepat output yang diinginkan (lihat di bawah) jika teks yang diberikan dimasukkan ke dalam STDIN.

Lorem ipsum dolor sit amet,  consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut  labore et  dolore magna aliqua.  Ut  enim ad  minim veniam,  quis
nostrud exercitation ullamco laboris nisi ut  aliquip ex  ea  commodo consequat.
Duis aute irure dolor in  reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident,  sunt in
culpa qui officia deserunt mollit anim id est laborum.

Sunting: Hanya setelah mengirimkan solusi pertama saya, saya melihat di komentar bahwa setiap string input dapat diproses. Jawaban sebelumnya hanya 95 karakter tetapi tidak memenuhi persyaratan ini:

r=gets.split;l=0;'49231227217b6'.chars{|s|r[l+=s.hex]+=' '};(r*' ').gsub(/(.{,80}) ?/){puts $1}
Howard
sumber
Jika saya tidak salah, Anda menggunakan cheat yang sama seperti yang saya pikirkan (menyandikan lokasi kata-kata dengan spasi ganda pada contoh output). Perhatikan bahwa M42 telah mengklarifikasi bahwa program harus mengatasi input lain juga.
Ilmari Karonen
@Ilmari Karonen Ya, saya melihat itu setelah mengirimkan. Lihat edit dan komentar saya di atas. Kembali ke lapangan golf ...
Howard