Я забув рушник день


15

Я забув рушник день

Посилання в пісочниці

PHP-скрипт для обох прикладів (помилка, форматування рядка)

Виправлений скрипт на php, введення не пояснює

PHP-скрипт із більшою кількістю вхідних коментарів / коментарів, $argvщоб побачити різні результати

Як ви, можливо, знаєте, 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
     """"""""""""""""""""""""   #  

Прийняті критерії відповіді

  • Це кодовий гольф, тому застосовуються звичайні правила.

Правила

  • Вам гарантовано, що всі вхідні рядки відповідатимуть розміру, тому жоден вхід не подобається size=1; message="This string is just tooooooooooooooooooooo long to fit the width and height of your towel".

  • Формат рядка залежить від вас, якщо ви хочете, наприклад, центрувати підрядки.

  • Розриви слів заборонені.

Правки

Мені справді шкода за будь-яку плутанину, оскільки рушники, які я малював, не відповідали параметрам, додали сценарій PHP для обох прикладів для перевірки очікуваних результатів.

Також дякую всім людям, які проголосували і вважали моїм першим викликом: D.


Дайте мені кілька хвилин, щоб виправити це (щойно це побачив). Сталося те, що я зробив програму на php намалювати рушник, але це було набагато простіше, ніж той, який я представив, у мене була програма для прикладів, і я забув її змінити.
Франсіско Ган

@Lynn додав php нерозбірливе рішення в обох тестових випадках, вибачте за будь-яку плутанину.
Франсіско Хан

Чи можемо ми вибрати, куди йдуть перерви лінії?
Якоб

Розрив рядка слід додати, коли current line + next wordволя перевищить ліміт дозволеного для вашого рушника @Jakob, оскільки вирішив, що я розмістив його в скрипті php.
Франсіско Ган

чи можемо ми взяти відповідну ширину тексту та / або висоту як аргументи замість обчислення їх?
JoshM

Відповіді:



2

JavaScript (Node.js) , 375 байт

Це найгірше подання, яке ви отримаєте, але, принаймні, я спробував xD половина байтів - це пробіли

(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) , 347 345 343 337 334 328 326 байт

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ι⁻δ² ι

Роздрукуйте кожне слово, не переповнюючи ширину.


Чудово, і дякую вам, що знайшли свій час на виклик.
Франсіско Хан

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.