Многие люди на этом сайте используют эзотерические языки , и, поскольку эти языки необычны и трудны для понимания, они часто пишут объяснения в определенном формате. Например, если код
abcdefghijklmnop
И эти языки используют #
для комментариев, они написали бы объяснение так:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Я тоже часто это делаю, но каждый раз, когда я делаю это, я чувствую, что создание макета текста действительно неприятно и отнимает много времени. Поэтому я хочу, чтобы вы создали для меня «Esolang-Comment-Template-Generator». Например, если мы игнорируем комментарии, предыдущий код имеет этот шаблон:
a #
bc #
d #
e #
fgh #
ij #
k #
l #
mn #
op #
Соревнование:
Вы должны написать программу или функцию, которая принимает в качестве входных данных две строки и выводит этот «Esolang-Comment-Template». Первым вводом будет код, но со штрихами ( |
), вставленными туда, куда идут новые строки. Второй вход - то, что мы будем использовать для комментариев. Так что наш последний пример будет иметь это для ввода:
"a|bc|d|e|fgh|ij|k|l|mn|op", "#"
К сожалению, это исключает использование баров как часть ввода кода, но это нормально. Вы можете предположить, что ввод комментария будет одним символом. Ради простоты, символ комментария не будет панелью. Введенный код будет содержать только печатный ASCII и не будет содержать никаких новых строк.
Надеюсь, вы можете сделать вывод, что делать из тестовых случаев, но я постараюсь прояснить некоторые вещи.
Вы должны разделить ввод кода на «секции кода» на каждой панели. Затем каждая часть кода выводится в отдельной строке и дополняется слева до длины всего предыдущего кода (не считая столбцов). Затем каждая строка дополняется справа пробелами, чтобы последние два символа в каждой строке были «Один дополнительный пробел» + «Символ комментария».
Один завершающий перевод строки разрешен.
Вот еще один пример. Для ввода
"Hello|World", "/"
Первый раздел кода является «Hello» , а второй «Мир». Таким образом, он должен дать вывод:
Hello /
World /
Вот еще несколько примеров:
Input:
"a|b|c|d|e|f|g", ","
Output:
a ,
b ,
c ,
d ,
e ,
f ,
g ,
Input:
"abcdefg", ":"
Output:
abcdefg :
Input:
"4|8|15|16|23|42", "%"
Output:
4 %
8 %
15 %
16 %
23 %
42 %
Input:
"E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!"
Output:
E !
ac !
h s !
ecti !
on is !
one c !
haracte !
r longer !
than the !
last! !
Input:
"This|Code|has||empty||sections", "@"
Output:
This @
Code @
has @
@
empty @
@
sections @
Правила:
Вы можете использовать эти входы и выходы в любом разумном формате. Например, чтение / запись файла, STDIN / STOUT, аргументы функции / возвращаемое значение и т. Д. Как обычно, это код-гольф , поэтому постарайтесь сделать свой код максимально коротким, и вы выиграете, если сможете найти самое короткое решение на вашем языке! Я также выберу самое короткое решение в качестве победителя. Стандартные лазейки запрещены.
|
персонажа, был бы|
)?Ответы:
Pyth -
28272423 байтаМожет быть в состоянии немного поиграть в гольф.Видимо, очень много!Попробуйте это онлайн здесь .
источник
Сетчатка ,
3534 байтаЧисло байтов предполагает кодировку ISO 8859-1.
Две входные строки разделены пробелом (что однозначно, так как мы знаем, что разделитель комментариев всегда является одним символом).
Попробуйте онлайн!
источник
Java 10,
189159 байт-30 байт для преобразования Java 7 в Java 10 и оптимизации циклов.
Попробуйте онлайн.
Объяснение:
источник
Пайк,
312824 байтаПопробуй это здесь!
источник
JavaScript (ES6), 92 байта
источник
GNU sed (85 + 1 для -r) 86
Входные данные представляют собой строки, разделенные пробелом.
Тесты:
input.txt:
Выход:
источник
:
- это особенность / ошибка GNU sed, и\S
я думаю, что это расширение, так что, возможно, заголовок должен бытьGNU sed
. Кроме этого, отличный код.Haskell,
139135 байтовСохранено 4 байта путем вставки определения.
Ungolfed:
источник
Groovy,
120113111 байтungolfed *
(Первый проект с 120 байтами)
ungolfed *
тесты
источник
.padRight(s.replace('|','').size()+1)+c)
Python 2,
125 124132 байта-1 байт благодаря @TuukkaX (не хватало места для игры в гольф
i, v
)Все тестовые случаи на ideone
источник
c
в качестве комментария символ, а не#
.Python 2,
10710510299 байтПротестировано со всеми тестовыми примерами выше
РЕДАКТИРОВАТЬ Отбросил 2 байта, изменив d = a.split ("|"); i = 0 на d, i = a.split ("|"), 0 Не уверен, как я пропустил этот. Спасибо @ Оливер Ни
Еще 3 байта прошло. Еще раз спасибо.
Предложение от @Jonathan на самом деле экономит 3 байта и сводит его к волшебству 99. Спасибо.
источник
" "*i
чтобы получить 2 байтаlen(e)
хотелfor e in d:z=len(e)....
сохранить байт , поскольку он используется дважды05AB1E ,
29383129 байтМожно определенно играть в гольф, но, по крайней мере, сейчас он работает ..
+9 байт, потому что
¡
(split) автоматически удаляет пустые элементы, поэтому мне пришлось добавить'|„ǝʒ:'ǝ¡'ʒм
..-2 байта благодаря @MagicOctopusUrn , изменив
'|„ǝʒ:'ǝ¡'ʒм
на'|¶:.BεðÜ}
(текущее решение не работает на элементы с конечными пробелами, но я предположил, что это разрешено в соответствии с тестовыми примерами).Попробуйте онлайн.
Объяснение:
источник
ǝʒ
.'|¶:.B
может работать'|¶:.B
?.B
второй раз после добавления в предшествующие пробелы..B
уже существующего.'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,
? 29 байт. Вернемся к итерации 1 :)..B
разбивает на новые строки, это особенность, о которой мало кто знает. Это единственный способ сохранить пустые элементы. Я бы попросил это как особенность..¡
должно означать разделение, но держать пустые элементы ..PowerShell v2 +,
10399 байтПринимает входные данные в виде двух строк,
-split
s первой в буквальном канале (поскольку split использует синтаксис regex), и передает элементы в цикл|%{...}
.На каждой итерации мы создаем строку как число пробелов, определенных как
$l
сцепленные с текущим элементом. Для первого цикла$l
инициализируется значением$null
, которое здесь оценивается как0
.Эта строка далее объединяется с другим количеством пробелов (определяемых тем, как долго
$a
будет, если мы будем делать-replace
каждый канал пустым, плюс1
для дополнительного заполнения между кодом и комментариями, минус.length
текущий элемент, минус$l
число пробелов, которое мы дополнили оставил на этой итерации), соединенный с нашим комментарием персонажа$b
. Это осталось на конвейере.Затем мы обновляем
$l
для следующей итерации.Результирующие строки все остаются в конвейере, и вывод через неявный
Write-Output
происходит при выполнении программы, с новой строкой между ними по умолчанию.Примеры
источник
Vim,
3938 нажатий клавиш-1 байт благодаря DJMcMayhem
Ожидается в качестве входных данных буфер (например, файл), первым символом которого является разделитель комментариев, за которым следует код, например
#foo|bar|baz
.объяснение
(«
_
» обозначает буквальное пространство.)источник
mm
на,m`
а затем измените`m
на<C-o>
Флорид - 94 байта
Использует подход, аналогичный решению @ JonathanAllan 's Python.
Testcases
источник
C #
176167154 байтаUnGolfed
Решение LINQ было бы 146, но требовалось
using System.Linq;
довести его до 164:Старые решения:
167 байт:
176 байт с использованием интерполяции строк
источник
PHP,
120117116110109 байтили
источник
MATL ,
3331 байтПопробуйте онлайн!
объяснение
Встроенная функция
Yd
(blkdiag
), которая строит блочно-диагональную матрицу из своих входов, выполняет большую часть работы. Значения заполнения в матрице равны 0, а char 0 рассматривается как пробел для отображения. Код просто делится на части|
, строит матрицу из получающихся блоков, преобразует в char и добавляет два столбца с пробелом и символом комментария.Однако возможность пустых разделов во входной строке
усложняетзадачу: результирующий блок будет пустым и, следовательно, не будет отображаться в результирующей матрице.Чтобы решить эту проблему, мы вводим символ 0 перед каждым
|
, поэтому ни один блок не будет пустым; и затем в полученной матрице символов мы удаляем столбцы, которые образованы только символом 0. Непустой раздел кода будет иметь некоторый печатный символ ASCII, и, следовательно, столбцы, которые он охватывает, сохранятся. Пустой раздел добавит строку, но не добавит дополнительный столбец.источник
|
( соответствует подвыражению до или после|
) это действительно нужно, по крайней мере, в движке регулярных выражений Matlab / OctavePyth, 30 байт
или
Обе полные программы, которые принимают на STDIN ввод строки комментария, а затем строку программы, разделенную символом новой строки.
Попробуйте первую версию онлайн
Попробуйте вторую версию онлайн
Как они работают
источник
Dyalog APL 16,0 (неконкурентный),
4337 байтЗапрашивает комментарий, затем код.
Не конкурирует, потому что версия 16.0 новее этой проблемы.
источник
Perl, 63 байта
Включает +5 для
-Xpi
Запустить с вводом на STDIN и символом комментария после -i:
esolang.pl
:Совершенно скучное простое решение
источник
Turtlèd , 35 байт (неконкурентный)
Требуется один ввод, последний символ - символ комментария. Не работает с символом комментария как пробел, но я предполагаю, что в этом нет необходимости.
Объяснение:
источник
Фанки , 89 байт
Попробуйте онлайн!
источник
Scala, 123 байта
Тестовый код + Выход:
источник
Рубин,
9680 байтСмотрите это на eval.in: https://eval.in/639012
Я действительно должен просто изучить Retina.
источник
Желе , 41 байт
Похоже, что это имеет много раз, и, вероятно, слишком много ссылок ...
Проверьте это в TryItOnline
Как?
источник
CJam, 32 байта
объяснение
Попробуйте онлайн
источник
GolfScript, 85 байт
Попробуйте онлайн
Обновление 2017 - GolfScript - 71 байт
объяснение
источник
Желе , 10 байт
Попробуйте онлайн!
источник