Buat pembungkus kata sederhana

22

(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 sdan 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 nkarakter, 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 , solusi terpendek dalam byte menang.

Berikut adalah contoh program dengan Python yang bisa digunakan.

ATMunn
sumber
3
n adalah panjang garis maks? atau berapa lama kita harus mencapai sebelum jeda baris?
david
1
@david, atau jumlah baris?
Peter Taylor
1
28 byte Python apakah itu relevan?
david
3
nadalah panjang garis maks, maaf itu tidak jelas. Saya akan mengklarifikasi. Selain itu, aturan sekarang telah diperbarui sehingga pemisahan sederhana tidak berfungsi.
ATMunn

Jawaban:

7

Python 2 , 26 byte

from textwrap import*
fill

Cobalah online!

Meh ... built-in membosankan ... sebaliknya, miliki solusi 87-byte yang bagus di sini:

s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x

Cobalah online!

Keluaran spasi tambahan.

Erik the Outgolfer
sumber
5

PHP , 8 byte

Memang bukan solusi yang paling orisinal, tetapi PHP memiliki fungsi asli yang sangat cocok dengan kebutuhan Anda!

wordwrap:

string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = FALSE ]]] )

Membungkus string ke sejumlah karakter tertentu menggunakan karakter pemecah string.

Gunakan seperti ini:

$str = "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.";
echo wordwrap($str, 50);

Atau Coba online!

David
sumber
5

JavaScript (ES6),  75 73  72 byte

Mengambil input sebagai (string)(n).

s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r

Cobalah online!

Variabel

Output yang diformat disimpan dalam Hai (berwarna hijau di bawah).

Baris kamu diperbarui didefinisikan sebagai gabungan dari:

  • garis saat ini r (berwarna hitam di bawah)
  • spasi jika r tidak kosong, atau tidak ada yang lain (oranye di bawah)
  • kata baru w (warna biru di bawah)

Kita perlu menyisipkan satu baris setiap kali karakter ke- nkamu diatur (0-diindeks, merah di bawah).

Contoh

n=16 dans = "LOREM IPSUM DOLOR"

Menambahkan "LOREM":

0001020304050607080910111213141516L.HAIREM.

Menambahkan "IPSUM":

0001020304050607080910111213141516L.HAIREM.sayaPSUM.

Menambahkan "DOLOR":

0001020304050607080910111213141516L.HAIREM.sayaPSUM.DHAIL.HAIR

0001020304050607080910111213141516L.HAIREM.sayaPSUM.DHAIL.HAIR

Arnauld
sumber
Ruang tambahan diizinkan. mungkin r+w+' '?
l4m2
5

Perl 6 , 46 29 byte

{;*.comb(/.**{1..$_}[\s|$]/)}

Cobalah online!

Solusi berbasis Regex yang mengambil input curried, seperti f(n)(s)dan mengembalikan daftar garis. Setiap baris kecuali yang terakhir memiliki spasi spasi

Penjelasan:

{;*                         }   # Anonymous code block that returns a Whatever lambda
   .comb(/                /)    # Split the string by
          .**{1..$_}            # Up to n characters
                    [\s|$]      # Terminated by a whitespace char or the end of the string
Jo King
sumber
4

Vim, 15 byte / penekanan tombol

DJ:se tw=<C-r>"
gq_

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:

:se tw=<C-r><C-w>
ddgq_

Cobalah online!

DJMcMayhem
sumber
1
Penjelasan:: DJ:Program ini dibuat oleh DJ, kucing favorit kami dengan berlian di lehernya. [...]
Erik the Outgolfer
4

R , 36 27 bytes

R memiliki ini sebagai built-in ( strwrap), kami mengembalikan vektor garis perpecahan.

function(s,n)strwrap(s,n+1)

Cobalah online!

J.Apakah
sumber
1
Ya, itu harus diizinkan. Susunan garis diperbolehkan, jadi saya tidak melihat mengapa ini akan berbeda.
ATMunn
4

Haskell , 70 byte

s!n|length s<=n=[s]|(t,_:d)<-splitAt(until((<'!').(s!!))pred n)s=t:d!n
Lynn
sumber
3

Python 2 , 74 byte

s,n=input()
while s:i=n;exec"i-=' '<(s+' '*n)[i];"*n;print s[:i];s=s[i+1:]

Cobalah online!

Lynn
sumber
3

Java (JDK) , 46 44 byte

Pada dasarnya solusi regex murni di Jawa, hampir pasti yang terpendek yang saya tulis.

Cheers to Kevin untuk membantu mengurangi byte di regex lebih jauh!

n->s->s.replaceAll(".{1,"+n+"}( |$)","$0\n")

