Ваша задача - написать программу (или функцию), которая будет принимать строку в качестве входных данных и добавлять текст в начало каждой строки, которая удовлетворяет следующим правилам:
- Добавляемый текст должен содержать номер строки. Вы можете использовать индексацию на основе 0 или 1.
- Текст должен быть комментарием на вашем языке. Комментарий определяется как синтаксически допустимый фрагмент кода, который не вносит изменений в состояние программы. Удаление комментария не должно вносить изменений в программу.
- Комментарий может содержать только новые строки в конце.
- Вам не нужно ставить номера строк для строк, которые содержат только пробелы и комментарии.
Характеристики
- Вы можете предположить, что ввод будет действительной программой на вашем языке.
- В языках, чувствительных к отступам, таких как Python, вы можете разместить комментарий к номеру строки после всех отступов. Вы можете выбрать символы табуляции или табуляции, но вы должны указать это в своем сообщении.
- Вы можете предположить, что каждое утверждение в коде будет занимать не более 1 строки; т.е. нет многострочных строк или продолжения с обратным слешем.
Тестовые случаи
Python:
#0
a = int(input())
#1
while a:
#2
print(a)
C: (Честно говоря, я удивлен, что это компилируется)
/*0 */#include <stdio.h>
/*1 */int main()
/*2 */{
/*3 */ char c;
/*4 */ c = getchar();
/*5 */ do
/*6 */ {
/*7 */ putchar(c);
/*8 */ }
/*9 */ while (c);
/*10*/}
Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах).
code-golf
code-generation
comment
Esolanging Fruit
источник
источник
AssertionError
если в трассировке стека не содержалась фразаfoo.py
, которая, как ожидалось, должна исходить из имени файла, но также могла бы отображаться как строковый комментарий в контексте.Ответы:
Пайк, 7 байт
Попробуй это здесь!
Я объявляю целочисленные комментарии как целое число, за которым следует символ,
K
а затем строка. Дополнительный байт используется, чтобы остановить ввод кода операции новой строки и печать дополнительной вещи.источник
Perl, 8 + 1 = 9 байт
Запустить с
-p
(штраф 1 байт). (Обратите внимание на людей, незнакомых с правилами PPCG; вам также нужно указать современную версию синтаксиса Perl с использованием-M5.010
, но мы решили, что опции для выбора языковых версий бесплатны и не несут в себе байт-штрафа, поэтому я не упомянул об этом в оригинальная версия этого поста.)-p
помещает программу в неявный цикл; это в основном приводит к тому, что программа становится фильтром, который обрабатывает каждую строку отдельно (т. е. вся программа запускается в первой строке, затем во второй, затем в третьей и т. д.). Perl также отслеживает номер строки по имени$.
, который записывает, сколько строк ввода было прочитано. Таким образом, все, что делает программа, это позволяет-p
прочитать строку ввода; выведите a#
, номер текущей строки ($.
) и символ новой строки (say
по умолчанию добавляется символ новой строки, что полезно в данном случае, а также короче, чем обычноprint
); и затем позволить-p
выводить исходную строку кода, которую он прочитал (обычно программа, использующая-p
будет делать какую-то обработку на входе, но поскольку мы не сделали, это просто вывод без изменений). Комментарии в Perl запускаются с#
новой строки (сама#
программа не запускает комментарий, потому что он находится внутри строкового литерала), поэтому мы в основном используем возможность записать строки комментариев в файл при его обработке. , не нарушая "естественного" цикла чтения и записи-p
.источник
-p
цикл или автоматически обновляемый номер строки.say"$.;"
это также сработает, потому что в вопросе указано, что «вы можете предположить, что каждое утверждение в коде будет занимать не более 1 строки».Javascript,
4339 байтСпасибо ETH и Conor за сохранение 4 байта.
источник
/*${++b}*/
)) (используйте строку форматирования)a=>a.replace(/^/gm,_=>`/*${++b}*/`,b=0)
V , 10 байт
Попробуйте онлайн!
источник
Пакет, 91 байт
Пакетный режим не может считывать STDIN до EOF, поэтому вместо имени файла необходимо указать параметр командной строки.
источник
Луа,
8075 байтСохранение некоторых байтов за счет злоупотребления языком.
Достаточно простой стартовый ответ.
Ungolfed, +
источник
--[[10]]
на 1 символ длиннее,--[[9]]
если вы правильно не добавите пробелы.Гема,
1615 знаковВ Gema есть только строчные комментарии, начиная с
!
.Образец прогона:
Далее следует ответить на вопрос Адама , возможно ли добавить номер строки в виде игнорируемого кода.
Код Gema, по сути, представляет собой набор правил преобразования from = to или template = action в терминах Gema. Я не вижу способа определить шаблон , который никогда не будет соответствовать чему-либо, само по себе это не кажется подходящим.
Гема, 18 знаков
Превращается
e=3
вc:=1;:e=3
.К счастью, в Gema есть домены , своего рода пространства имен. Приведенный выше код определяет фиктивные правила в пространстве имен c, которые мы никогда не используем. К сожалению, упомянутый домен остается в силе до конца строки, поэтому мы должны явно переключиться обратно на домен по умолчанию.
Гема, 18 знаков
Превращается
e=3
в1=$0;e=3
.Менее сложная альтернатива - использовать бессмысленный код вместо игнорируемого. Я хочу вернуть именно то, что было найдено.
источник
e=3
трансформацииif (false) { 1 }; e=3
вместо тока!1e=3
? Да, это будет обходной путь из 19 символов.Qbasic,
9189 байтВходные данные:
Выход:
источник
BASH (+ GNU sed) 27 байт
Первая часть (
i#
\n
=
) почти работает в GNU sed (для 4 байтов), но ставит новую строку после#
.источник
awk (
1913 байт)19 байт : эта вставка "#" + номер строки над каждой строкой кода
13 байт : кредит и спасибо @manatwork за два 13-байтовых решения
Как
1
действие по умолчаниюprint $0
:Или путем замены
$0
контентаисточник
{print"#"NR}1
или$0="#"NR RS$0
?Функция расширения Котлина,
6960 байтfun String.a()=lines().mapIndexed{i,s->"/*$i*/$s"}.joinToString("\n")
fun String.a(){lines().mapIndexed{i,s->println("/*$i*/$s")}}
Пример использования:
Выход:
источник
CJam, 21 байт
Я совсем не разбираюсь в CJam, но я точно знал, что у него есть комментарии :)
Объяснение скоро.
источник
oNo
можно заменитьn
на TIO.Mathematica, 58 байт
источник
JQ, 31 символов
(27 символов кода + 4 символа параметров командной строки.)
В jq есть только строчные комментарии, начиная с
#
.Образец прогона:
источник
input_line_number
. Будучи благодарением, какие-то особые чувства, чтобы выразить$.
?GolfScript, 23 байта
Есть только строчные комментарии, начинающиеся с "#".
Разрушил и объяснил:
Я почти уверен, что это может быть еще более упрощено, особенно,
i
вероятно, может быть опущено.Вы можете проверить это здесь: https://golfscript.apphb.com/ Поскольку этот сайт не поддерживает добавление входных данных, вам придется поместить строку, заключенную в двойные кавычки, перед кодом.
'\n'
будет перевод строки. Помните о том, что существуют и другие escape-последовательности. Пользователь,'\\'
если вы не уверены.источник
C # 6,
6661 байтБлагодаря CSharpie
(666, код дьяволов ^^)больше нет ...Это работает для всех языков, использующих «комментарии в стиле C» (C, C ++, C #, Java, ....)
Он просто разбивает строку на строки, добавляет в каждую строку свой индекс и снова соединяет отредактированные строки с символами новой строки.
старая версия:
источник
Python 2, 82 байта
Работает только для отступов
Версия без отступов для 56 байт
источник