Акростих это стиль стихотворения / записи , где начальный символ каждой строки, при чтении по вертикали, а также производит слово или сообщение. Например,
Together
Everyone
Achieves
More
также расшифровывает слово, TEAM
когда первый столбец читается по вертикали.
Акростика - это подмножество мезостыков , где вертикальное слово может быть где угодно в горизонтальных словах. Например, TEAM
вышеприведенное можно также записать в виде мезостики следующим образом
togeTher
everyonE
Achieves
More
наряду с несколькими другими вариантами.
Задача здесь будет состоять в том, чтобы создать акростик или мезостик из заданного списка входных слов.
вход
- Список слов в любом подходящем формате .
- Список будет содержать только слова из строчных букв
[a-z]
. - Список гарантированно формирует акростих или мезостику (не нужно обрабатывать фиктивные данные).
- Одно из входных слов образует вертикальное слово, в то время как остальные составляют горизонтальные слова - часть задачи здесь состоит в том, чтобы найти подходящее вертикальное слово, поэтому его нельзя использовать отдельно.
Выход
- ASCII-арт акростик или мезостик, сформированный из входных слов, записанных в STDOUT или возвращенных в любом разумном формате.
- Соответствующее вертикальное слово должно быть написано заглавными (как в примерах).
- Ведущие пространства , чтобы получить вертикальное слово выстраиваться соответствующим образом будут необходимы . Конечные пробелы и начальные / конечные переводы строк являются необязательными. Лишние пробелы также хороши, если слова выровнены правильно.
- Если возможны как акростик, так и мезостим, выведите только акростик .
- Если возможно более одного acrostic / mesostic, ваш код может вывести любой или все из них.
правила
- Допустимы либо полная программа, либо функция.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Примеры
['together', 'team', 'everyone', 'achieves', 'more']
Together
Everyone
Achieves
More
['aaa', 'aaa', 'aaa', 'aaa']
Aaa
Aaa
Aaa
# One output, or multiple (of the same) output is allowed
['aaa', 'aaa', 'aab', 'baa']
Aaa
Aaa
Baa
# This is the only allowed output, since others would be mesostic, which are lower priority
['live', 'every', 'love', 'very', 'ohio']
Live
Ohio
Very
Every
# Note that 'live' couldn't be the vertical word since then it would be a mesostic, which is lower priority output
['cow', 'of', 'fox']
cOw
Fox
# A shorter mesostic test case
['late', 'ballroom', 'anvil', 'to', 'head']
anviL
bAllroom
To
hEad
Ответы:
Pyth,
52494746 байтПопробуйте онлайн.
Это, вероятно, очень играбельно. Он печатает кучу ведущих пробелов.
источник
Брахилог , 145 байт
Попробуйте онлайн!
(Занимает полминуты, так что наберитесь терпения.)
источник
JavaScript (ES6), 255
263 269 286Редактировать 17 байтов, сохраненных как произвольное количество начальных пробелов, разрешено
Edit2, некоторые тасования, 6 байтов сохранены.
Edit3 возвращает список строк вместо одной строки с символами новой строки (комментарий OP к ответу feersum), еще 8 байтов сохранены.
Для каждого слова в списке ввода я использую рекурсивную DFS, чтобы найти все возможные мезостики / акростики. Каждый из них хранится в виде массива со словом и позицией целевой буквы внутри слова. Каждый найденный результат сохраняется в глобальном массиве результатов в позиции 1 (если это акростик) или в 0, если это мезостик.
После полного сканирования всех слов я получаю результат на последней позиции в массиве и собираю и возвращаю его представление ascii art.
Меньше гольфа
Тест
источник
Perl6,
287277269 байтисточник
Mathematica 10,0, 139 байт
Безымянная функция, возвращающая список строк:
Пример использования:
Я ищу предложения о лучших способах сделать капитализацию.Я нашел очень хорошую функциюMapAt
для заглавной буквы в строке.источник
Haskell,
214206204202 байтаВозвращает список строк с пробелами, например,
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
или более удобный для отображения:f
выбирает слова, которые написаны по горизонтали вместе со списком смещений.h
вставляет каждое слово в соответствии с соответствующим смещением и вставляет заглавную букву. В деталях:источник
Python, 249 байт
Вероятно, все еще очень пригодный для игры в гольф
Принимает и возвращает список списка символов.
- например,
" bAllroom"
это[' ',' ',' ','b','A','l','l','r','o','o','m']
Только когда-либо возвращает первый результат и проверяет в таком порядке, что все акростики проверяются в первую очередь.
Посмотреть все контрольные примеры, напечатанные в формате дисплея на ideone
Вот более читаемая функциональная форма, которая делает то же самое (за исключением того, что она возвращает первый результат немедленно, а не оценивает и затем возвращает первый результат):
источник
Perl 6, 177 байт
Решение для перебора.
Как это работает
Каждый кандидат выглядит так:
Транспонирование списка списков кандидатов необходимо, чтобы гарантировать, что акростих, если он существует, найден до любой мезостики.
источник