Tạo một trình bao bọc từ đơn giản


22

(Lưu ý: Đây là câu hỏi golf mã đầu tiên của tôi, nhưng theo như tôi có thể nói, không ai khác đã làm chính xác điều này, vì vậy tôi nên làm tốt.)

Nhiệm vụ của bạn là tạo ra một chương trình hoặc hàm lấy một chuỗi svà một số nguyên nvà trả về hoặc xuất ra văn bản được gói thành nhiều dòng. Mỗi từ phải hoàn toàn trên một dòng; tức là không có từ nào phân chia ở giữa. Mỗi dòng có thể dài không quá nký tự và bạn phải ghép càng nhiều từ càng tốt trên mỗi dòng.

Thí dụ:

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.

Đầu ra của bạn có thể là một chuỗi các chuỗi hoặc một chuỗi có ngắt dòng. Ngoài ra, bạn có thể cho rằng không có từ nào sẽ dài hơn n, vì vậy đừng lo lắng về việc xử lý các trường hợp kỳ lạ.

Áp dụng quy tắc I / O tiêu chuẩn và các sơ hở tiêu chuẩn đều bị cấm. Không gian lưu trữ được cho phép.

Vì đây là , giải pháp rút gọn theo byte thắng.

Đây là một chương trình ví dụ trong Python sẽ hoạt động.



3
n là độ dài dòng tối đa? hoặc độ dài chúng ta phải đạt được trước khi ngắt dòng?
david

1
@david, hay số dòng?
Peter Taylor

1
28 byte Python có liên quan không?
david

3
nlà độ dài dòng tối đa, xin lỗi rằng điều đó không rõ ràng. Tôi sẽ làm rõ. Ngoài ra, các quy tắc hiện đã được cập nhật để phân chia đơn giản không hoạt động.
ATMunn

Câu trả lời:



5

PHP , 8 byte

Phải thừa nhận rằng đây không phải là giải pháp nguyên bản nhất, nhưng PHP có một hàm riêng phù hợp hoàn hảo với yêu cầu của bạn!

wordwrap:

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

Kết hợp một chuỗi với một số ký tự cho trước bằng cách sử dụng ký tự ngắt chuỗi.

Sử dụng như vậy:

$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);

Hoặc dùng thử trực tuyến!


5

JavaScript (ES6),  75 73  72 byte

Đưa đầu vào là (string)(n).

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

Hãy thử trực tuyến!

Biến

Đầu ra được định dạng được lưu trữ trong (màu xanh lá cây bên dưới).o

Dòng cập nhật được định nghĩa là nối của:bạn

  • dòng hiện tại (màu đen bên dưới)r
  • một khoảng trắng nếu không trống hoặc không có gì khác (màu cam bên dưới)r
  • từ mới (màu xanh bên dưới)w

Chúng ta cần chèn ngắt dòng bất cứ khi nào ký tự thứ của được đặt (chỉ mục 0, màu đỏ bên dưới).nbạn

Thí dụ

n= =16 và = "LOREM IPSUM DOLOR"S

Thêm "LOREM": started

0001020304050607080910111213141516LÔiREM

Thêm "IPSUM": started

0001020304050607080910111213141516LÔiREMtôiPSBạnM

Thêm "DOLOR": started

0001020304050607080910111213141516LOREMIPSUMDOLOR

0001020304050607080910111213141516LOREMIPSUMDOLOR


Không gian lưu trữ được cho phép. có lẽ r+w+' 'vậy
l4m2

5

Perl 6 , 46 29 byte

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

Hãy thử trực tuyến!

Giải pháp dựa trên Regex lấy đầu vào được uốn, thích f(n)(s)và trả về danh sách các dòng. Mỗi dòng ngoại trừ dòng cuối cùng có một khoảng trắng ở cuối

Giải trình:

{;*                         }   # 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

4

Vim, 15 byte / tổ hợp phím

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

Một câu hỏi định dạng văn bản? Tôi chỉ biết công cụ cho công việc! Và nó thậm chí còn có tên của tôi trong hai tổ hợp phím đầu tiên: D

<C-r>có nghĩa là ctrl-r.

