Basit bir sözcük sarmalayıcı olun


22

(Not: Bu benim ilk kod golf sorumu, ancak söyleyebileceğim kadarıyla, başka hiç kimse tam olarak bunu yapmadı, bu yüzden iyi olmalıyım.)

Göreviniz bir dizgede sve bir tamsayıda yer alan bir program veya işlev yapmak nve bu metni birden çok satıra sarılmış olarak döndürür veya çıkarır. Her kelime tamamen bir çizgi üzerinde olmalıdır; yani ortada hiçbir kelime bölünmemiş. Her satır, nkarakter uzunluğundan daha uzun olamaz ve her satıra mümkün olduğunca çok kelime sığdırmanız gerekir.

Örnek:

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.

Çıktınız bir dizi dizisi veya satır kesmeleri olan tek bir dize olabilir. Ayrıca, hiçbir kelimeden daha uzun olmayacağını varsayabilirsiniz n, bu yüzden garip vakalarla başa çıkma konusunda endişelenmeyin.

Standart G / Ç kuralları uygulanır ve standart boşluklar yasaktır. Sondaki boşluklara izin verilir.

Bu olduğu için, bayttaki kısa çözüm kazanır.

İşte işe yarayacak Python'da örnek bir program.



3
n maksimum hat uzunluğu nedir? veya hat kesilmeden önce ulaşmamız gereken uzunluk?
David

1
@david veya satır sayısı?
Peter Taylor

1
28 bytes Python ile alakalı mı?
david

3
nMaksimum satır uzunluğu, üzgünüm ki net değildi. Netleştireceğim. Ayrıca, kurallar şimdi güncellendi, böylece basit bir bölünme işe yaramadı.
ATMunn

Yanıtlar:



5

PHP , 8 bayt

Kuşkusuz en özgün çözüm değil, ancak PHP gereksinimlerinize mükemmel şekilde uyan yerel bir işleve sahiptir!

wordwrap:

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

Bir dize kesme karakteri kullanarak bir dize belirli sayıda karaktere sarar.

Öyle kullanın:

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

Veya çevrimiçi deneyin!


5

JavaScript (ES6),  75 73  72 bayt

Girişi olarak alır (string)(n).

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

Çevrimiçi deneyin!

Değişkenler

Biçimlendirilmiş çıktı O cinsinden kaydedilir (aşağıda yeşil renkte).

Güncellenen u satırı , birleştirme olarak tanımlanır:

  • Geçerli satır r (aşağıda siyah)
  • r boş değilse veya boşluk yoksa (boşluk turuncu)
  • Yeni kelime w (aşağıda mavi renkte)

Biz ne zaman bir satır sonu eklemek gerekir n ait ıncı karakter u (aşağıda kırmızı içinde, 0 endeksli) ayarlanır.

Örnek

n=16 ves = "LOREM IPSUM DOLOR"

Ekleme "LOREM":

0001020304050607080910111213141516LOR,EM

Ekleme "IPSUM":

0001020304050607080910111213141516LOR,EMbenPSUM

Ekleme "DOLOR":

0001020304050607080910111213141516LOR,EMbenPSUMDOLOR,

0001020304050607080910111213141516LOR,EMbenPSUMDOLOR,


Sondaki boşluklara izin verilir. belki r+w+' 'mi
04m2

5

Perl 6 , 46 29 bayt

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

Çevrimiçi deneyin!

Girdiyi alan, sıralanan f(n)(s)ve satır listesini veren Regex tabanlı çözüm . Sonuncusu dışındaki her satır sonda bir boşluk içeriyor

Açıklama:

{;*                         }   # 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 bayt / tuş vuruşları

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

Metin biçimlendirme sorusu? Sadece iş için bir araç biliyorum! İlk iki tuş vuruşunda benim adıma bile sahip: D

<C-r>anlamına gelir ctrl-r.

