Saya lupa hari handuk

15

Saya lupa hari handuk

Tautan kotak pasir

Script PHP untuk kedua contoh (kesalahan, memformat string)

Script php terkoreksi, input jelas

Script PHP dengan lebih banyak input komentar / tanda komentar $argvuntuk melihat hasil yang berbeda

Seperti yang Anda ketahui, 25 Mei dikenal sebagai Hari Handuk , karena banyak penggunaan handuk.

Sebuah ekstrak sederhana dari buku "The Hitchhiker's Guide to the Galaxy" (secara pribadi saya menganggap buku ini sebagai "panduan sehari-hari" ) menyatakan:

"Handuk adalah benda paling berguna yang dapat dimiliki oleh seorang penumpang antar bintang. Sebagian dari itu memiliki nilai praktis yang bagus."

Jika Anda memerlukan informasi lebih lanjut tentang handuk, periksa jawaban SE.scifi ini


Tantangan

Semoga Anda akan melakukan ini dengan handuk yang digunakan sebagai selimut untuk kaki Anda.

Tulis program atau fungsi lengkap dalam bahasa pemrograman yang valid yang membutuhkan dua input

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

Bagaimana cara menggambar handuk dengan nilai-nilai ini?

Pertama menggunakansize :

Gambar handuk tergantung pada input ukuran, untuk handuk kami

  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

Kedua, berikan itu message

Anda harus memberi pesan, apakah handuk tanpa pesan indah yang dijahit dengan benang emas?

Contoh 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

Contoh 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
     """"""""""""""""""""""""   #  

Kriteria jawaban yang diterima

  • Ini codegolf sehingga aturan normal berlaku.

Aturan

  • Anda dijamin bahwa semua string input akan sesuai dengan ukuran, jadi tidak ada input yang suka size=1; message="This string is just tooooooooooooooooooooo long to fit the width and height of your towel".

  • Format string terserah Anda, jika Anda ingin memusatkan substring misalnya.

  • Istirahat kata tidak diizinkan.

Suntingan

Saya benar-benar minta maaf atas kebingungan apa pun, karena handuk ansii yang saya gambar tidak cocok dengan parameter, menambahkan skrip PHP untuk kedua contoh bagi Anda untuk memeriksa hasil yang diharapkan.

Juga terima kasih kepada semua orang yang memilih dan mempertimbangkan tantangan pertama saya: D.

Francisco Hahn
sumber
Beri saya beberapa menit untuk memperbaikinya (baru saja melihat ini). Apa yang terjadi adalah saya membuat program di php untuk menggambar handuk tapi itu jauh lebih sederhana daripada yang saya presentasikan, saya punya program untuk contoh dan saya lupa untuk memodifikasinya.
Francisco Hahn
@ Lynn menambahkan solusi php ungolfed dengan kedua kasus uji, maaf tentang kebingungan.
Francisco Hahn
Bisakah kita memilih ke mana garis putus?
Jakob
Istirahat baris harus ditambahkan ketika current line + next wordakan melebihi batas yang diizinkan untuk handuk Anda @ Jakob sebagai naskah php yang saya posting memutuskan.
Francisco Hahn
dapatkah kita menggunakan lebar dan / atau tinggi teks yang sesuai sebagai argumen alih-alih menghitungnya?
JoshM

Jawaban:

4

Python 2 , 223 210 209 204 byte

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

Cobalah online!

TFeld
sumber
2

JavaScript (Node.js) , 375 byte

Ini adalah pengiriman terburuk yang akan Anda dapatkan, tetapi setidaknya saya mencoba xD setengah dari byte meskipun spasi

(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}
`

Cobalah online!

Luis felipe De jesus Munoz
sumber
2

JavaScript (Node.js) , 347 345 343 337 334 328 326 byte

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

Cobalah online!


Penjelasan:

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.
Muhammad Salman
sumber
2

Arang , 79 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

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

Hitung ukuran handuk.

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

Gambar handuknya.

F⪪S «

Ulangi setiap kata pesan.

×⸿›⁺ⅈLι⁻δ² ι

Cetak setiap kata tanpa melebihi lebarnya.

Neil
sumber
Luar biasa, dan terima kasih telah meluangkan waktu untuk tantangan ini.
Francisco Hahn
1

V , 142 , 128 , 121 , 119 byte

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

Cobalah online!

JoshM
sumber
1
Ini adalah jenis kode yang saya ingin katakan "Hei, jika thisAnda bisa menyelamatkan n Bytes" .... tetapi saya tidak bisa ... belum: D.
Francisco Hahn