Điều này có thể bao giờ nên hơi ngắn hơn ở V , nhưng tôi thích trả lời trong vanilla vim cho câu trả lời thực sự thể hiện cách súc tích vim có thể cho thử thách đúng. Và sự khác biệt là rất nhỏ.

Điều này cũng có thể là sau đây cho 15 byte là:

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

Hãy thử trực tuyến!


1
Giải thích: DJ:Chương trình này đã được thực hiện bởi DJ, con mèo yêu thích của chúng tôi với một viên kim cương quanh cổ. [...]
Erik the Outgolfer

4

R , 36 27 byte

R có cái này dưới dạng tích hợp ( strwrap), chúng ta trả về một vectơ của các dòng chia.

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

Hãy thử trực tuyến!


1
Vâng, điều đó nên được cho phép. Mảng dòng được cho phép, vì vậy tôi không hiểu tại sao điều này sẽ khác đi.
ATMunn

4

Haskell , 70 byte

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


3

Java (JDK) , 46 44 byte

Về cơ bản là một giải pháp regex thuần túy trong Java, gần như chắc chắn là ngắn nhất tôi đã viết.

Chúc mừng Kevin đã giúp cắt giảm các byte trong regex hơn nữa!

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

Hãy thử trực tuyến!

Sử dụng một lamdba được uốn cong, nó tạo ra một biểu thức chính quy để phù hợp với các nký tự theo sau là khoảng trắng hoặc cuối chuỗi. Sau đó, nó thay thế các nhân vật với chính họ theo sau bởi một dòng mới.


@KevinCruijssen [ $]thực sự chỉ khớp với một khoảng trắng hoặc $nếu tôi nhớ chính xác, thay vì kết thúc chuỗi. Nó dường như hoạt động mặc dù, vì vậy có vẻ như nó chỉ có thể được đánh xuống một không gian cho ít byte hơn.
Luke Stevens

Ah, nó thực sự có thể chỉ là một khoảng trắng, vì bạn thêm dòng mới và không cần thêm dòng mới ở cuối.
Kevin Cruijssen

1
Bạn có thể chơi thêm 2 byte để loại bỏ dấu ngoặc trong regex và sử dụng $0thay vì $1.
Kevin Cruijssen

@KevinCruijssen Đẹp một! Thật là xấu hổ replaceAllquá dài dòng!
Luke Stevens

2
Đối với tôi, điều đó là sai, xuất hiện nếu tôi sửa đổi cụm từ tiếng Latin của bài tập theo cách kết thúc bằng "... dictum varius abc erat." Có một dòng mới không cần thiết sau thư c ...
RosLuP

2

Toán học, 16 byte

InsertLinebreaks

Chức năng tích hợp. Lấy một chuỗi và một số nguyên làm đầu vào và trả về một chuỗi làm đầu ra.

InsertLinebreaks["string", n]
 chèn các ký tự dòng mới để không tạo dòng nào dài hơn n ký tự.


2

Powershell, 40 83 byte

Trường hợp thử nghiệm với n=80thêm.

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

Kịch bản thử nghiệm:

$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
}

Đầu ra:

True
True


Cảm ơn. Chim nhạn giả là một biểu hiện. Kịch bản này chứa một ẩn returntrong elsephần và một tuyên bố trong thenphần.
mê mẩn


2

Japt , 20 byte

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

Hãy thử trực tuyến!

Cảm ơn Bubbler và Shaggy vì sự giúp đỡ của họ

Giải trình:

¸                       #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

24 byte với [X,Y].join(...).
Bong bóng


1

Võng mạc 0.8.2 , 37 byte

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

Hãy thử trực tuyến! Đưa sntrên các dòng riêng biệt. Giải trình:

.+$
$*

Chuyển đổi nsang unary.

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

Khớp không phải khoảng trắng, sau đó nhìn về phía trước nvà tính nó là $#1. Sau đó quay lại và sử dụng một nhóm cân bằng để khớp với các nký tự theo sau là khoảng trắng.