Cobalah online!

Menggunakan lamdba kari, itu menciptakan regex untuk serasi mencocokkan dengan nkarakter diikuti oleh spasi atau akhir string. Kemudian menggantikan karakter-karakter itu dengan diri mereka sendiri diikuti oleh baris baru.

Luke Stevens
sumber
@KevinCruijssen [ $]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.
Luke Stevens
Ah, itu memang bisa berupa spasi, karena Anda menambahkan baris baru dan tidak perlu menambahkan baris tambahan tambahan di akhir.
Kevin Cruijssen
1
Anda bisa bermain golf 2 byte lebih banyak dengan menghapus tanda kurung di regex, dan gunakan $0sebagai gantinya $1.
Kevin Cruijssen
@KevinCruijssen Bagus sekali! Hanya memalukan yang replaceAllsangat bertele-tele!
Luke Stevens
2
Bagi saya itu salah, muncul jika saya memodifikasi frasa bahasa Latin dari latihan dengan cara diakhiri dengan "... dictum varius abc erat." Ada baris baru yang tidak perlu setelah huruf c ...
RosLuP
2

Mathematica, 16 byte

InsertLinebreaks

Fungsi bawaan. Mengambil string dan integer sebagai input dan mengembalikan string sebagai output.

InsertLinebreaks["string", n]
 menyisipkan karakter baris baru untuk membuat tidak lebih dari n karakter.

LegionMammal978
sumber
2

Powershell, 40 83 byte

Test case dengan n=80menambahkan.

param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o

Skrip uji:

$f = {

param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o

}

