Su tarea es escribir un programa (o función) que tomará una cadena como entrada y agregará texto al comienzo de cada línea que satisfaga las siguientes reglas:
- El texto adjunto debe contener el número de línea. Puede usar indexación basada en 0 o 1.
- El texto debe ser un comentario en su idioma. Un comentario se define como un fragmento de código sintácticamente válido que no realiza cambios en el estado del programa. Eliminar el comentario no debería hacer ningún cambio en el programa.
- El comentario solo puede contener nuevas líneas al final.
- No tiene que poner números de línea para las líneas que contienen solo espacios en blanco y comentarios.
Especificaciones
- Puede suponer que la entrada será un programa válido en su idioma.
- En lenguajes sensibles a la sangría como Python, puede colocar el comentario del número de línea después de toda sangría. Puede elegir pestañas o espacios para ser su carácter de sangría, pero debe especificarlo en su publicación.
- Puede suponer que cada declaración en el código ocupará como máximo la totalidad de 1 línea; es decir, sin cadenas de varias líneas o barra diagonal inversa-continuación.
Casos de prueba
Pitón:
#0
a = int(input())
#1
while a:
#2
print(a)
C: (Honestamente, me sorprende que esto 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*/}
Este es el código de golf , por lo que gana la respuesta más corta (en bytes).
code-golf
code-generation
comment
Fruta Esolanging
fuente
fuente
AssertionError
mensaje a menos que el seguimiento de la pila contuviera la frasefoo.py
, que se esperaba que provenga de un nombre de archivo, pero también podría aparecer como un comentario de línea en el contexto.Respuestas:
Pyke, 7 bytes
Pruébalo aquí!
Estoy declarando que los comentarios enteros son los enteros seguidos por el carácter
K
y luego la línea. Se utiliza un byte adicional para evitar que el código de operación de nueva línea entre e imprima algo adicional.fuente
Perl, 8 + 1 = 9 bytes
Corre con
-p
(penalización de 1 byte). (Nota para las personas que no están familiarizadas con las reglas de PPCG; también debe especificar una versión moderna de la sintaxis de Perl-M5.010
, pero decidimos que las opciones para seleccionar versiones de idioma son gratuitas y no incurren en una penalización de bytes, por lo que no lo mencioné en la versión original de esta publicación)-p
coloca el programa en un bucle implícito; Básicamente, hace que el programa se convierta en un filtro que procesa cada línea por separado (es decir, todo el programa se ejecuta en la primera línea, luego en la segunda, luego en la tercera, etc.). Perl también realiza un seguimiento de un número de línea, llamado$.
, que registra cuántas líneas de entrada se han leído. Entonces, todo lo que hace el programa es dejar-p
leer una línea de entrada; salida a#
, el número de línea actual ($.
) y una nueva línea (say
agrega una nueva línea por defecto, que es útil en este caso, y también es más corta que la más comúnmente vistaprint
); y luego dejando-p
salir la línea de código original que leyó (típicamente un programa que usa-p
haría algún tipo de procesamiento en la entrada, pero debido a que no lo hicimos, es solo la salida sin cambios). Los comentarios en Perl se ejecutan desde#
una nueva línea (#
en el programa en sí no se inicia un comentario porque está dentro de un literal de cadena), por lo que básicamente lo que estamos haciendo es aprovechar la oportunidad para escribir líneas de comentarios en el archivo a medida que lo procesamos , sin perturbar el ciclo de lectura y escritura "natural" de-p
.fuente
-p
embargo, debo recordar que no todos saben cómo funcionan un bucle o un número de línea que se actualiza automáticamente.say"$.;"
también funcionaría, porque la pregunta especificaba que "puede suponer que cada declaración en el código ocupará como máximo la totalidad de 1 línea".Javascript,
4339 bytesGracias a ETH y Conor por guardar 4 bytes.
fuente
/*${++b}*/
)) (use una cadena de formato)a=>a.replace(/^/gm,_=>`/*${++b}*/`,b=0)
V , 10 bytes
Pruébalo en línea!
fuente
Lote, 91 bytes
Batch no tiene una forma de leer STDIN hasta EOF, por lo que el nombre del archivo debe pasarse como un parámetro de línea de comandos.
fuente
Lua,
8075 bytesGuardado algunos bytes al abusar del idioma.
Respuesta inicial lo suficientemente simple.
Sin golf, +
fuente
--[[10]]
1 carácter más que a--[[9]]
menos que lo rellene correctamente con espacios.Gema,
1615 caracteresEn Gema solo hay comentarios de línea, comenzando con
!
.Ejecución de muestra:
Las siguientes son para responder la pregunta de Adám , si es posible agregar el número de línea en una especie de código ignorado.
El código de Gema es esencialmente una colección de reglas de transformación from = to , o template = action en términos de Gema. No veo forma de definir una plantilla que nunca coincida con nada, esto solo no parece ser el camino.
Gema, 18 personajes
Se transforma
e=3
enc:=1;:e=3
.Afortunadamente en Gema hay dominios , tipos de espacios de nombres. El código anterior define las reglas ficticias en el espacio de nombres c, que nunca usamos. Desafortunadamente, un dominio mencionado permanece vigente hasta el final de la línea, por lo que tenemos que cambiar explícitamente al dominio predeterminado.
Gema, 18 personajes
Se transforma
e=3
en1=$0;e=3
.Una alternativa menos complicada es usar código sin efecto en lugar de ignorado. Me refiero a volver a poner exactamente lo que coincidió.
fuente
e=3
transformado enif (false) { 1 }; e=3
lugar de la corriente!1e=3
? Sí, habría una solución alternativa de 19 caracteres.Qbasic,
9189 bytesEntrada:
Salida:
fuente
BASH (+ GNU sed) 27 bytes
La primera parte (
i#
\n
=
) casi funciona en GNU sed (para 4 bytes), pero pone una nueva línea después de#
.fuente
awk (
1913 bytes)19 bytes : este inserto "#" + número de línea sobre cada línea de código
13 bytes : crédito y gracias a @manatwork por dos soluciones de 13 bytes
Como
1
acción por defecto esprint $0
:O reemplazando
$0
contenidofuente
{print"#"NR}1
o$0="#"NR RS$0
?Función de extensión Kotlin,
6960 bytesfun String.a()=lines().mapIndexed{i,s->"/*$i*/$s"}.joinToString("\n")
fun String.a(){lines().mapIndexed{i,s->println("/*$i*/$s")}}
Ejemplo de uso:
Salida:
fuente
CJam, 21 bytes
No estoy muy versado en CJam en absoluto, pero sabía de hecho que tiene comentarios :)
Explicación próximamente.
fuente
oNo
puede ser reemplazado conn
en TIO.Mathematica, 58 bytes
fuente
jq, 31 caracteres
(Código de 27 caracteres + opciones de línea de comando de 4 caracteres).
En jq solo hay comentarios de línea, comenzando por
#
.Ejecución de muestra:
fuente
input_line_number
. Siendo Acción de Gracias, ¿hay algún sentimiento especial para expresar$.
?GolfScript, 23 bytes
Solo hay comentarios de línea que comienzan con "#".
Ungolfed y explicado:
Estoy bastante seguro de que esto se puede simplificar aún más, especialmente el
i
que probablemente se pueda omitir.Puede probarlo aquí: https://golfscript.apphb.com/ Debido a que este sitio no admite agregar entradas, deberá colocar una cadena entre comillas dobles delante del código.
'\n'
Será una nueva línea. Tenga en cuenta el hecho de que también hay otras secuencias de escape. Usuario'\\'
si no está seguro.fuente
C # 6,
6661 bytesGracias a CSharpie
(666, código de demonios ^^) yano ...Esto funciona para todos los lenguajes que usan "comentarios de estilo C" (C, C ++, C #, Java, ....)
Simplemente divide la cadena en líneas, antepone cada línea con su índice y vuelve a unir las líneas editadas con nuevos caracteres de línea.
versión antigua:
fuente
Python 2, 82 bytes
Funciona para sangría solo en espacio
Versión sin sangría para 56 bytes
fuente