Debe escribir un programa o función que reciba un número entero positivo N
como entrada e imprima los primeros N
caracteres de su código. Si N
es mayor que la longitud de su código, debe continuar generando su código cíclicamente.
La lectura de su código fuente de cualquier manera y la lectura de archivos, stdio, etc. no están permitidos.
Ejemplos
(suponiendo que su código sea yourcode
)
Entrada => Salida:
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
Aclaración
Su programa debe tener al menos 1 byte de longitud.
Respuestas:
Python 2, 61 bytes
Pruébalo en línea!
fuente
> <> , 49 bytes
La mitad del código está convirtiendo la entrada de una cadena a un int. Si se nos permite usar el punto de código de una sola lectura de caracteres de STDIN, entonces este programa sería mucho más corto en 21 bytes:
Explicación
Usaré el segundo programa para la explicación.
'
comienza el análisis de cadenas, presionando cada carácter hasta que se encuentre una cotización de cierre. Como el resto de la línea no tiene'
comillas, cada carácter, excepto el inicial,'
se coloca en la pila.Pero> <> es un lenguaje 2D toroidal, por lo que una vez que la línea ha terminado, el puntero de instrucción vuelve al inicio, pulsa el botón
'
nuevamente y detiene el análisis de cadenas. El resultado es que hemos presionado todo lo necesario, excepto la cita inicial, a saber'
es ASCII 39, entonces empujamos la cita inicial presionando3d* = 3*13 = 39
. Luego cambiamos la pila hacia la derecha (}
) y hacia atrás (r
), dando:Ahora estamos listos para comenzar a imprimir.
i
lee en un carácter de entrada, pero los caracteres> <> son básicamente enteros. En el primer programa,i
se reemplaza por un bucle que convierte una cadena de dígitos de STDIN en un número entero.Luego ejecutamos el siguiente bucle para imprimir los primeros N caracteres:
fuente
CJam,
34 1716 bytesEsto se puede jugar mucho golf ..
Expansión de código :
Finalmente, cualquier cosa en la pila se imprime en STDOUT automáticamente
Pruébalo en línea aquí
fuente
Python 2, 117 bytes
Vida protip: no ejecutes
list(itertools.cycle(x))
. Por alguna razón, no puedo imaginar por qué, se bloquea el intérprete.fuente
itertools.cycle()
es un generador infinito, así que a menos que su computadora tenga memoria infinita, tendrá problemas :)JavaScript (ES6),
655250474139Utiliza ES6
repeat()
para clonar el código y luego lo corta. Utiliza una longitud codificada.Versión anterior (50):
Crea una función
q
, tomando un solo parámetro.Cadena el texto de la función y recursivamente llama a la función si
n
es mayor que la longitud del texto. De lo contrario, devuelve una subcadena del texto.Versión no ES6 (65):
fuente
.repeat
, para los requisitos cíclicos fue simplemente genial.repeat()
me permitió cortarlo un montón, así que lo usé en su lugar./39+1
? ¿Por qué no dejar una cuerda lo suficientemente larga?q=n=>('q='+q).repeat(n).slice(0,n)
funciona bien en firefoxJ - 24 char
Toma un único argumento entero positivo y escupe una cadena.
J no tiene ningún truco de autorreferencia, por lo que lo hacemos a la perfección. Explicado por explosión:
El
$
operador diádico en J toma cíclicamente elementos de su argumento derecho para ajustarse a las dimensiones especificadas a la izquierda. Cuando la dimensión es un número único, se trata de una simple lista 1D de caracteres, por lo que hacemos exactamente lo que la pregunta nos pide.Pruébelo usted mismo en tryj.tk .
fuente
quote
verbo?''''&,@(,&'''')@(#~ >:@(=&''''))
, o en inglés, "duplicar cualquier'
carácter, luego agrega uno al principio y al final". J usa literales de cadena similares a Ada, por lo que se escapa de la cadena.k2 - 7 caracteres
En inglés, esta es una función con argumento
x
cuya definición es "x
take string self"._f
) es la función más interna en ejecución actualmente. Aquí está la función{x#$_f}
.$
) convierte su argumento en una cadena. En el caso de una función, crea una cadena con la definición original de la función.#
) toma elementos de izquierda-arg de la lista en derecha-arg . En el caso de una cadena, los elementos son caracteres, por lo que esto está haciendo exactamente lo que queremos.Esto no funcionará en el código abierto de Kona, porque parece crear agujeros negros que se comen todos los intentos de usarlos como argumentos de cualquier cosa. No estoy seguro de la semántica k3 adecuada, pero probablemente no sean mucho más amables.
En Q, esto es
{x#string .z.s}
y en k4{x#2_$.z.s}
. Tenemos que usar2_
para soltar dos caracteres iniciales en k4, por razones que solo una madre podría amar.fuente
Ruby,
66 6463 bytesLo mismo usando una función para evitar llamar
gets
es un poco más largo (81 bytes):Las versiones de Lambda de la misma son 69 y 65 bytes:
fuente
.cycle
está bien, tengo que recordar eso. :) Probablemente se puede acortar.join
a*''
.String#format
lugar de la interpolación:eval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Mathematica, 65 bytes
Todos los espacios son necesarios para hacer de este un quine adecuado, incluido el final. Esta es una función pura, que puede usar de la siguiente manera:
que imprime
Por desgracia, la aplicación
ToString
de una función no produce exactamente la forma en que ha introducido la función, así que no puedo acortar mediante la eliminación de espacios en blanco, el acortamiento#1
de#
o usando la notación de prefijo para llamadas a funciones.fuente
#
a#1
"?MATLAB,
319141 caracteresLogré exprimir algunos bytes del original:
fuente
JavaScript, 34 bytes
Función recursiva que repite los
n
tiempos del código , luego corta el resultado.fuente
Japt , 2 bytes
Pruébalo en línea!
El primero
î
es un método numérico que toma un parámetro y lo repite a la longitudn
. Porque es el primer método, sen
convierte en la entrada. El segundo seî
convierte en una cadena y se repite.Esto se transmite a:
n.î("î")
-> Repita"î"
hasta que alcance la longitudn
Solución de 8 bytes
Pruébalo en línea!
îQi"îQi"
transpila an.î(Qi"îQi")
fuente
R, 203 bytes
Cuando N = 203, el código se imprime completamente.
Cuando N = 50, el código se recorta solo.
Cuando N = 300, el código se repite parcialmente.
fuente
(f=function(N){s=paste0("(f=",paste0(capture.output(f),collapse=""),")");cat(rep(s,N%/%nchar(s)),substr(s,1,N%%nchar(s)),sep="")})(200)
Matlab (57)
El
1
índice inicial (en lugar de0
) en la última línea se debe a que la función de Matlabtype
introduce un avance de línea inicial, que debe eliminarse. Gracias a Dennis por su corrección (último índice) y por su sugerencia (nnz
más corta quenumel
).fuente
-1
). - Creo que también puede eliminar el segundo salto de línea y de intercambio a cabonumel
pornnz
.type f
choca la parte con el requisito Leer su código fuente de alguna manera y leer desde el archivo, stdio, etc. no están permitidos ?type
probablemente accede al disco duro. ¿Crees que debería eliminar la respuesta?mod
cierto, robé su idea de indexación)Unario (versión 1-8) , 23855 bytes
Toma la entrada como unario de '1's, y el código es 23855' 1's (
,[.,]
)fuente
Japt ,
4028 bytesPrimera vez que escribe un quine, por lo que esto probablemente se puede acortar un poco. Por otro lado, estoy bastante feliz de haberlo hecho funcionar.
Liderando la nueva línea intencionalmente, la segunda línea son datos y el resto desenvuelve los datos, luego repite toda la cadena resultante hasta que alcanza una longitud igual a la entrada.
Afeitado 12 bytes gracias a Oliver .
Pruébalo en línea!
fuente
tTU
con¯U
y se puede utilizarî
en lugar delp
moviéndola hacia la parte delantera: Pruébelo en líneaîR+Q+V+Q+R+V
debería funcionar bien.î
, eso es muy útil. ¡Muchas gracias!C ++, 305
Explicación Además del carácter de escape, se imprimen todos los demás caracteres. El método principal está dentro de la cadena sy dentro de la cadena principal, la cadena completa se construye e imprime en stdout
fuente
Pyth,
151314 bytesPruébalo en línea!
Versión modificada del estándar Pyth quine .
fuente
<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jN
equivocado?<jN*Q]"<jN*Q]"
parece trabajo?Hoon , 185 bytes
Establezca
f
el código del programa como una cinta, pero con "k" para sí mismo. Divida la cinta en el carácter 5, estableciendo variables[p=left q=right]
. Suelde las cuerdasp
, la cadena originalf
y todo lo que sigue al primer carácter deq
. Repita esa cadenan
veces, luego devuelva los primerosn
caracteres de la misma.Hacer esto se vio ligeramente obstaculizado por el hecho de que stdlib de Hoon no tenía una función de formato o buscar y reemplazar ... Además, no estoy seguro de por qué necesitamos otro reparto después del
scag
, ya que debería mantener la información de tipo. Así que va.fuente
Jstx , 7 bytes
Pruébalo en línea!
fuente
Perl 5 con
-pa
48 bytesPruébalo en línea!
fuente
Gol> <> , 12 bytes
Pruébalo en línea!
Cómo funciona
k
puede ajustarse cualquier cantidad de veces, por lo que no necesitamos duplicar toda la pila dependiendo de la entrada.fuente
SmileBASIC,
10666 bytesfuente
KSFTgolf - 4 caracteres, 6 bytes
KSFTgolf si es un lenguaje que he estado intentando diseñar para el golf de código. Lo he estado cambiando mucho, por lo que esto probablemente no debería contar.
fuente
☃
código, que se parece totalmente a algo que se ha hecho específicamente para este desafío (ya que no hay otros bloques de código basados en Unicode en todo su archivo).Stax , 24 bytes
Ejecutar y depurarlo
Adaptación de la
"34bL"34bL
quine.fuente
J, 41 bytes
¡Eso sí que era un desafío para la mente!
Explicación:
Ejemplos:
fuente
Ly , 28 bytes
Pruébalo en línea!
fuente
Java 10,
193176 bytesExplicación:
Pruébalo en línea.
quine -parte:
var s
contiene el código fuente sin formato.%s
se utiliza para ingresar esta cadena en sí misma con els.format(...)
.%c
,%1$c
Y la34
se usan para formatear las comillas dobles.s.format(s,34,s)
lo pone todo juntoParte del desafío:
for(int i=n;i>n;i/=176)
ceil(n/176)
tiempos de bucles , donde176
es la longitud del código fuente.s+=s;
aumenta exponencialmente el tamaño del código fuente String. (seab
convierteabab
; seabab
convierteabababab
; seabababab
convierteabababababababab
; etc.)s.subtring(0,n);
toma los primerosn
caracteres de la cadena.fuente
> <> ,
2219 bytesPruébalo en línea!
Toma entrada a través de la
-v
bandera.fuente
Stax , 8 bytes
Ejecutar y depurarlo
fuente