Tôi quên ngày khăn


15

Tôi quên ngày khăn

Liên kết hộp cát

Tập lệnh PHP cho cả hai ví dụ (lỗi, định dạng chuỗi)

Sửa lỗi php script, đầu vào là tự giải thích

Tập lệnh PHP có thêm nhận xét / không ghi chú $argvđể xem các kết quả khác nhau

Như bạn có thể biết, ngày 25 tháng 5 nổi tiếng là Ngày Khăn , vì nhiều công dụng mà một chiếc khăn có thể có.

Một trích đoạn đơn giản của cuốn sách "The Hitchhiker's Guide to the Galaxy" (cá nhân tôi đã lấy cuốn sách này như một "hướng dẫn hàng ngày" ) nói:

"Một chiếc khăn là về thứ hữu ích ồ ạt nhất mà một người đi nhờ xe giữa các vì sao có thể có. Một phần nó có giá trị thực tiễn rất lớn."

Nếu bạn cần thêm thông tin về khăn, hãy kiểm tra câu trả lời SE.scifi này


Các thách thức

Hy vọng bạn sẽ làm điều này với một chiếc khăn dùng làm chăn cho chân của bạn.

Viết chương trình hoặc hàm đầy đủ bằng bất kỳ ngôn ngữ lập trình hợp lệ nào có hai đầu vào

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

Làm thế nào để vẽ một chiếc khăn với những giá trị này?

Lần đầu tiên sử dụngsize :

Vẽ một chiếc khăn tùy thuộc vào kích thước đầu vào, cho chiếc khăn của chúng tôi

  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

Thứ hai, cho nó message

Bạn phải cho nó một thông điệp, một chiếc khăn không có thông điệp đẹp được may bằng chỉ vàng là gì?

ví dụ 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

Ví dụ 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
     """"""""""""""""""""""""   #  

Tiêu chí trả lời được chấp nhận

  • Đây là codegolf nên các quy tắc thông thường được áp dụng.

Quy tắc

  • Bạn được đảm bảo rằng tất cả các chuỗi đầu vào sẽ phù hợp với kích thước, vì vậy không có đầu vào như thế nào size=1; message="This string is just tooooooooooooooooooooo long to fit the width and height of your towel".

  • Định dạng chuỗi tùy thuộc vào bạn, nếu bạn muốn định tâm các chuỗi con chẳng hạn.

  • Từ ngắt không được phép.

Chỉnh sửa

Tôi thực sự xin lỗi về bất kỳ sự nhầm lẫn nào, bởi vì khăn ansii tôi vẽ không khớp với các tham số, đã thêm một tập lệnh PHP cho cả hai ví dụ để bạn kiểm tra kết quả đầu ra dự kiến.

Cũng xin cảm ơn tất cả những người đã bỏ phiếu và xem xét thử thách đầu tiên của tôi: D.


Hãy cho tôi một vài phút để sửa nó (chỉ cần nhìn thấy điều này). Điều xảy ra là tôi đã tạo một chương trình trên php để vẽ chiếc khăn nhưng nó đơn giản hơn nhiều so với cái tôi đã trình bày, tôi có một chương trình cho các ví dụ và tôi quên sửa đổi nó.
Francisco Hahn

@Lynn đã thêm một giải pháp không mã hóa php với cả hai trường hợp thử nghiệm, xin lỗi về bất kỳ sự nhầm lẫn nào.
Francisco Hahn

Chúng ta có thể chọn nơi ngắt dòng đi?
Jakob

Nên ngắt dòng khi ý current line + next wordchí vượt quá giới hạn cho phép đối với khăn của bạn @Jakob vì tập lệnh php tôi đã đăng nó quyết định.
Francisco Hahn

chúng ta có thể lấy chiều rộng và / hoặc chiều cao văn bản thích hợp làm đối số thay vì tính toán chúng không?
JoshM

Câu trả lời:


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

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


2

JavaScript (Node.js) , 375 byte

Đây là lần gửi tồi tệ nhất mà bạn sẽ nhận được, nhưng ít nhất tôi đã thử xD một nửa byte là khoảng trắng

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

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


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

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


Giải trình :

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

Than , 79 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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

Tính kích thước của khăn.

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

Vẽ khăn.

F⪪S «

Lặp lại từng từ của tin nhắn.

×⸿›⁺ⅈLι⁻δ² ι

In từng từ mà không tràn ra chiều rộng.


Tuyệt vời, và cảm ơn bạn đã dành thời gian cho thử thách.
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Á|

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


1
Đây là loại mã tôi muốn nói "Này, nếu thisbạn có thể lưu n Bytes" .... nhưng tôi không thể ... chưa: D.
Francisco Hahn
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.