Більша, краща (зламана) блискавка


9

(Натхненний цим викликом досить сильно )

У оригінальному виклику ви повинні були зробити горизонтальну блискавку, проте, дивлячись на мій балахон, моя блискавка набагато вертикальніше (і трохи зламана): P

Вхідні дані

Вам буде надано один рядок ( s) і пару цілих чисел ( aі b) у будь-якому форматі. Де:

a < (length-of-s / 2)

b <= ((length-of-s / 2) - (a + 1)) / 6

Вихідні дані та оцінка

Ваша програма може бути повноцінною програмою або функцією, яка виробляє одну рядок з правильним форматуванням або масивом (один елемент на рядок), який ви обрали. Провідні та кінцеві пробіли та нові рядки необов’язкові до тих пір, поки символи вихідного рядка будуть у всіх рядках. напр.

["f     r"],["u     e"],["l     p"],["l     p"],["y     i"],[" o   z "],["  p n  "],["   e   "]

або

"f     r\nu     e\nl     p\nl     p\ny     i\n o   z \n  p n  \n   e   "

є прийнятними виходами для тестового випадку 1

Стандартні лазівки заборонені, і найкоротший код у байтах виграє. Будь-яка відповідь без пояснень не зможе перемогти.

Пояснення

Щоб зробити блискавку, потрібно спочатку видалити будь-які пробіли чи символи нового рядка з рядка. А потім складіть його навпіл так (див. Тестовий випадок 1 більше)

abcde fgh ij klmnopqr стає двома нитками внизу, зауважте, друга половина перевернута.

abcdefghi і rqponmlkj

Потім, починаючи з початку кожного рядка, розміщуємо один і той же індексований символ з кожної підрядки на один рядок з проміжком, визначеним наступним чином:

[0] a     r -- (a-3) five spaces
[1]  b   q  -- (a-2) three spaces
[2]   c p   -- (a-1) one space
[3]    d    -- (a)
[4]    o
[5]    e
[6]    n
etc...

Це робить основу для нашої блискавки. Тепер цілі числа aі b.

aє місцезнаходження нашого поштового індексу. Щоб визначити, де знаходиться блискавка, ми використовуємо індекс наших вихідних ліній як точку, щоб закрити наш блискавку. наприклад, квадрат, накреслений [3]у моєму вище прикладі, - там, де знаходиться блискавка.

Перш ніж блискавка ближче до кінця, вищевказана блискавка повинна залишатися на відстані п'яти просторів, поки вона не досягне місця, a-2де вона закриється до 3-х просторів і a-1де вона закриється на 1 простір. Щоб було зрозуміло, у наведеному вище прикладі a = 3(0-індексується)


b- кількість отворів у моїй блискавці. Щоб створити отвір в блискавці, ми знову розділили рядок з деяким проміжком.

Починаючи з індексу прикладу отвору, коли hми збільшуємо відстань h-1до одного простору, hдо 3 пробілів і h+1назад до одного простору, залишаючи h-2і h+2лише з одним символом на рядок, оскільки вони рахуються як частина лунки.

Після блискавки та між кожним із отворів повинен бути проміжок одного символу, щоб наш блискавка виглядав повністю пов'язаним між отворами.

Ви можете вибрати індекси отворів, але всі вони повинні бути присутніми в "закритому" розділі блискавки.

Again using 'abcdefghi' and 'rqponmlkj'

[0] a     r -- (open)
[1]  b   q  -- (closing)
[2]   c p   -- (closing)
[3]    d    -- zip 
[4]    o    -- gap
[5]    e    -- start of hole  (h-2)
[6]   n f   -- one space      (h-1)
[7]  m   g  -- three spaces   (hole h)
[8]   l h   -- one space      (h+1)
[9]    k    -- end of hole    (h+2)
[10]   i    -- gap
[11]   j