Bu olabilir şimdiye V yüzden biraz daha kısa , ama gerçekten özlü vim sağ meydan okuma için nasıl olabilir göstermek cevapları için vanilya vim içinde yanıtlayan tercih ediyoruz. Ve fark zaten çok küçük.

Bu ayrıca 15 byte için aşağıdaki olabilir:

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

Çevrimiçi deneyin!


1
Açıklama:: DJ:Bu program, en sevdiği kedisi boynunda bir pırlanta olan DJ tarafından yapılmıştır. [...]
Outgolfer Erik 19: 10'da

4

R , 36 27 bayt

R bunu yerleşik olarak ( strwrap) sahip, bölünmüş satırların bir vektörünü döndürüyoruz.

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

Çevrimiçi deneyin!


1
Evet, buna izin verilmelidir. Satır dizilerine izin verilir, bu yüzden bunun neden farklı olacağını anlamıyorum.
ATMunn

4

Haskell , 70 bayt

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


3

Java (JDK) , 46 44 bayt

Temelde Java'da saf bir regex çözümü, neredeyse kesinlikle yazdığım en kısa sürede.

Regex'teki baytları daha da azaltmaya yardımcı olduğu için Kevin'e şerefe!

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

Çevrimiçi deneyin!

Kıvrımlı bir lamdba kullanarak, nboş bir karakterin ardından bir boşluk veya ipin sonuna kadar karakterlerle eşleşmesi için bir regex oluşturur . Daha sonra bu karakterleri kendileri ile takip eder, ardından yeni bir satır yazar.


@KevinCruijssen [ $]aslında sadece bir boşlukla eşleşir ya da $dizginin sonundan ziyade doğru hatırlıyorsam. Yine de çalışıyor gibi gözüküyor, bu yüzden daha az bayt için tek bir alana bırakılabiliyor gibi görünüyor.
Luke Stevens,

Ah, aslında sadece bir alan olabilir, çünkü yeni satırlar eklersiniz ve sonunda ek bir son satır eklemek zorunda kalmazsınız.
Kevin Cruijssen

1
Düzenli olarak parantezi kaldırarak 2 bayt daha golf oynayabilir ve $0yerine kullanabilirsiniz $1.
Kevin Cruijssen

@KevinCruijssen Güzel bir tane! Bu sadece replaceAllçok ayrıntılı bir ayıp !
Luke Stevens

2
Benim için yanlış, görünüşe göre alıştırmanın Latince cümlesini "... dictum varius abc erat." C harfinden sonra gereksiz yeni bir satır var ...
RosLuP

2

Mathematica, 16 bayt

InsertLinebreaks

Yerleşik işlev. Bir dize ve tamsayı giriş olarak alır ve bir dize çıktı olarak döndürür.

InsertLinebreaks["string", n]
n karakterinden  daha uzun olmayan bir satır yapmak için yeni satır karakterleri ekler .


2

Powershell, 40 83 bayt

n=80Eklenen test durumu .

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

Test komut dosyası:

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

Çıktı:

True
True


Teşekkürler. Sahte üçlü bir ifadedir. Bu betiğin üstü kapalıreturn , elseparçada ve parçada bir deyim içerir then.
mazzy


2

Japt , 20 bayt

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

Çevrimiçi deneyin!

Bubbler ve Shaggy'ye yardımları için teşekkürler

Açıklama:

¸                       #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 bayt ile [X,Y].join(...).
Bubbler,


1

Retina 0.8.2 , 37 bayt

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

Çevrimiçi deneyin! Alır sve nayrı satırlarda. Açıklama:

.+$
$*

nBirliğe dönüştür .

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

Boş olmayan alanları eşleştirin, sonra ileriye bakın nve olarak sayın $#1. Sonra geri dönün ve nbeyaz boşluk ardından gelen karakterlerle eşleştirmek için bir dengeleme grubu kullanın .

