나는 수건 날을 잊었다


15

나는 수건 날을 잊었다

샌드 박스 링크

두 예제 모두에 대한 PHP 스크립트 (오류, 문자열 형식화)

PHP 스크립트 수정, 입력은 자명하다

더 많은 입력 주석 / 주석 처리 $argv가없는 PHP 스크립트는 다른 결과를 볼 수 있습니다

아시다시피, 5 월 25 일은 수건으로 사용할 수있는 많은 용도 때문에 수건의 날로 잘 알려져 있습니다.

"히치하이커를 향한 히치하이커를위한 안내서" (개인적으로 나는이 책을 "매일의 안내서"라고했다 ) 의 간단한 발췌문 :

"타올은 성간 히치하이커가 가질 수있는 가장 유용한 것 중 하나입니다. 부분적으로 큰 가치가 있습니다."

수건에 대한 자세한 정보가 필요 하면 SE.scifi 답변을 확인하십시오.


도전

다리 담요로 사용되는 수건으로이 작업을 수행 할 수 있기를 바랍니다.

두 가지 입력이 필요한 유효한 프로그래밍 언어로 전체 프로그램 또는 기능 작성

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

이 값으로 수건을 그리는 방법은 무엇입니까?

먼저 사용size :

크기 입력에 따라 수건을 그립니다 우리의 수건

  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

둘째로, message

당신은 메시지를 주어야합니다 . 아름다운 메시지가없는 수건은 황금 실로 꿰매어 있습니까?

실시 예 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

실시 예 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
     """"""""""""""""""""""""   #  

허용되는 답변 기준

  • 이것은 codegolf 이므로 일반적인 규칙이 적용됩니다.

규칙

  • 모든 입력 문자열이 크기에 맞는지 확인하므로 같은 입력은 없습니다 size=1; message="This string is just tooooooooooooooooooooo long to fit the width and height of your towel".

  • 예를 들어 하위 문자열을 가운데에 배치하려는 경우 문자열 형식은 사용자에게 달려 있습니다.

  • 단어 나누기 가 허용되지 않습니다.

편집

내가 그리는 ansii 타월이 매개 변수와 일치하지 않아서 예상되는 출력을 확인하기 위해 두 예제 모두 에 대해 PHP 스크립트를 추가했기 때문에 혼란에 대해 정말 죄송합니다 .

또한 투표를하고 나의 첫 번째 도전을 고려한 모든 사람들에게 감사합니다 : D.


문제를 해결하기 위해 몇 분만 기다려주세요. 무슨 일이 있 었는가 수건으로 그릴 PHP에서 프로그램을 만들었지 만, 내가 제시 한 것보다 훨씬 간단했습니다. 예제에 대한 프로그램이 있었고 수정하는 것을 잊었습니다.
Francisco Hahn

@Lynn은 두 가지 테스트 사례 모두에 PHP ungolfed 솔루션을 추가했습니다.
Francisco Hahn

줄 바꿈 위치를 선택할 수 있습니까?
Jakob

줄 바꿈은 current line + next word내가 게시 한 PHP 스크립트가 결정하는 것처럼 수건 @Jakob에 허용 된 한계를 초과 할 때 추가해야합니다 .
Francisco Hahn

적절한 텍스트 너비 및 / 또는 높이를 계산하는 대신 인수로 사용할 수 있습니까?
JoshM

답변:



2

자바 스크립트 (Node.js) 375 바이트

이것은 당신이 얻을 최악의 제출이지만, 적어도 바이트의 절반은 공백입니다.

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

온라인으로 사용해보십시오!


2

JavaScript (Node.js) , 347345 343 337334328326 바이트

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

온라인으로 사용해보십시오!


설명 :

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

, 79 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

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

수건의 크기를 계산하십시오.

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

수건을 그립니다.

F⪪S «

메시지의 각 단어를 반복합니다.

×⸿›⁺ⅈLι⁻δ² ι

너비를 넘치지 않고 각 단어를 인쇄하십시오.


놀랍고 도전에 시간을 내 주셔서 감사합니다.
Francisco Hahn

1

V , 142 , 128 , 121 , 119 바이트

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

온라인으로 사용해보십시오!


1
이것은 "이봐, 만약 당신이 this저장하면 할 수 있다"라고 말하고 싶은 코드의 종류이다 n Bytes. 그러나 나는 할 수 없다.
Francisco Hahn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.