Havlu gününü unuttum


15

Havlu gününü unuttum

Korumalı alan bağlantısı

Her iki örnek için PHP betiği (hata, dizeyi biçimlendirme)

Php betiği düzeltildi, giriş kendini açıklayıcı

$argvFarklı sonuçlar görmek için daha fazla giriş yorumu / uncomment içeren PHP komut dosyası

Bildiğiniz gibi, 25 Mayıs Havlu Günü olarak bilinir , çünkü bir havluya sahip olabileceği birçok kullanımdan dolayı.

Kitabın basit bir özü "Otostopçunun Galaksi Rehberi" (şahsen bu kitabı bir "günlük rehber" olarak aldım ) şöyle diyor:

"Bir havlu, yıldızlararası bir otostopçunun sahip olabileceği en büyük fayda olan şeydir. Kısmen büyük pratik değeri vardır."

Havlu kontrolü hakkında daha fazla bilgiye ihtiyacınız varsa bu SE.scifi yanıtını


Meydan okuma

Umarım bunu bacaklarınız için battaniye olarak kullanılan bir havluyla yaparsınız.

İki giriş alan herhangi bir geçerli programlama dilinde tam bir program veya işlev yazın

size        Integer  : #The size
message     string   : #A sentence

Bu değerlere sahip bir havlu nasıl çizilir?

İlk kullanma size :

Havlu için , boyut girişine bağlı olarak bir havlu çizin

  width = 12*size

  #the line that has the "bar" its always present with different sizes

  Width is defined as:
  from the first | to the second | has to be equal to size*12 including both ||

      <-   width-> 
  [===|          |====]  
      | 12 chars ||   1  height starts here, just after the "bar"
      | SIZE = 1 ||   2
      |          ||   3   height = 5*size
      |          ||   4
      |          ||   5  height ends here just before the first line |=======|
      |==========||   # the lines with the # 
      |==========||   # are always fixed
      """"""""""""|   # it means, every towel
       |          |   # always has this 5 rows
       """"""""""""   # no matter the size

İkincisi, ver message

Bir mesaj vermelisiniz , altın iplikle dikilmiş güzel bir mesaj olmadan bir havlu nedir?

örnek 1

  input: size=1, message="a simple message can stay with size"

  width = 12*size

  #the line that has the "bar" it's always present with different sizes
  #no words allowed at the bar level


  [===|          |====]  
      | a simple ||   1  height starts here, just after the "bar"
      | message  ||   2
      | can stay ||   3   height = 5*size
      | with size||   4
      |          ||   5  height ends here just before the first line |=======|
      |==========||   # the lines with the # 
      |==========||   # are always fixed
      """"""""""""|   # it means, every towel
       |          |   # always has this 5 rows
       """"""""""""   # no matter the size

ÖRNEK 2

input size=2 
message="Don't Panic and bring a towel to SE Programming Puzzles and CodeGolf"

The size is 2
That means 24 width and 10 heigth

    <-    24 chars width  ->
[===|                      |====]
    | Don't Panic and bring||   1
    | a towel to SE        ||   2
    | Programming Puzzles  ||   3
    | and CodeGolf         ||   4
    |                      ||   5
    |                      ||   6
    |                      ||   7
    |                      ||   8
    |                      ||   9
    |                      ||   10
    |======================||   #  The lines with the "#"
    |======================||   #  always present and
    """"""""""""""""""""""""|   #  adapted to 
     |                      |   #  the towel width
     """"""""""""""""""""""""   #  

Kabul edilen cevap kriterleri

  • Bu kodgolf olduğundan normal kurallar geçerlidir.

kurallar

  • Tüm giriş dizelerinin boyuta uygun olacağı garanti edilir, bu nedenle herhangi bir giriş yapılmaz size=1; message="This string is just tooooooooooooooooooooo long to fit the width and height of your towel".

  • Örneğin alt dizeleri ortalamak istiyorsanız, dize biçimi size kalmış.

  • Kelime aralarına izin verilmiyor.

Düzenlemeler

Herhangi bir karışıklık için gerçekten üzgünüm, çünkü çizdiğim ansii havlu parametreleri eşleşmedi , beklenen çıktıları kontrol etmek için her iki örnek için bir PHP komut dosyası ekledi .

Ayrıca oy veren ve ilk görevimi düşünen herkese teşekkür ederim: D.


Düzeltmem için birkaç dakika ver (sadece bunu gördüm). Ne oldu ben havlu çizmek için php üzerinde bir program yapılmış ama sunulan bir çok daha basit, ben örnekler için bir program vardı ve ben onu değiştirmek unuttum oldu.
Francisco Hahn

@Lynn, her iki test vakasına bir php ungolfed çözümü ekledi, herhangi bir karışıklık için özür dilerim.
Francisco Hahn

Hat kopuşlarının nereye gideceğini seçebilir miyiz?
Jakob

Satır sonu, current line + next wordyayınladığım php betiği karar verirken havlu @ Jakob için izin verilen sınırı aştığında eklenmelidir.
Francisco Hahn

uygun metin genişliğini ve / veya yüksekliğini hesaplamak yerine bağımsız değişken olarak alabilir miyiz?
JoshM

Yanıtlar:


4

Piton 2 , 223 210 209 204 bayt

