Связанный: Скорее похожая (но гораздо более простая) задача по горизонтали: там я ее исправил (с помощью ленты)
Вызов:
Для строки, содержащей только заглавные и / или строчные буквы (в зависимости от того, что вы предпочитаете) и новые строки, поместите их rope
вертикально, чтобы исправить это. Мы делаем это, проверяя разницу между двумя смежными буквами в алфавите (не обращая внимания на обтекание и только спускаясь вниз) и заполняя пространство таким количеством ROPE
/ rope
сколько нам потребуется.
ПРИМЕЧАНИЕ. Еще одно ключевое отличие между этой задачей и задачей « Там, где я исправил» (с лентой) заключается в том, что мы не тратим впустую rope
это время, как мы это сделали tape
(предложено @JonathanAllan в первой части задачи).
Пример:
Входные данные:
abc
bcd
ddd
eex
gfz
hka
imh
Вывод:
abc
bcd
Rdd
deE
efR
OPO
gEP
hRE
iOR
kO
PP
mE
R
O
P
E
R
O
P
E
R
O
x
P
z
a
E
R
O
P
E
R
h
Почему?
- Между
b
иd
в столбце 1 должно бытьc
(длина 1), поэтому мы заполняем этоR
; - Между
e
иg
в столбце 1 должно бытьf
(длина 1), поэтому мы заполняем этоO
; - Между
f
иk
в столбце 2 должно бытьghij
(длина 4), поэтому мы заполняем этоPERO
; - Между
k
иm
в столбце 2 должно бытьl
(длина 1), поэтому мы заполняем этоP
; - Между
d
иc
в столбце 3 должно бытьefghijklmnopqrstuvw
(длина 19), поэтому мы заполняем этоEROPEROPEROPEROPERO
; - Между
x
иz
в столбце 3 должно бытьy
(длина 1), поэтому мы заполняем этоP
; - Между
a
иh
в столбце 3 должно бытьbcdefg
(длина 6), поэтому мы заполним этоEROPER
.
Правила вызова:
- Разница применяется только вниз, поэтому между ними нет веревки
za
(столбец 3 в приведенном выше примере). - Можно иметь несколько одинаковых соседних букв, как
dd
(столбец 3 в примере выше). - Вы будете продолжать использовать
ROPE
один столбец за раз, чтобы не тратить впустую части (предложенный @JonathanAllan в части 1 испытания). - Вам разрешено принимать входные данные в любом разумном формате. Может быть одной строкой, строкой-массивом / списком, символьной матрицей и т. Д. Вывод имеет такую же гибкость.
- Вам разрешается использовать строчные и / или прописные буквы любым удобным для вас способом. Это относится как к входу, так и к выводу
ROPE
. - Конечные пробелы являются необязательными (обратите внимание, что правильное количество начальных пробелов является обязательным, поэтому столбцы правильные).
Любое количество конечных и / или ведущих новых строк также необязательно. - Вы можете предположить, что все тестовые случаи будут иметь одинаковую длину во всех строках, поэтому
a\naa
/[[a][a,a]]
не будет правильным вводом. - Возможно, нет
ROPE
необходимости, и в этом случае вход остается неизменным.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
As string:
Input: "abc\nbcd\nddd\neex\ngfz\nhka\nimh"
Output: "abc\nbcd\nRdd\ndeE\nefR\nOPO\ngEP\nhRE\niOR\n kO\n PP\n mE\n R\n O\n P\n E\n R\n O\n P\n E\n R\n O\n x\n P\n z\n a\n E\n R\n O\n P\n E\n R\n h"
As array-matrix:
Input: [[a,b,c],[b,c,d],[d,d,d],[e,e,x],[g,f,z],[h,k,a],[i,m,h]]
Output: [[a,b,c],[b,c,d],[R,d,d],[d,e,E],[e,f,R],[O,P,O],[g,E,P],[h,R,E],[i,O,R],[ ,k,O],[ ,P,P],[ ,m,E],[ , ,R],[ , ,O],[ , ,P],[ , ,E],[ , ,R],[ , ,O],[ , ,P],[ , ,E],[ , ,R],[ , ,O],[ , ,x],[ , ,P],[ , ,z],[ , ,a],[ , ,E],[ , ,R],[ , ,O],[ , ,P],[ , ,E],[ , ,R],[ , ,h]]
As string:
Input: "a\nz\na"
Output: "a\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nz\na"
As array-matrix:
Input: [[a],[z],[a]]
Output: [[a],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[z],[a]]
As string:
Input: "zz\nyy\nxx\nxx\ncc\ncc\nbb\nad"
Output: "zz\nyy\nxx\nxx\ncc\ncc\nbb\naR\n d"
As array-matrix:
Input: [[z,z],[y,y],[x,x],[x,x],[c,c],[c,c],[b,b],[a,d]]
Output: [[z,z],[y,y],[x,x],[x,x],[c,c],[c,c],[b,b],[a,R],[ ,d]]
As string:
Input: "a\nb\nc\nc\nx\nx\ny\nz"
Output: "a\nb\nc\nc\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nR\nO\nP\nE\nx\nx\ny\nz"
As array-matrix:
Input: [[a],[b],[c],[c],[x],[x],[y],[z]]
Output: [[a],[b],[c],[c],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[R],[O],[P],[E],[x],[x],[y],[z]]
As string:
Input: "zai\nybj\nxcq\nxcu\ncxw\ncxw\nbyr\nazw"
Output: "zai\nybj\nxcR\nxcO\ncRP\ncOE\nbPR\naEO\n Rq\n OP\n PE\n ER\n Ru\n OO\n Pw\n Ew\n Rr\n OP\n PE\n ER\n RO\n Ow\n P \n E \n x \n x \n y \n z "
As array-matrix:
Input: [[z,a,i],[y,b,j],[x,c,q],[x,c,u],[c,x,w],[c,x,w],[b,y,r],[a,z,w]]
Output: [[z,a,i],[y,b,j],[x,c,R],[x,c,O],[c,R,P],[c,O,E],[b,P,R],[a,E,O],[ ,R,q],[ ,O,P],[ ,P,E],[ ,E,R],[ ,R,u],[ ,O,O],[ ,P,w],[ ,E,w],[ ,R,r],[ ,O,P],[ ,P,E],[ ,E,R],[ ,R,O],[ ,O,w],[ ,P, ],[ ,E, ],[ ,x, ],[ ,x, ],[ ,y, ],[ ,z, ]]
As string:
Input: "asdljasdjk"
Output: "asdljasdjk"
As array-matrix:
Input: [[a,s,d,l,j,a,s,d,j,k]]
Output: [[a,s,d,l,j,a,s,d,j,k]]
As string:
Input: "asdljasdjk\nlkawdasuhq\nasjdhajksd"
Output: "asdljasdjk\nRkaOdasPhR\nOPOPEajEPO\nPEPER REP\nERERO ORE\nROROh POR\nOPOP EPq\nPEPE ROd\nERER OR \nRsRO PO \nO jP EP \nl w RE \na d Os \n P \n E \n R \n O \n u \n k "
As array-matrix:
Input: [[a,s,d,l,j,a,s,d,j,k],[l,k,a,w,d,a,s,u,h,q],[a,s,j,d,h,a,j,k,s,d]]
Output: [[a,s,d,l,j,a,s,d,j,k],[R,k,a,O,d,a,s,P,h,R],[O,P,O,P,E,a,j,E,P,O],[P,E,P,E,R, , ,R,E,P],[E,R,E,R,O, , ,O,R,E],[R,O,R,O,h, , ,P,O,R],[O,P,O,P, , , ,E,P,q],[P,E,P,E, , , ,R,O,d],[E,R,E,R, , , ,O,R, ],[R,s,R,O, , , ,P,O, ],[O, ,j,P, , , ,E,P, ],[l, , ,w, , , ,R,E, ],[a, , ,d, , , ,O,s, ],[ , , , , , , ,P, , ],[ , , , , , , ,E, , ],[ , , , , , , ,R, , ],[ , , , , , , ,O, , ],[ , , , , , , ,u, , ],[ , , , , , , ,k, , ]]
As string:
Input: "re\nop\npo\ner"
Output: "re\noR\npO\neP\n E\n R\n O\n P\n E\n R\n O\n p\n o\n P\n E\n r"
As array-matrix:
Input: [[r,e],[o,p],[p,o],[e,r]]
Output: [[r,e],[o,R],[p,O],[e,P],[ ,E],[ ,R],[ ,O],[ ,P],[ ,E],[ ,R],[ ,O],[ ,p],[ ,o],[ ,P],[ ,E],[ ,r]]
hope
? Надежда сильнее веревки. (Это плохая попытка юмора, а не реальный вопрос)tape
Задача намного проще (imho). И да, вы можете вывести массив столбцов.Ответы:
Желе , 21 байт
Попробуйте онлайн!
объяснение
-1 байт благодаря мистеру Xcoder
-2 байта благодаря Эрику Outgolfer
источник
rope
each
авто-каждую05AB1E ,
383725 байтСохранено 10 байтов с предложениями из Magic Octopus Urn и другой выходной формат, изменяющий байты.
Выводит список строк.
Нижний колонтитул симпатичные принты.
Попробуйте онлайн!
объяснение
источник
Tape
мы начали над каждый раз , когда мы должны вставить его,aTAdTAg
. Теперь с веревкой мы продолжаем, где мы остановились на веревке, так чтоaROdPEg
.pop a,b,c | push c[b..a]
type dealio?Python 2 ,
197194 байтаПопробуйте онлайн!
источник
Рубин , 119 байт
Попробуйте онлайн!
Да, это гораздо сложнее, чем задача «ЛЕНТА». Я пытался использовать свое решение для этой задачи, но в этом есть несколько дополнительных поворотов.
Принимает ввод в виде массива символов по столбцам, возвращает массив строк, также в формате по столбцам. Код в нижнем колонтитуле ссылки TIO выполняет предварительную и последующую обработку данных ввода-вывода, чтобы мы могли предоставить более управляемую строку и затем красиво распечатать результат.
объяснение
Код делает два прохода через входной массив.
В первом проходе мы применяем
reduce
операцию, которая заполняет пространство между символами требуемым количеством ВЕРЕВКИ (y.ord-x[-1].ord-1
символы, если положительные). Нам также нужно отслеживать используемую ROPE length (l
).В отличие от случая TAPE, мы не можем просто использовать
rjust
для заполнения, так как он всегда начинается с символа R. Вместо этого взятие правильного фрагмента длинной строки «ROPEROPE ...» кажется меньшим при подсчете байтов, тем более что нам также нужно обновлятьl
на лету.Во втором проходе мы выравниваем по левому краю получающиеся строки с пробелами, чтобы соответствовать длине самой длинной из них. Поскольку нам нужны полные результаты предыдущей итерации, первый проход изменяет массив на месте (следовательно
map!
, нетmap
).источник
-1 байт благодаря Кевину Круйссену
-70 байт благодаря Джонатану Фреу , вау .......
Python 3 , 203 байта
Попробуйте онлайн!
источник
ord(t)-ord(p)-1
можноord(t)+~ord(p)
сохранить байт снова. ;) Вот соответствующий совет.+=[o]
->+=o,
.p!=' '
это также эквивалентноp>' '
.Python 3 , 182 байта
Попробуйте онлайн!
Функция принимает входные данные в виде списка (или итерируемого) строк, а также возвращает генератор для последовательности строк, что почти так же хорошо, как список.
Ungolfed
… Для лучшей читаемости вложенных генераторов.
объяснение
Функция использует
zip
для преобразования входящего списка строк в генератор столбцов.Самый внутренний генератор смотрит на пары соседних символов и…
… Вырезает необходимое количество непрерывной ВЕРЕВКИ из (бесконечного)
cycle
генератора.После большого количества строк, соединяющих генераторы, функция переставляет список столбцов обратно в генератор или строки и заполняет отсутствующие записи
zip_longest
.источник
Stax , 25 байт
Запускать и отлаживать онлайн!
Вход и выход представлены в виде разделенных пробелами списков. Ввод - это список строк по мере необходимости, вывод - это список столбцов, если это разрешено.
объяснение
Использует распакованную версию для объяснения.
источник