!`

Eşleşmeleri satır listesi olarak çıkar.


Retina'da ilk girişi ikinci girişte kullandığımız bir regex içine koymanın bir yolu var mı? Yani böyle bir şey: .{1,50} ve$0¶ , ama 50bunun yerine girdi olarak nereden alınır?
Kevin Cruijssen

@KevinCruijssen Retina 1'de muhtemelen benzer bir sonuç vermek için bir Değerlendirme aşaması kullanabilirsiniz, ancak bu çok sıkıcı, bu yüzden rahatsız etmedim.
Neil

1

Kömür , 19 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Ayrı satırların nve ssatırların girişini alır . Açıklama:

Nθ

Giriş n.

Sağ hareketi, döngünün ilk yinelemesinden dengelemek için imleci bir kare sola kaydırın.

F⪪S «

Dizgiyi boşluklara bölün ve kelimelerin üzerine gelin.

¿‹⁺Lιⅈθ

Bir sonraki kelimenin sağ kenara ulaşıp ulaşmayacağını hesaplayın.

M→

O zaman bir kare sağa hareket etmiyorsa.

⸿

Eğer o zaman yeni bir hat başlayacaktır.

ι

Kelimeyi çıkar.



1

05AB1E , 18 bayt

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

Çevrimiçi deneyin.

Açıklama:

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

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

Çevrimiçi deneyin.

Açıklama:

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 bayt SBCS

Infix işlevi; sol argüman n, sağ argümandır n.

CY'dfns'wrap

Çevrimiçi deneyin!

⎕CYc op y de dfns kütüphane

 sonra

wrap[c]  wrap [n] işlevini kullanın

[c]  bu işlevin kodu
[n]  bu işleve ilişkin notlar


wrap59 bayt SBCS'nin Golf sürümü

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

Çevrimiçi deneyin!

{} Dfn; sol argüman (genişlik), sağ argüman (dize)

≢⍵ karakter dizisi (karakter sayısı)

⍺≥: Eğer genişlik bundan büyük veya eşitse, o zaman:

   dizeyi döndür

 aksi takdirde:

  ' '=⍵ Boşlukların dizeye eşit olduğu Boole maskesi

  b← depoda b( b sıraları için)

  (… Bundan )↑ aşağıdaki elementleri al:

   ⍺+1 genişlikten daha fazla

  i nerede doğrudur ndices

  g← saklayın g( g aps için)

  ⍺≥ Genişliğin buna eşit veya daha büyük olduğu Boole maskesi

  g/⍨ boşluk endekslerini buna göre filtrele

  ⍺, genişliğe eklemek

  ⊃⌽ bunun son elemanını seçin (lit. ters çevrilmiş olanı seç)

  t← depolamak t( t ake için)

  b⊃⍨b kenarlarının  maskesinden bir öğe seçmek için bunu kullanın

  t+ ekle t

  ⍵↓⍨ dizeden o kadar çok karakter bırak

  ⍺∇ aynı sol sol argümanla bunu tekrarla

  ⎕TC, Ekleme bu listesine t erminal c karakter kontrolü (8: HT 10: NL, 13: CR)

  2↓ bundan ilk iki karakteri bırak (sadece bir satır 13: CR bırakarak)

  (), Bunu aşağıdakilere ekleyin:

   t↑⍵tdizenin  ilk karakterleri



0

JavaScript + HTML + CSS, 117 64 bayt

-53 bayt @Neil'in izniyle

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
En azından tarayıcımda bunu (n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>` 74 bayta indirebilirsin . Firefox'un eski sürümlerini incelemeye istekliysen, başka bir 8 baytla kaydedebilirsin (n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>` .
Neil,

@Neil Ünitelerin güzel kullanımı ch. Firefox 65 değerlerini hesaplar 50cholarak 500px; Chromium 70 50cholarak 400px
hesaplandı