def f(s,m):w=12*s-2;l='    |';print'[===|'+' '*w+'|====]';exec"j=(m+' ').rfind(' ',0,-~w);print l+'%*s||'%(w,m[:j]);m=m[j+1:];"*s*5;print(l+w*'='+'||\n')*2+' '*4+'"'*12*s+'|\n '+l+' '*w+'|\n    ','"'*12*s

Çevrimiçi deneyin!


2

JavaScript (Node.js) , 375 bayt

Bu, alacağınız en kötü gönderimdir, ancak en azından baytların yarısını xD'nin yarısını boşluklar olsa denedim

(s,_,w=12*s-2,h=5*s)=>`
[===|${j=' '.repeat(w)}|====]
${[...Array(h)].map((g,i)=>_.split` `.reduce((a,b)=>((l=a.split`,`)[l.length-1]+b).length>w-1?a+','+b:a+' '+b,'').split`,`[i]).map(a=>`    |${a?(r=a.length)<w?a+' '.repeat(w-r):a:j}||    `).join`\n`+
`
    |${'='.repeat(w)}||    `.repeat(2)}
    ${y='"'.repeat(w+2)}|    
     |${j}|    
     ${y}
`

Çevrimiçi deneyin!


2

JavaScript (node.js) , 347 345 343 337 334 328 326 bayt

b=>d=>`
[===|${M=" "[X="repeat"](c=12*b-2)}|====]
${[...Array(5*b)].map((a,b)=>d[Y="split"]` `.reduce((a,b)=>((l=a[Y]`,`)[l[Z="length"]-1]+b)[Z]>c-1?a+","+b:a+" "+b)[Y]`,`[b]).map(a=>`    |${a?(r=a[Z])<c?a+" "[X](c-r):a:" "[X](c)}||    `).join`
`+`
    |${"="[X](c)}||    `[X](2)}
    ${y='"'[X](c+2)}|
     |${M}|
     ${y}
`

Çevrimiçi deneyin!


Açıklama:

b =>                                   // lambda function taking arg 1 : size
    d =>                               // arg 2 : message
        `                              // begin string template for drawing
[===|${                                // draw first part and now open literal 
        M = ' '[X='repeat'(c=12*b-2)]  // set 3 variables, M, X , c to be used again
    }|====]                            // close and draw the next part ====]
${[...Array(5*b)]                      // open and create an array of length 5 * b =width
.map(a,b=>                             // begin map function two args : a,b
        d[Y='split']` `                // use d(message), split at whitespace, set to Y
.reduce((a,b) =>                       // reduce to single value, arg 1 : a, arg 2 : b
        ((l = a[Y]`,`)                 // declare l and then find in l
        [l[Z='length']-1]              // set Z as length
        + b)                           // add value of b
        [Z]                            // find the length 
        > c-1 ?                        // check if it's less than c - 1
        a+','+b                        // then add `${a},${b}`
        : a + ' ' + b                  // otherwise `${a} ${b}`
        )[Y]`,`                        // close and split at comma
        [b]                            // use b again
        )                              // close
        .map(a =>                      // map over that arg 1 : a
                `    |${               // four space + | and open 
        a ?                            // if a is true or a truthy value
            (r=a[Z])                   // set value of r as a's length
            < c ?                      // check if it's less than c
                a+' '[X](c-r)          // then draw a + space repeated c-r times
                : a + ' '[X](c)        // else draw a + space repeated c times
            }                          // close
            ||    `                    // add || and 4 spaces and close
        )                              // end
        .join`
`                                      // and turn to string with new line as separator 
    +                                  // add to that
    `
    |{                                 // new line , 4 spaces and | 
        '='[X](c)}                     // repeat = c times
        ||    `[X](2)}                 // and repeat that 2 times
    ${                                 // new line + 4 space
    y = '"'[X](c+2)                    // repeat " c + 2 times and set to y
    }|                                 // close and add |
    |{                                 // add | and open
        M}|                            // put M and close and add |
    {y}                                // new line , 4 spaces and variable y
`                                      // end with new line.

2

Kömür , 79 bayt

Nθ≔×⁵θε≔×¹²θδ←P←====[↓⁺³ε×"δ↖P↑⁺³ε←G↑²←⁻δ²↓²=↓↓↓¹×"δ↖↑⁺⁴ε====]F⪪S «×⸿›⁺ⅈLι⁻δ² ι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

Nθ≔×⁵θε≔×¹²θδ

Havlunun boyutunu hesaplayın.

←P←====[↓⁺³ε×"δ↖P↑⁺³ε←G↑²←⁻δ²↓²=↓↓↓¹×"δ↖↑⁺⁴ε====]

Havlu çizin.

F⪪S «

İletinin her sözcüğünü gözden geçirin.

×⸿›⁺ⅈLι⁻δ² ι

Genişliği aşmadan her kelimeyi yazdırın.


Muhteşem ve meydan okumaya zaman ayırdığınız için teşekkür ederiz.
Francisco Hahn

1

V , 142 , 128 , 121 , 119 bayt

:let @h=5*@a
:let @w=12*@a-2
O[===|@wá 4á=á]
:set tw=w
Vgq@hï{+@hjI    |kf|@hjjyt=pjp+@hjkl@wr=Ùjlr|Ù@w««r"YkP0xÁ|

Çevrimiçi deneyin!


1
Bu "Hey, eğer thissen-ebilmek kurtarmak kaydedebilirsiniz n Bytes" demek isterim kod türüdür ... ama yapamam ... henüz: D.
Francisco Hahn
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.