Большая, Лучшая (Сломанная) Молния


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-indexed)


bэто количество отверстий в моей молнии. Чтобы создать отверстие в молнии, мы снова разбиваем строку на некоторое расстояние.

Начиная с индексом , например , отверстие , как hмы увеличиваем интервал h-1в одном пространстве, h3 пространства и 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, Concetetur 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

РЕДАКТИРОВАТЬ: добавлены тестовые случаи

"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

Я могу попробовать: P
MysticVagabond

понятнее? @TheLethalCoder
MysticVagabond

Привет! Я удалил тег printable-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
Titus

Ваш ответ размещает отверстие слишком близко к почтовому
индексу,

Добавлены пробелы @Xynos
Титус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.