Bu cevap yanlış. elit. Sed eget erat lectus. Morbi mi mi, fringilla sed(2. satır) 50 karakterden fazla. En yeni Chrome'u kullanıyorum.
mbomb007

Ben koyarak Chrome'da çalışmalarına orijinal öneri çimdik başardı <p>içini <tt>.
Neil,



0

C # (.NET Core) , 162 bayt

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

Bu işlev, nth ya da nth karakterinin yakınında bulunan en yakın boşlukla eşleşen ve nt karakterine göre dizgeyi bölen bir regex kullanır.

Çevrimiçi deneyin!

TIO bağlantısı tam bir programdır ve fonksiyonun statik bir anahtar sözcüğü vardır, böylece fonksiyon ana kaynaktan çağrılabilir.

Regex'i Test Et


Bu, test durumu için doğru çıktıyı vermez - bazı satırlar 50 karakterden daha uzundur. Siz "önce" değil "yakınında" olmak istersiniz ve ayrıca bir noktada bölünme, daha önce nerede bölündüğüne bağlı olmalıdır.
Ørjan Johansen

0

C # (Visual C # Etkileşimli Derleyici) , 78 bayt

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

Çevrimiçi deneyin!

Credit, Java sürümüyle geldiği için @LukeStevens'e gidiyor ... Görünüşe göre .NET RegularExpressions değiştirilecek bir ad alanı ad alanını :(

İşte boşluk karakterine bölen ve onları birleştirmek için LINQ kullanan orijinal sürümüm:

C # (Visual C # Etkileşimli Derleyici) , 91 bayt

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

Çevrimiçi deneyin!



0

APL (NARS), 48 karakter, 96 bayt

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

Ölçek:

  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.                                              

Bilmiyorum "{⊃⍵ {⍺≥≢⍵: ⊂⍵⋄ ..." Eğer doğru ≥ ise ya da tam oradaysa> ...
RosLuP

0

C, 63 bayt

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

Bu alıştırmanın b (a, n) işlevi alıştırmanın söylediği gibi "a" satırını kıracak, uzunluğunu değiştirmeyecek şekilde (sonucu bir dize olarak görürsek), çünkü \ n içindeki bazı boşlukları değiştirebilir veya yer. "A" giriş dizgisi b () işlevi için içinde de \ n karakter içermemelidir (bs () için giriş dizesinde \ n olabilir)

b (a, n) işlevi sadece bu alıştırmanın kısıtlaması, her "a" dizgisinin her kelimesini dayatan <uzunluğuna sahip olduğundan, bu doğru değilse, o işlev
bir sonsuz döngüye gidebilir ... (çok Görme biçimimde yanlış, bu yüzden de işlevi daha iyi kopyalayacağım çünkü bu durumda -1 döndürür ve bir sonsuz döngüye gider; bu bs (a, n) altındadır. .

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

b () 'nin sonucu, her satıra satır ekleyen bir fonksiyon üzerinde geçmiştir.

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 tamam, yukarıdaki kod göz önünde bulundurulacak \ n ... kodla bulduğum bir hata da, son satırın doğru şekilde yazdırılmadığıydı ... neden C cevabınızı diğer gibi yazmıyorsunuz? Bu benim için kazanacaktı çünkü daha kısa ... çünkü doğru, giriş kontrolü için ilk satırı kullandım (ya da ";") sadece giriş kontrolü için, çünkü benim için girişin biraz daha fazla olsa bile kontrol edilmesi gerekiyordu. uzun; Fonksiyonu
APL'ye yazmayı denemedim

Son cevabın @ceilingcat, bu soruyu girdi dize '\ n' char sahip olması gerekip gerekmediğini söylemedi ve bu örnekte '\ n' olmadığını gördüm ...
RosLuP

Sadece 83 ... Evet eski fonksiyon tanımını kullanarak 3 karakter
kazanıp kazanmadığımı görmeliyim

Sadece 81 .... .... ....
RosLuP

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.