Code Golf
Historia de fondo totalmente real : soy un contratista que trabaja en un sitio web www. Sky.Net y una de nuestras tareas es crear un programa autoconsciente o algo así, no sé si realmente no estaba escuchando al jefe. De todos modos, en un esfuerzo por hacer que nuestro código sea más consciente de sí mismo, necesitamos que TI pueda saber qué código hay en cada número de línea.
Desafío
Cree un programa o función que tome una entrada n
y devuelva el código de dicho programa o función en línea n
.
Reglas
➊ Su programa o función debe tener al menos 4 líneas de largo. Cada línea debe ser única.
➋ Puede suponer que la entrada siempre será un número entero positivo mayor o igual que 1 y menor o igual que el número de líneas en su programa / función.
➌ La primera línea en su programa / función es la línea 1, no la línea 0.
➍ No puede acceder al archivo en el que se encuentra su programa. (Si alguien tiene que preguntar "¿No está técnicamente rompiendo la regla # 4"; probablemente lo sea)
➎ Las líneas no pueden estar vacías (esto incluye un espacio si los espacios no hacen nada en su idioma)
➏ Las líneas no pueden ser // comentarios (/ * de cualquier estilo <! -)
Este es un desafío parecido a una quine.
Este es el código de golf , por lo que gana la presentación con la menor cantidad de bytes.
Respuestas:
Vim, 7 bytes
Pruébalo en línea!
Por lo que puedo decir, esto cumple con todas las reglas. En vim por defecto, el programa vacío imprime toda la entrada. Ya que
Es un noop, nada cambia el texto de entrada, y dado que cada entrada coincide con la salida deseada, este mismo enfoque funciona con cualquier número de líneas.
fuente
Ruby,
717066 bytesPruébalo en línea!
Modo "trampa": 7 + 1 = 8 bytes
Requiere la
-p
bandera para +1 byte. Literalmente una copia de la respuesta V . Imprime el número que se ingresa; todo el programa es efectivamente sin operaciones.fuente
-p
hacer?$_
, ejecuta el contenido del programa y luego imprime el contenido de la$_
pantalla (repitiendo por línea de STDIN). Como el programa no hace nada, es prácticamente solo Unixcat
, pero eso significa que cada entrada de 1-4 generará el contenido de la línea, porque cada línea es literalmente su número de línea.-p
, pero1\n2\n3\n4
no es un programa válido de Perl.Haskell,
6959 bytesBasado en el estándar Haskell quine. La primera expresión (extendida sobre las primeras tres líneas) es una función sin nombre que selecciona la enésima línea de la cadena quinificada
s
(s++show s
). +2 bytes para hacer que la indexación se base en 1 (en mi opinión, una regla innecesaria).Para probarlo en línea! versión tengo que nombrar la función que agrega 4 bytes.
fuente
PowerShell ,
184172 bytesPruébalo en línea!
Explicación
Comienza creando una matriz
$v
en la primera línea. En esa misma línea, el primer0
elemento ( th) se establece en0
y una coma,
continúa su definición.La siguiente línea establece el siguiente elemento (
1
) de la matriz en una cadena que representa el contenido de la primera línea del script, de modo que$v[1]
devuelve la primera línea.La tercera línea establece primero el tercer elemento de la matriz (índice
2
) en una cadena que representa la segunda línea del script, luego en la misma línea establece el cuarto elemento (índice3
) usando un fragmento de quine que usa el operador de formato (-f
) para reemplazar ciertas instancias de comillas simples ([char]39
) y la cadena de plantilla de formato, en sí misma, para reproducir la totalidad de la tercera línea.La línea 4 básicamente hace lo mismo, pero también finaliza la creación de la matriz y luego la indexa utilizando el argumento proporcionado.
fuente
Python 2,
1047367 bytes¡Gracias a Jonathan Allan por guardar 6 bytes!
Editar: mismo recuento de bytes, pero me gusta más esta solución
Pruébalo en línea!
Versión de Python de la respuesta Ruby de Value Ink .
Respuesta anterior (67 bytes):
fuente
n
: TIOCJam ,
191817 bytesPruébalo en línea!
Basado en el estándar CJam-quine. El
{...}_~
ejecuta el...
bloque en sí mismo en la pila (y en este caso, también1
debajo de eso). Entonces hacemos:fuente
PHP, 261 bytes
Pruébalo en línea !!
La cadena codificada es:
fuente
Perl, 52 bytes
Esta es una variación simple del quine clásico.
La "carga útil" está
split
en las nuevas líneas y la línea correcta se selecciona indexando en la lista resultante.Perl,
4948 bytes (no competidor)38 bytes para el código (excluyendo el shebang pero incluido
-d:A
) más 10 bytes para el nombre de archivo, que debe serDevel/A.pm
. ElDevel
directorio debe estar en@INC
.Técnicamente, esto viola la Regla # 4 porque
-d:A
hace que el archivo se analice dos veces, por lo que es una solución no competitiva.Utiliza un gancho de depuración para acceder a las líneas del archivo, que Perl almacena en la
@{"_<$filename"}
matriz en tiempo de compilación.fuente