Я сподіваюся, що все має сенс, якщо не спитати. В очікуванні питань ви можете помітити, що символ pу моєму другому прикладі присутній у другому підрядку, однак, з’являється на початку його рядка, це призначено, ви повинні слідувати послідовності 1-2-1-2- 1–2, приймаючи персонаж від кожної половини по черзі незалежно від його положення у виході.

Випробування

"fully open zipper", 7, 0                     | "fully closed zipper", 0, 0
fullyope reppizn                              | fullyclos reppizde
                                              |
f     r   *Note: i particularly like this     | f
u     e     example as it shows the reversing | r
l     p     of the second half of the string  | u
l     p     causes the words to wrap from top | e
y     i     left to the  bottom and back up   | l
 o   z      the right side                    | p
  p n                                         | l
   e                                          | p
                                              | y
                                              | i
                                              | c
                                              | z
                                              | l
                                              | d
                                              | o
                                              | e
                                              | s
  • Колонка 1: "тупо довга непорушена блискавка, яка не повинна існувати на будь-якому пристойному балахоні", 24, 0
  • Колонка 2: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris faucibus molestie mi. Aliquam nec fringilla ipsum", 15, 5

:

s     e          |          L     m
t     i          |          o     u
u     d          |          r     s
p     o          |          e     p
i     o          |          m     i
d     h          |          i     a
l     t          |          p     l
y     n          |          s     l
l     e          |          u     i
o     c          |          m     g
n     e          |          d     n
g     d          |          o     i
u     y          |          l     r
n     n          |           o   f
b     a          |            r c
r     n          |             s
o     o          |             e
k     t          |             i
e     s          |            n t
n     i          |           m   a
z     x          |            a m
i     e          |             u
 p   t           |             e
  p n            |             q
   e             |             t
   d             |             i
   r             |             ,
   l             |            l c
   t             |           A   o
   u             |            . n
   h             |             i
   o             |             s
   a             |             m
   h             |            e e
   t             |           c   i
   s             |            t t
                 |             e
                 |             s
                 |             t
                 |             s
                 |             u
                 |             l
                 |             r
                 |             o
                 |             a
                 |             m
                 |             d
                 |             s
                 |             i
                 |             u
                 |             p
                 |            b i
                 |           i   s
                 |            c c
                 |             u
                 |             i
                 |             a
                 |             n
                 |             f
                 |             g
                 |             s
                 |             e
                 |             i
                 |            l r
                 |           i   u
                 |            t a
                 |             .
                 |             M

EDIT: Додано тестові випадки

"abcde fgh ij klmnopqr","3","1"

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j

1
Я думаю, що мені подобається цей виклик, але я його читав три рази, і я все ще не на 100% в тому, що саме я повинен робити. Я думаю, що варто було б зробити правила та характеристики коротшими та зрозумілішими, а не повними абзацами.
TheLethalCoder

Я можу
сказати

ясніше? @TheLethalCoder
MysticVagabond

Привіт, я видалив тег для друку-ascii , оскільки він використовується для викликів з обмеженим джерелом, а не макета виводу.
AdmBorkBork

Я побачив, що завдяки @AdmBorkBork я знову відредагував алфавіт, щоб пояснити, щоб зрозуміти, звідки беруться персонажі.
MysticVagabond

Відповіді:


1

PHP 7.1, 421 412 218 195 192 191 195 байт

for([,$s,$a,$b]=$argv;$i-$k<strlen($s=strtr($s,[" "=>""]));$p=0)for($t=++$y>$a-2?$y>=$a?$y>$a?$b-->0?_4_4_4_31_23_31:_4:_31:_23:_15;$c=$t[$p++];)echo$c<_?str_pad("",$c).$s[++$f&1?$i++:$k-=1]:"
";

Запустіть -nrабо спробуйте в Інтернеті .
Друкує провідну, але без кінцевої нової лінії та один провідний пробіл у кожному рядку.


TIO дає мені цю помилку:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos Встановіть версію PHP на 7.1
Тит

Ваша відповідь розміщує отвір занадто близько до блискавки, неправильно додайте правильний висновок для ваших даних як тестовий випадок :)
MysticVagabond

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