(Catatan: Ini adalah pertanyaan golf kode pertama saya, tetapi sejauh yang saya tahu, tidak ada orang lain yang melakukan hal ini, jadi saya harus baik.)
Tugas Anda adalah membuat program atau fungsi yang mengambil string s
dan integer n
, dan mengembalikan atau menampilkan teks yang terbungkus menjadi beberapa baris. Setiap kata harus seluruhnya dalam satu baris; yaitu tidak ada kata yang terbelah di tengah. Setiap baris tidak boleh lebih dari n
karakter, dan Anda harus memasukkan sebanyak mungkin kata pada setiap baris.
Contoh:
s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat."
n = 50
output:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Sed eget erat lectus. Morbi mi mi, fringilla
sed suscipit ullamcorper, tristique at mauris.
Morbi non commodo nibh. Pellentesque habitant
morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Sed at iaculis mauris.
Praesent a sem augue. Nulla lectus sapien, auctor
nec pharetra eu, tincidunt ac diam. Sed ligula
arcu, aliquam quis velit aliquam, dictum varius
erat.
Output Anda bisa berupa array string atau string tunggal dengan jeda baris. Selain itu, Anda dapat menganggap tidak ada kata yang lebih panjang dari itu n
, jadi jangan khawatir berurusan dengan kasus aneh.
Aturan I / O standar berlaku, dan celah standar dilarang. Ruang tambahan diizinkan.
Karena ini adalah kode-golf , solusi terpendek dalam byte menang.
Berikut adalah contoh program dengan Python yang bisa digunakan.
sumber
n
adalah panjang garis maks, maaf itu tidak jelas. Saya akan mengklarifikasi. Selain itu, aturan sekarang telah diperbarui sehingga pemisahan sederhana tidak berfungsi.Jawaban:
Python 2 , 26 byte
Cobalah online!
Meh ... built-in membosankan ... sebaliknya, miliki solusi 87-byte yang bagus di sini:
Cobalah online!
Keluaran spasi tambahan.
sumber
PHP , 8 byte
Memang bukan solusi yang paling orisinal, tetapi PHP memiliki fungsi asli yang sangat cocok dengan kebutuhan Anda!
wordwrap
:Gunakan seperti ini:
Atau Coba online!
sumber
JavaScript (ES6),
75 7372 byteMengambil input sebagai
(string)(n)
.Cobalah online!
Variabel
Output yang diformat disimpan dalamHai (berwarna hijau di bawah).
Bariskamu diperbarui didefinisikan sebagai gabungan dari:
Kita perlu menyisipkan satu baris setiap kali karakter ke-n kamu diatur (0-diindeks, merah di bawah).
Contoh
Menambahkan "LOREM":00L.01HAI02R03E04M.050607080910111213141516
Menambahkan "IPSUM":00L.01HAI02R03E04M.05∙06saya07P08S09U10M.111213141516
Menambahkan "DOLOR":00L.01HAI02R03E04M.05∙06saya07P08S09U10M.11∙12D13HAI14L.15HAI16R
sumber
r+w+' '
?Perl 6 ,
4629 byteCobalah online!
Solusi berbasis Regex yang mengambil input curried, seperti
f(n)(s)
dan mengembalikan daftar garis. Setiap baris kecuali yang terakhir memiliki spasi spasiPenjelasan:
sumber
Vim, 15 byte / penekanan tombol
Pertanyaan pemformatan teks? Saya tahu hanya alat untuk pekerjaan itu! Dan itu bahkan memiliki nama saya dalam dua penekanan tombol pertama: D
<C-r>
berarti ctrl-r.Ini bisa pernah jadi sedikit lebih pendek di V , tapi aku lebih suka menjawab di vanili vim untuk jawaban yang benar-benar memamerkan seberapa ringkas vim bisa untuk tantangan yang tepat. Dan perbedaannya sangat kecil.
Ini juga bisa menjadi yang berikut untuk 15 byte juga:
Cobalah online!
sumber
DJ:
Program ini dibuat oleh DJ, kucing favorit kami dengan berlian di lehernya. [...]R ,
3627 bytesR memiliki ini sebagai built-in (
strwrap
), kami mengembalikan vektor garis perpecahan.Cobalah online!
sumber
Haskell , 70 byte
sumber
Python 2 , 74 byte
Cobalah online!
sumber
Java (JDK) ,
4644 bytePada dasarnya solusi regex murni di Jawa, hampir pasti yang terpendek yang saya tulis.
Cheers to Kevin untuk membantu mengurangi byte di regex lebih jauh!
Cobalah online!
Menggunakan lamdba kari, itu menciptakan regex untuk serasi mencocokkan dengan
n
karakter diikuti oleh spasi atau akhir string. Kemudian menggantikan karakter-karakter itu dengan diri mereka sendiri diikuti oleh baris baru.sumber
[ $]
sebenarnya hanya cocok dengan spasi atau$
jika saya ingat dengan benar, bukan akhir string. Ini tampaknya berfungsi meskipun, jadi sepertinya itu hanya bisa di-golf ke satu ruang bahkan dengan byte lebih sedikit.$0
sebagai gantinya$1
.replaceAll
sangat bertele-tele!Mathematica, 16 byte
Fungsi bawaan. Mengambil string dan integer sebagai input dan mengembalikan string sebagai output.
sumber
Powershell,
4083 byteTest case dengan
n=80
menambahkan.Skrip uji:
Keluaran:
sumber
if
/else
dengan terner palsureturn
dielse
bagian dan pernyataan dithen
bagian.C (gcc) , 68 byte
Cobalah online!
Berkat ceilingcat , simpan 2 byte dengan memindahkan global
char*l
ke parameter.sumber
Japt , 20 byte
Cobalah online!
Terima kasih kepada Bubbler dan Shaggy untuk bantuan mereka
Penjelasan:
sumber
[X,Y].join(...)
.Retina 0.8.2 , 37 byte
Cobalah online! Membawa
s
dann
pada jalur yang terpisah. Penjelasan:Konversikan
n
ke unary.Cocokkan yang bukan spasi putih, lalu lihat ke depan
n
dan hitung sebagai$#1
. Kemudian kembali dan gunakan grup penyeimbang untuk mencocokkan dengann
karakter yang diikuti oleh spasi.Keluarkan kecocokan sebagai daftar garis.
sumber
.{1,50}
dan$0¶
, tetapi di mana50
diterima sebagai input?Arang , 19 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input dari
n
dans
pada jalur yang terpisah. Penjelasan:Masukan
n
.Gerakkan kursor ke kiri satu kotak untuk menyeimbangkan gerakan kanan dari iterasi pertama loop.
Pisahkan string pada spasi dan loop di atas kata-kata.
Hitung apakah kata berikutnya akan mencapai tepi kanan.
Jika tidak maka pindahkan satu kotak ke kanan.
Jika kemudian akan memulai baris baru.
Keluarkan kata.
sumber
Merah ,
125, 117, 114112 byteCobalah online!
sumber
05AB1E , 18 byte
Cobalah online.
Penjelasan:
sumber
Java 8, 135 byte
Cobalah online.
Penjelasan:
sumber
JavaScript, 40 byte
Cobalah online!
sumber
APL (Dyalog Unicode) , 14 byte SBCS
Fungsi infiks; argumen kiri adalah
n
, argumen benar adalahn
.Cobalah online!
⎕CY
c op y di perpustakaan dfns⋄
kemudianwrap
[c] menggunakan bungkus [n] fungsi[c] kode fungsi itu
[n] mencatat untuk fungsi itu
Versi golf
wrap
, 59 byte SBCSCobalah online!
{
...}
dfn;⍺
argumen kiri (lebar),⍵
argumen kanan (string)≢⍵
penghitungan (jumlah karakter) string⍺≥
...:
jika lebarnya lebih besar dari atau sama dengan itu, maka:⍵
kembalikan string⋄
jika tidak:' '=⍵
Topeng Boolean di mana kosong sama dengan stringb←
simpan dib
(untuk b lanks)(
...)↑
ambil sejumlah elemen berikut dari itu:⍺+1
satu lebih dari lebarnya⍸
Saya menemukan di mana benarg←
simpan dig
(untuk g aps)⍺≥
Topeng Boolean di mana lebarnya lebih besar dari atau sama dengan itug/⍨
saring indeks kesenjangan dengan itu⍺,
menambahkan itu ke lebar⊃⌽
pilih elemen terakhir dari itu (lit. pilih yang pertama dari yang terbalik)t←
simpan dit
(untuk t ake)b⊃⍨
gunakan itu untuk memilih elemen dari topeng b lankst+
tambahkan itu ket
⍵↓⍨
jatuhkan banyak karakter dari string⍺∇
ulangi dengan argumen kiri kiri yang sama⎕TC,
append bahwa untuk daftar t erminal c ontrol karakter (8: HT, 10: NL, 13: CR)2↓
lepaskan dua karakter pertama dari itu (hanya menyisakan 13: CR)(
...),
tambahkan itu sebagai berikut:t↑⍵
t
karakter pertama dari stringsumber
Terima kasih kepada @Erik the Outgolfer, versi golf:
Python 3 , 94 byte
Cobalah online!
# Python 3 , 130 byteCobalah online!
Versi tidak begitu golf ...sumber
JavaScript + HTML + CSS,
11764 byte-53 byte milik @Neil
sumber
(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
74 byte. Jika Anda ingin menggali Firefox versi lama, Anda dapat menyimpan 8 byte lagi(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.ch
unit yang bagus. Firefox 65 menghitung50ch
sebagai500px
; Chromium 7050ch
400px
elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(Baris kedua) lebih dari 50 karakter. Saya menggunakan Chrome terbaru.<p>
dalam<tt>
.Jelly , 12 byte
Cobalah online!
Sayangnya, ini terlalu lambat untuk mengerjakan test case yang disediakan dalam waktu kurang dari satu menit dari TIO.
sumber
C # (.NET Core) , 162 byte
Fungsi ini menggunakan regex yang cocok dengan spasi putih terdekat yang berada di dekat karakter ke-n atau kelipatan dan memisahkan string berdasarkannya.
Cobalah online!
TIO link adalah program lengkap, dan fungsinya memiliki kata kunci statis sehingga fungsinya dapat dipanggil dari main.
Tes Regex
sumber
C # (Visual C # Interactive Compiler) , 78 byte
Cobalah online!
Kredit jatuh ke @LukeStevens untuk membuat versi Java ... Rupanya .NET membuat Anda mengimpor
RegularExpressions
namespace untuk melakukan penggantian :(Ini adalah versi asli saya yang terbagi pada karakter spasi dan menggunakan LINQ untuk bergabung kembali bersama:
C # (Visual C # Interactive Compiler) , 91 byte
Cobalah online!
sumber
Dart , 112 byte
Cobalah online!
sumber
APL (NARS), 48 karakter, 96 byte
uji:
sumber
C, 63 byte
Fungsi latihan ini b (a, n) akan memecah garis "a" seperti yang dikatakan latihan, dengan cara tidak mengubah panjangnya (jika kita melihat hasilnya sebagai satu string) karena mengubah beberapa spasi di \ n atau baris baru di tempat. String input "a" seharusnya tidak memiliki karakter \ n juga di dalamnya untuk fungsi b () (bisa memiliki \ n pada string input untuk bs ())
b (a, n) fungsi akan ok hanya karena pembatasan latihan ini, yang memaksakan setiap kata dari string "a" memiliki panjang <n jika ini tidak benar, fungsi itu dapat pergi
ke satu loop tak terbatas ... (sangat salah dalam cara saya melihat jadi saya salin juga fungsinya lebih baik karena dalam kasus itu akan mengembalikan -1 dan tidak akan pergi ke satu loop tak terbatas; itu adalah bs (a, n) di bawah) Saya tidak mengecualikan kedua fungsi disadap .. .
hasil b () diteruskan pada satu fungsi yang menambahkan panjang baris setiap baris
sumber