Sua tarefa é escrever um programa (ou função) que terá uma string como entrada e anexará texto ao início de cada linha que atenda às seguintes regras:
- O texto anexado deve conter o número da linha. Você pode usar a indexação com base em 0 ou 1.
- O texto deve ser um comentário no seu idioma. Um comentário é definido como um trecho de código sintaticamente válido que não faz alterações no estado do programa. A remoção do comentário não deve alterar o programa.
- O comentário pode conter apenas novas linhas no final.
- Você não precisa colocar números de linhas para linhas que contenham apenas espaço em branco e comentários.
Especificações
- Você pode assumir que a entrada será um programa válido no seu idioma.
- Em linguagens sensíveis ao recuo, como Python, você pode colocar o comentário do número da linha após todo o recuo. Você pode escolher guias ou espaços para ser o seu caractere de indentação, mas você deve especificar na sua postagem.
- Você pode assumir que todas as instruções no código ocuparão no máximo 1 linha; ou seja, sem seqüências de várias linhas ou continuação de barra invertida.
Casos de teste
Pitão:
#0
a = int(input())
#1
while a:
#2
print(a)
C: (Honestamente, estou surpreso que isso compile)
/*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*/}
Isso é código-golfe , então a resposta mais curta (em bytes) vence.
code-golf
code-generation
comment
Esolanging Fruit
fonte
fonte
AssertionError
, a menos que o rastreamento da pilha contivesse a frasefoo.py
, que era esperada vir de um nome de arquivo, mas também poderia aparecer como um comentário de linha no contexto.Respostas:
Pyke, 7 bytes
Experimente aqui!
Estou declarando comentários inteiros como o número inteiro seguido pelo caractere
K
e depois pela linha. Um byte extra é usado para impedir que o código de operação da nova linha entre em ação e imprima uma coisa extra.fonte
Perl, 8 + 1 = 9 bytes
Corra com
-p
(penalidade de 1 byte). (Observe para pessoas não familiarizadas com as regras do PPCG; você também precisa especificar uma versão moderna da sintaxe Perl usando-M5.010
, mas decidimos que as opções para selecionar versões de idiomas são gratuitas e não incorrem em uma penalidade de bytes, por isso não mencionei isso em a versão original desta postagem.)-p
coloca o programa em um loop implícito; basicamente faz com que o programa se torne um filtro que processa cada linha separadamente (ou seja, o programa inteiro é executado na primeira linha, depois na segunda, depois na terceira e assim por diante). O Perl também rastreia um número de linha, chamado$.
, que registra quantas linhas de entrada foram lidas. Então, tudo o que o programa está fazendo é deixar-p
ler uma linha de entrada; saída a#
, o número da linha atual ($.
) e uma nova linha (say
adiciona uma nova linha por padrão, o que é útil nesse caso e também é mais curto que o mais comumprint
); e, em seguida, permitindo a-p
saída da linha de código original que ela lê (normalmente um programa usando-p
faria algum tipo de processamento na entrada, mas como não o fizemos, é apenas a saída inalterada). Os comentários no Perl são executados#
em uma nova linha (o#
próprio programa não inicia um comentário porque está dentro de uma cadeia de caracteres literal), então o que estamos fazendo basicamente é aproveitar a oportunidade para escrever linhas de comentário no arquivo enquanto o processamos. , sem perturbar o ciclo "natural" de leitura e gravação de-p
.fonte
-p
loop ou um número de linha com atualização automática funciona.say"$.;"
também funcionaria, porque a pergunta especificava que "Você pode assumir que todas as instruções no código ocuparão no máximo 1 linha".Javascript,
4339 bytesAgradecimentos a ETH e Conor por salvar 4 bytes.
fonte
/*${++b}*/
)) (usar uma cadeia de formatação)a=>a.replace(/^/gm,_=>`/*${++b}*/`,b=0)
V , 10 bytes
Experimente online!
fonte
Lote, 91 bytes
O lote não tem como ler STDIN até o EOF; portanto, o nome do arquivo deve ser passado como um parâmetro da linha de comando.
fonte
Lua,
8075 bytesEconomizou alguns bytes abusando do idioma.
Resposta inicial bastante simples.
Ungolfed, +
fonte
--[[10]]
com 1 caractere a mais que--[[9]]
menos que você o preencha corretamente com espaços.Gema,
1615 caracteresNo Gema, existem apenas comentários de linha, começando com
!
.Exemplo de execução:
A seguir, respondemos à pergunta de Adám , se é possível adicionar o número da linha em tipo de código ignorado.
O código Gema é essencialmente uma coleção de regras de = = para transformação ou template = action em termos de Gema. Não vejo como definir um modelo que nunca corresponda a nada, apenas isso não parece ser o caminho.
Gema, 18 caracteres
Transforma
e=3
emc:=1;:e=3
.Felizmente, no Gema, existem domínios , tipos de namespaces. O código acima define as regras fictícias no espaço de nomes c, que nunca usamos. Infelizmente, um domínio mencionado permanece em vigor até o final da linha, por isso precisamos explicitamente retornar ao domínio padrão.
Gema, 18 caracteres
Transforma
e=3
em1=$0;e=3
.Uma alternativa menos complicada é usar código sem efeito em vez de código ignorado. Quero colocar de volta exatamente o que foi combinado.
fonte
e=3
transformou emif (false) { 1 }; e=3
vez da atual!1e=3
? Sim, haveria uma solução alternativa com 19 caracteres.Qbasic,
9189 bytesEntrada:
Resultado:
fonte
BASH (+ GNU sed) 27 bytes
A primeira parte (
i#
\n
=
) quase funciona no GNU sed (por 4 bytes), mas coloca uma nova linha após o#
.fonte
awk (
1913 bytes)19 bytes : insira "#" + número da linha acima de cada linha do código
13 bytes : crédito e obrigado a @manatwork por duas soluções de 13 bytes
Como
1
ação, o padrão éprint $0
:Ou substituindo o
$0
conteúdofonte
{print"#"NR}1
ou$0="#"NR RS$0
?Função de extensão Kotlin,
6960 bytesfun String.a()=lines().mapIndexed{i,s->"/*$i*/$s"}.joinToString("\n")
fun String.a(){lines().mapIndexed{i,s->println("/*$i*/$s")}}
Exemplo de uso:
Resultado:
fonte
CJam, 21 bytes
Não sou muito versado no CJam, mas sabia que ele tem comentários :)
Explicação em breve.
fonte
oNo
pode ser substituído porn
no TIO.Mathematica, 58 bytes
fonte
jq, 31 caracteres
(Código de 27 caracteres + opções de linha de comando de 4 caracteres.)
No jq, existem apenas comentários de linha, começando com
#
.Exemplo de execução:
fonte
input_line_number
. Ser dia de Ação de Graças, algum sentimento especial para expressar$.
?GolfScript, 23 bytes
Existem apenas comentários de linha começando com "#".
Ungolfed & explicou:
Tenho certeza de que isso pode ser mais simplificado, especialmente o
i
que provavelmente pode ser deixado de fora.Você pode testá-lo aqui: https://golfscript.apphb.com/ Como este site não oferece suporte à adição de entradas, você deverá colocar uma string entre aspas duplas na frente do código.
'\n'
será uma nova linha. Esteja ciente do fato de que também existem outras seqüências de escape. Usuário,'\\'
se você não tiver certeza.fonte
C # 6,
6661 bytesGraças ao CSharpie
(666, código demônios ^^)não mais ...Isso funciona para todos os idiomas usando "comentários no estilo C" (C, C ++, C #, Java, ....)
Simplesmente divide a string em linhas, acrescenta cada linha ao seu índice e junta as linhas editadas novamente com novos caracteres de linha.
versão antiga:
fonte
Python 2, 82 bytes
Funciona para recuo somente de espaço
Versão sem recuo para 56 bytes
fonte