!`

Xuất ra các trận đấu dưới dạng một danh sách các dòng.


Có cách nào trong Retina để đưa đầu vào đầu tiên vào regex mà chúng ta sử dụng với đầu vào thứ hai không? Vì vậy, một cái gì đó như thế này: .{1,50} $0¶ , nhưng nơi nào 50được nhận làm đầu vào thay thế?
Kevin Cruijssen

@KevinCruijssen Trong Retina 1, bạn có thể sử dụng giai đoạn Eval để đưa ra một kết quả tương tự, nhưng điều đó thật nhàm chán, vì vậy tôi không bận tâm.
Neil

1

Than , 19 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đưa đầu vào nstrên các dòng riêng biệt. Giải trình:

Nθ

Đầu vào n.

Di chuyển con trỏ sang trái một hình vuông để cân bằng chuyển động phải từ lần lặp đầu tiên của vòng lặp.

F⪪S «

Chia chuỗi trên khoảng trắng và lặp lại các từ.

¿‹⁺Lιⅈθ

Tính xem từ tiếp theo sẽ đạt đến cạnh phải hay không.

M→

Nếu nó sẽ không di chuyển một hình vuông bên phải.

⸿

Nếu nó sẽ bắt đầu một dòng mới.

ι

Xuất từ.



1

05AB1E , 18 byte

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

Hãy thử trực tuyến.

Giải trình:

õ                   # 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)

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;}

Hãy thử trực tuyến.

Giải trình:

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


1

APL (Dyalog Unicode) , 14 byte SBCS

Chức năng Infix; đối số bên trái là n, đối số bên phải là n.

CY'dfns'wrap

Hãy thử trực tuyến!

⎕CYc op y trong thư viện dfns

 sau đó

wrap[c]  sử dụngchức năngbọc [n]

[c]  mã của hàm đó
[n]  ghi chú cho hàm đó


Phiên bản chơi gôn của wrap, 59 byte SBCS

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

Hãy thử trực tuyến!

{... } DFN; là đối số bên trái (chiều rộng), là đối số bên phải (chuỗi)

≢⍵ kiểm đếm (số ký tự) của chuỗi

⍺≥... : nếu chiều rộng lớn hơn hoặc bằng, sau đó:

   trả lại chuỗi

 nếu không thì:

  ' '=⍵ Mặt nạ Boolean trong đó khoảng trống bằng chuỗi

  b← lưu trữ trong b(cho b banks)

  (Sầu )↑ lấy số lượng các yếu tố sau từ đó:

   ⍺+1 nhiều hơn chiều rộng

  tôi nghĩ nơi nào đúng

  g← lưu trữ trong g(cho g aps)

  ⍺≥ Mặt nạ Boolean trong đó chiều rộng lớn hơn hoặc bằng

  g/⍨ lọc các chỉ số khoảng cách bằng cách đó

  ⍺, nối nó với chiều rộng

  ⊃⌽ chọn phần tử cuối cùng của phần đó (lit. chọn phần đầu tiên của phần đảo ngược)

  t← lưu trữ trong t(cho t ake)

  b⊃⍨ sử dụng để chọn một phần tử từ mặt nạ của b lanks

  t+ thêm nó vào t

  ⍵↓⍨ bỏ nhiều ký tự từ chuỗi

  ⍺∇ lặp lại trên đó với cùng một đối số bên trái

  ⎕TC, nối nó vào danh sách các ký tự t erminal c ontrol (8: HT, 10: NL, 13: CR)

  2↓ bỏ hai ký tự đầu tiên từ đó (chỉ còn lại 13: CR)

  (... ), append đó để sau:

   t↑⍵ các tký tự đầu tiên của chuỗi


0

Cảm ơn @Erik the Outgolfer, phiên bản chơi gôn:

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:]

Hãy thử trực tuyến!

# 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

Hãy thử trực tuyến!

Phiên bản không được chơi gôn ...


1
Một số sân golf. (in ra STDOUT, không trả lại).
Erik the Outgolfer

0

JavaScript + HTML + CSS, 117 64 byte

-53 byte lịch sự của @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)


1
Ít nhất trong trình duyệt của tôi, bạn có thể cắt nó xuống còn (n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>` 74 byte. Nếu bạn sẵn sàng khai thác các phiên bản Firefox cũ, bạn có thể lưu thêm 8 byte với (n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>` .
Neil

@Neil Đẹp sử dụng chđơn vị. Firefox 65 tính toán 50chnhư 500px; Chromium 70 tính 50ch400px
khách271314

Câu trả lời này là sai. elit. Sed eget erat lectus. Morbi mi mi, fringilla sed(Dòng thứ 2) có hơn 50 ký tự. Tôi đang sử dụng Chrome mới nhất.
mbomb007

Tôi đã có thể điều chỉnh đề xuất ban đầu của mình để hoạt động trong Chrome bằng cách đặt <p>bên trong <tt>.
Neil



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");}}

Hàm này sử dụng biểu thức chính phù hợp với khoảng trắng gần nhất gần ký tự thứ n hoặc bội của ký tự thứ n và phân tách chuỗi dựa trên nó.

Hãy thử trực tuyến!

Liên kết TIO là một chương trình đầy đủ và hàm có một từ khóa tĩnh để hàm có thể được gọi từ chính.

Kiểm tra Regex


Điều này không cung cấp đầu ra phù hợp cho trường hợp thử nghiệm - một số dòng dài hơn 50 ký tự. Bạn muốn "trước" không "gần", và việc chia tách tại một thời điểm phải phụ thuộc vào nơi nó được chia trước đó.
Ørjan Johansen

0

C # (Trình biên dịch tương tác Visual C #) , 78 byte

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

Hãy thử trực tuyến!

Tín dụng được gửi tới @LukeStevens để đưa ra phiên bản Java ... Rõ ràng .NET khiến bạn nhập RegularExpressionskhông gian tên để thực hiện thay thế :(

Đây là phiên bản gốc của tôi phân tách nhân vật không gian và sử dụng LINQ để nối chúng lại với nhau:

C # (Trình biên dịch tương tác Visual C #) , 91 byte

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

Hãy thử trực tuyến!



0

APL (NARS), 48 ký tự, 96 byte

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

kiểm tra:

  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.                                              

Tôi không biết trong "{{⍺≥≢⍵: ..." Nếu nó đúng hoặc nó ở ngay đó> ...
RosLuP

0

C, 63 byte

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

Hàm của bài tập này b (a, n) sẽ phá vỡ dòng "a" như bài tập đã nói, theo cách không thay đổi độ dài của nó (nếu chúng ta thấy kết quả là một chuỗi) vì thay đổi một số khoảng trắng trong \ n hoặc dòng mới trong địa điểm. Chuỗi đầu vào "a" cũng không có ký tự \ n trong hàm b () (nó có thể có \ n trong chuỗi đầu vào cho bs ())

Hàm b (a, n) sẽ ổn chỉ vì hạn chế của bài tập này, áp đặt từng từ của chuỗi "a" có độ dài <n nếu điều này không đúng, hàm đó có thể đi
đến một vòng lặp vô hạn ... (rất Theo cách nhìn của tôi, vì vậy tôi sao chép chức năng tốt hơn bởi vì trong trường hợp đó sẽ trả về -1 và sẽ không chuyển đến một vòng lặp vô hạn, đó là bs (a, n) bên dưới) Tôi không loại trừ cả hai chức năng bị lỗi .. .

#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;
    }
}

kết quả của b () được truyền vào một hàm có thêm chiều dài mỗi dòng

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]

@ceilingcat ok, mã ở trên sẽ xem xét \ n quá ... một lỗi tôi tìm thấy với mã là dòng cuối cùng không được in chính xác ... tại sao bạn không viết câu trả lời C của mình như khác? Nó sẽ chiến thắng với tôi vì nó ngắn hơn ... giả sử tôi thực sự sử dụng dòng đầu tiên (hoặc câu lệnh ";") để kiểm tra đầu vào chỉ vì đối với tôi đầu vào phải được kiểm tra ngay cả khi đó là một chút nữa Dài; Tôi không thành công khi thử viết hàm trong APL ...
RosLuP

@ceilingcat trong câu trả lời cuối cùng, đã thấy câu hỏi đó không cho biết chuỗi đầu vào có hay không phải có trong đó '\ n' char và thấy ví dụ đó không có '\ n' Tôi cho rằng chuỗi đầu vào không có ký tự dòng mới trong đó ...
RosLuP

Chỉ 83 ... Có, tôi phải xem liệu tôi có đạt được 3 ký tự bằng cách sử dụng định nghĩa hàm cũ không ...
RosLuP

Chỉ 81 .... .... ....
RosLuP

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.