@(
,(50, "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.",
"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.")
,(80, "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.",
"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,$s,$expected = $_
    $result = &$f $s $n
    "$result"-eq"$expected"
    # $result   # uncomment this line to dispaly a result
}

Keluaran:

True
True
mazzy
sumber
Terima kasih. Terner palsu adalah sebuah ekspresi. Script ini mengandung implisit returndi elsebagian dan pernyataan di thenbagian.
mazzy
2

C (gcc) , 68 byte

i;b(s,n,l)char*s,*l;{for(i=n;*++s;i--||(i=l-s+n,*l=10))l=*s-32?l:s;}

Cobalah online!

Berkat ceilingcat , simpan 2 byte dengan memindahkan global char*lke parameter.

tsh
sumber
2

Japt , 20 byte

¸rÈ+Yi[X·ÌY]¸Ê>V?R:S

Cobalah online!

Terima kasih kepada Bubbler dan Shaggy untuk bantuan mereka

Penjelasan:

¸                       #Split into words
 r                      #For each word, add them to the output in this way:
     i                  # Choose a character using this process:
       X·Ì              #  Get the last line of the output
          Y             #  And the current word
      [    ]¸           #  Join them with a space
             Ê>V?       #  If the resulting line is greater than the allowed length:
                ?R      #   Choose "/n" (newline)
                  :S    #  Otherwise choose " " (space)
     i                  # Add the chosen character to the output
  È+Y                   # Add the current word to the output
Kamil Drakari
sumber
24 byte dengan [X,Y].join(...).
Bubbler
1
20 byte
Shaggy
1

Retina 0.8.2 , 37 byte

.+$
$*
!`(?=\S.*¶(1)+)(?<-1>.)+(?=\s)

Cobalah online! Membawa sdan npada jalur yang terpisah. Penjelasan:

.+$
$*

Konversikan nke unary.

(?=\S.*¶(1)+)(?<-1>.)+(?=\s)

Cocokkan yang bukan spasi putih, lalu lihat ke depan ndan hitung sebagai $#1. Kemudian kembali dan gunakan grup penyeimbang untuk mencocokkan dengan nkarakter yang diikuti oleh spasi.

!`

Keluarkan kecocokan sebagai daftar garis.

Neil
sumber
Apakah ada cara di Retina untuk memasukkan input pertama dalam regex yang kita gunakan dengan input kedua? Jadi sesuatu seperti ini: .{1,50} dan$0¶ , tetapi di mana 50diterima sebagai input?
Kevin Cruijssen
@KevinCruijssen Di Retina 1 Anda mungkin dapat menggunakan tahap Eval untuk memberikan hasil yang serupa, tapi itu membosankan, jadi saya tidak repot-repot.
Neil
1

Arang , 19 byte

Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input dari ndan spada jalur yang terpisah. Penjelasan:

Nθ

Masukan n.

Gerakkan kursor ke kiri satu kotak untuk menyeimbangkan gerakan kanan dari iterasi pertama loop.

F⪪S «

Pisahkan string pada spasi dan loop di atas kata-kata.

¿‹⁺Lιⅈθ

Hitung apakah kata berikutnya akan mencapai tepi kanan.

M→

Jika tidak maka pindahkan satu kotak ke kanan.

⸿

Jika kemudian akan memulai baris baru.

ι

Keluarkan kata.

Neil
sumber
1

Merah , 125, 117, 114 112 byte

func[s n][d: 0 parse s[any[to" "p:" "opt[[to" "| to end]q:(if(-1 - d + index? q)> n[p/1: #"^/"d: index? p])]]]s]

Cobalah online!

Galen Ivanov
sumber
1

05AB1E , 18 byte

õs#vDy«g²›i,}yðJ}?

Cobalah online.

Penjelasan:

õ                   # Push an empty string "" to the stack
 s                  # Swap to take the (implicit) string input
  #                 # Split it by spaces
   v            }   # For-each `y` over the words:
    D               #  Duplicate the top of the stack
                    #  (which is the empty string in the very first iteration)
     y«             #  Append the current word `y`
       g            #  Get its length
        ²›i }       #  If its lengthy is larger than the second input:
           ,        #   Pop and output the current duplicated value with trailing newline
             yð     #  Push the word `y` and a space " "
               J    #  Join the entire stack together
                 ?  # After the loop, output the last part as well (without newline)
Kevin Cruijssen
sumber
1

Java 8, 135 byte

n->s->{String r="",S[]=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"\n";t="";}else t+=S[i++]+" ";return r+t;}

Cobalah online.

Penjelasan:

n->s->{                      // Method with integer & String parameters and String return
  String r="",               //  Result-String, starting empty
         S[]=s.split(" "),   //  Input-String split by spaces
         t=r;                //  Temp-String, starting empty as well
  for(int i=0;i<S.length;)   //  Loop `i` in the range [0, amount_of_words):
    if((t+S[i]).length()>n){ //   If `t` and the word are larger than the integer input:
      r+=t+"\n";             //    Add `t` and a newline to the result
      t="";}                 //    And reset `t` to an empty String
     else                    //   Else:
       t+=S[i++]+" ";        //    Append the word and a space to `t`
                             //    (and then increase `i` by 1 with `i++` for the next word
                             //     of the next iteration)
  return r+t;}               //  Return the result-String appended with `t` as result
Kevin Cruijssen
sumber
1

JavaScript, 40 byte

s=>n=>eval(`s.match(/.{1,${n}}( |$)/g)`)

Cobalah online!

tsh
sumber
Gagal di akhir
14m2
@ l4m2 diperbaiki ....
tsh
1

APL (Dyalog Unicode) , 14 byte SBCS

Fungsi infiks; argumen kiri adalah n, argumen benar adalah n.

CY'dfns'wrap

Cobalah online!

⎕CYc op y di perpustakaan dfns

 kemudian

wrap[c]  menggunakan bungkus [n] fungsi

[c]  kode fungsi itu
[n]  mencatat untuk fungsi itu


Versi golf wrap, 59 byte SBCS

{⍺≥≢⍵:⍵⋄(t↑⍵),2↓⎕TC,⍺∇⍵↓⍨t+b⊃⍨t←⊃⌽⍺,g/⍨⍺≥g←⍸(⍺+1)↑b' '=⍵}

Cobalah 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 string

  b← simpan di b(untuk b lanks)

  (... )↑ ambil sejumlah elemen berikut dari itu:

   ⍺+1 satu lebih dari lebarnya

  Saya menemukan di mana benar

  g← simpan di g(untuk g aps)

  ⍺≥ Topeng Boolean di mana lebarnya lebih besar dari atau sama dengan itu

  g/⍨ saring indeks kesenjangan dengan itu

  ⍺, menambahkan itu ke lebar

  ⊃⌽ pilih elemen terakhir dari itu (lit. pilih yang pertama dari yang terbalik)

  t← simpan di t(untuk t ake)

  b⊃⍨ gunakan itu untuk memilih elemen dari topeng b lanks

  t+ tambahkan itu ke t

  ⍵↓⍨ 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↑⍵tkarakter  pertama dari string

Adm
sumber
0

Terima kasih kepada @Erik the Outgolfer, versi golf:

Python 3 , 94 byte

def f(t,n):
 while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]

Cobalah online!

# Python 3 , 130 byte

def f(t,n):
 l=[]
 while len(t):
  i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
  l.append(t[:i])
  t=t[i::]
 return l

Cobalah online!

Versi tidak begitu golf ...

David
sumber
1
Beberapa golf. (mencetak ke STDOUT, tidak kembali).
Erik the Outgolfer
0

JavaScript + HTML + CSS, 117 64 byte

-53 byte milik @Neil

n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)

guest271314
sumber
1
Setidaknya di browser saya, Anda dapat mengurangi ini hingga (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>` .
Neil
@Neil Penggunaan chunit yang bagus. Firefox 65 menghitung 50chsebagai 500px; Chromium 70 50ch400px
dihitung
Jawaban ini salah. elit. Sed eget erat lectus. Morbi mi mi, fringilla sed(Baris kedua) lebih dari 50 karakter. Saya menggunakan Chrome terbaru.
mbomb007
Saya dapat mengubah saran asli saya untuk bekerja di Chrome dengan meletakkan bagian <p>dalam <tt>.
Neil
0

Jelly , 12 byte

ḲŒṖK€€ḣ€ƑƇṪY

Cobalah online!

Sayangnya, ini terlalu lambat untuk mengerjakan test case yang disediakan dalam waktu kurang dari satu menit dari TIO.

Erik the Outgolfer
sumber
0

C # (.NET Core) , 162 byte

string[]t(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})\S*)\s");}}

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

Perwujudan Ketidaktahuan
sumber
Ini tidak memberikan output yang tepat untuk test case - beberapa baris lebih panjang dari 50 karakter. Anda ingin "sebelum" tidak "dekat", dan juga pemisahan pada satu titik harus bergantung pada tempat perpecahan sebelumnya.
Ørjan Johansen
0

C # (Visual C # Interactive Compiler) , 78 byte

s=>n=>System.Text.RegularExpressions.Regex.Replace(s,".{1,"+n+"}( |$)","$0\n")

Cobalah online!

Kredit jatuh ke @LukeStevens untuk membuat versi Java ... Rupanya .NET membuat Anda mengimpor RegularExpressionsnamespace 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

s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('\n')+w.Length>n?'\n':' ')+w)

Cobalah online!

dana
sumber
0

Dart , 112 byte

f(s,n){var l=[''];s.split(' ').forEach((w){if((l.last+w).length<=n)l.last+=w+' ';else l.add(w+' ');});return l;}

Cobalah online!

Elcan
sumber
0

APL (NARS), 48 karakter, 96 byte

{⊃⍵{⍺≥≢⍵:⊂⍵⋄k←1+⍺-' '⍳⍨⌽r←⍺↑⍵⋄(⊂k↑r),⍺∇k↓⍵}⍨⍺+1}

uji:

  f←{⊃⍵{⍺≥≢⍵:⊂⍵⋄k←1+⍺-' '⍳⍨⌽r←⍺↑⍵⋄(⊂k↑r),⍺∇k↓⍵}⍨⍺+1}
  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."
  50 f 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.                                              
RosLuP
sumber
Saya tidak tahu di "{⊃⍵ {⍺≥≢⍵: ⊂⍵⋄ ..." Jika itu benar ≥ atau ada di sana> ...
RosLuP
0

C, 63 byte

b(a,n)char*a;{while(strlen(a)>n){for(a+=n;*a-32;--a);*a++=10;}}

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 .. .

#define R(x,y) if(x)return y
#define U unsigned
U bs(char*a,U n)
{U c,q,r=1,i,j;
 R(!a||n<1||n++>0xFFFF,-1);
 for(j=c=i=0;;++i,++c)
    {R(i==-1,-1);q=a[i];
     if(q==10)goto l;
     if(c>=n){R(i-j>n,-1);a[i=j]=10;l:c=-1;++r;}
     R(!q,r);
     if(q==32)j=i;
    }
}

hasil b () diteruskan pada satu fungsi yang menambahkan panjang baris setiap baris

Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]
RosLuP
sumber
@ceilingcat ok, kode di atas akan mempertimbangkan \ n juga ... satu bug yang saya temukan dengan kode adalah bahwa baris terakhir tidak dicetak dengan benar ... mengapa Anda tidak menulis jawaban C Anda seperti yang lain? Itu akan menang pada saya karena itu lebih pendek ... untuk mengatakan benar saya menggunakan baris pertama (atau pernyataan ";") untuk pemeriksaan input hanya karena bagi saya input harus diperiksa bahkan jika itu sedikit lebih panjang; Saya gagal mencoba untuk menulis fungsi dalam APL ...
RosLuP
@ceilingcat dalam jawaban terakhir, melihat pertanyaan itu tidak mengatakan apakah string input telah atau tidak harus ada di dalamnya '\ n' char dan melihat contoh itu tidak memiliki '\ n' Saya kira string input tidak memiliki karakter baris baru di dalamnya ...
RosLuP
Hanya 83 ... Ya saya harus melihat apakah saya mendapatkan 3 karakter menggunakan definisi fungsi lama ...
RosLuP
Hanya 81 .... .... ....
RosLuP
1
60 byte
ceilingcat