Для целей нынешнего испытания «очертить» слово означает последовательно окружить его собственными буквами, начиная с последней, и, наконец, заменить оригинальное слово в центре пробелами:
oooooo
onnnno
on -> on no
onnnno
oooooo
Задача:
Учитывая список слов, состоящий только из строчных и / или прописных английских букв, обведите каждое слово и отобразите все полученные блоки рядом друг с другом по горизонтали, разделив их столбцом из одного пробела, вертикально выровненным по центрам блоков.
Вы можете написать полную программу или функцию.
Входные данные:
Список слов или, если хотите, строка с пробелами или другими символами
Выход:
ASCII-представление блоков для выделенных слов. Ведущие / конечные пробелы разрешены.
Тестовые случаи:
Input 1: ["code", "golf"] (or "code golf")
Output 1:
cccccccccccc gggggggggggg
cooooooooooc goooooooooog
coddddddddoc gollllllllog
codeeeeeedoc golfffffflog
code edoc golf flog
codeeeeeedoc golfffffflog
coddddddddoc gollllllllog
cooooooooooc goooooooooog
cccccccccccc gggggggggggg
Input 2: ["I", "am", "just", "a", "man"] (or "I am just a man")
Output 2:
jjjjjjjjjjjj
juuuuuuuuuuj mmmmmmmmm
aaaaaa jussssssssuj maaaaaaam
III ammmma justtttttsuj aaa mannnnnam
I I am ma just tsuj a a man nam
III ammmma justtttttsuj aaa mannnnnam
aaaaaa jussssssssuj maaaaaaam
juuuuuuuuuuj mmmmmmmmm
jjjjjjjjjjjj
Критерии победы:
Самый короткий код в байтах на каждом языке выигрывает. Я буду очень признателен, если вы прокомментируете / объясните свой код и подход.
Ответы:
Холст ,
2220 байтовПопробуй это здесь!
Объяснение:
источник
Древесный уголь , 35 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Цикл по списку ввода.
Получить длину текущего слова.
Переместитесь в верхний левый угол получившегося контура.
Цикл один раз для каждого персонажа.
Нарисуйте прямоугольник соответствующей высоты, ширины и характера.
Переместитесь в верхний левый угол следующего поля.
Перейти к следующему плану.
источник
Haskell ,
188183174171167 байт-9-13 байтов благодаря Лайкони .Попробуйте онлайн!
источник
\a->and[p a>=p x|x<-f<$>w]
может быть\a->all((p a>=).p)$f<$>w
иk c=(++[c]).(c:)
может бытьk c s=c:s++[c]
.Pyth,
3433 байтаПопробуйте онлайн.
Удаляет целую кучу лишних пробелов, но это разрешено задачей.
объяснение
m
…Q
Выполняет следующие действия для каждого словаd
во входных данныхQ
:m\ d
сопоставляет слово сx => " "
, по существу, создавая список[" ", ..., " "]
с таким количеством элементов, сколько у слова есть буквы..idd
чередует слово с собой, повторяя буквы слова дважды._
переворачивает эту строку.word
становитсяddrrooww
.u
начинается сG
= массива пробелов и применяется следующее с каждой буквой в чередующейся строке вH
:*2H
повторяет персонаж дважды.jR
…G
Помещает каждую строкуG
между парой символов.C
меняет строки и столбцы. Когда эти три шага выполняются дважды с одним и тем же символомH
, это очерчивает линииG
с этим символом.d
.+;
добавляет пробел столбецs
выравнивает массив столбцов для каждого слова иJ
сохраняет его в переменнойJ
.m
…J
Выполняет следующие действия для каждого столбца выходных данных:.[lJd;
дополняет обе стороны столбца пробелами, чтобы длина столбца была равна количеству столбцов. Этого всегда достаточно для заполнения столбцов по вертикали.C
превращает столбцы в строки иj
объединяет строки с символами новой строки.Альтернативное решение, 33 байта
Попробуйте онлайн.
Обратите внимание, что есть пробел. В основном тот же алгоритм, за исключением только столбцов площадок сверху и затем транспонирования с заполнением пробела.
источник
R 189 байт
Попробуйте онлайн!
Сотрудничество между DigEmAll и мной в чате .
источник
APL (Dyalog Classic) ,
575150 байтПопробуйте онлайн!
источник
Stax ,
2625 байтЗапустите и отладьте его
источник
05AB1E , 46 байтов
Не слишком рад этому, но я рад, что это работает.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник