En este desafío, debe escribir un programa o función que no tome entrada e imprima o devuelva una cadena con el mismo número de bytes que el programa en sí. Hay algunas reglas:
- Solo puede generar bytes en el rango ASCII imprimible (0x20 a 0x7E, inclusive) o nuevas líneas (0x0A o 0x0D).
- Su código no debe ser una quine, por lo que el código y la salida deben diferir en al menos un byte.
- Su código debe tener al menos un byte de longitud.
- Si su salida contiene nuevas líneas finales, esas son parte del recuento de bytes.
- Si su código requiere indicadores de línea de comando no estándar, cuéntelos como de costumbre (es decir, agregando la diferencia a una invocación estándar de la implementación de su idioma al recuento de bytes), y la longitud de la salida debe coincidir con la puntuación de su solución. Por ejemplo, si su programa es
ab
y requiere el indicador no estándar-n
(asumiremos que no se puede combinar con indicadores estándar, por lo que son 3 bytes), debe generar 5 bytes en total. - La salida no siempre tiene que ser la misma, siempre que pueda demostrar que cada salida posible cumple los requisitos anteriores.
- Las reglas habituales de quine no se aplican. Puede leer el código fuente o su tamaño, pero dudo que sea más corto que codificarlo en la mayoría de los idiomas.
Puede escribir un programa o una función y utilizar cualquiera de los métodos estándar para proporcionar resultados. Tenga en cuenta que si imprime el resultado, puede elegir imprimirlo en la salida estándar o en la secuencia de error estándar, pero solo uno de ellos cuenta.
Puede usar cualquier lenguaje de programación , pero tenga en cuenta que estas lagunas están prohibidas de forma predeterminada.
Este es el código de golf , por lo que gana la respuesta válida más corta, medida en bytes .
Tabla de clasificación
code-golf
self-referential
Martin Ender
fuente
fuente
Respuestas:
C (Linux moderno), 19 bytes
Cuando se compila y ejecuta, esto imprime:
fuente
Excel, 11 bytes
Versión en noruego:
Versión en inglés (12 bytes):
Genera un número de n dígitos y lo convierte a texto convirtiéndolo a minúsculas.
fuente
=9^7&""
que genera un número de 7 dígitos en cualquier idioma y tiene solo 7 bytes.Laberinto , 4 bytes
Pruébalo en línea!
Huellas dactilares
0000
Explicación
fuente
Bash (solo integrado), 8 bytes
Impresiones
cho cho
y una nueva línea.fuente
Retina , 2 bytes
Pruébalo en línea!
Impresiones
0
y un salto de línea.Hay muchas soluciones de 2 bytes, pero creo que esto es óptimo. La retina por defecto siempre imprime una nueva línea final y deshacerse de ella requiere demasiados bytes. Por lo tanto, tendríamos que encontrar un programa de 1 byte que deje la entrada vacía sin cambios. Creo que el único programa que hace esto es el programa que contiene un solo salto de línea, que por lo tanto es igual a la salida y, por lo tanto, no está permitido por el desafío.
El siguiente paso más simple es vivir con Retina generando un solo dígito (el número de coincidencias de algunas expresiones regulares contra la entrada vacía), y podemos hacerlo con muchos patrones de 2 bytes que fallan (o coinciden).
fuente
Mathematica, 2 bytes
factorial
fuente
C, 20 bytes
Emite algún número, rellenado con espacios hasta una longitud de 20. (¿Qué número? Pase lo que pase después en la memoria).
Algunas muestras se ejecutan en mi sistema:
Es una pena que la salida no pueda ser bytes arbitrarios, porque eso habría permitido esta solución de 19 bytes:
que genera 19 bytes de basura, comenzando en
f
la dirección de.fuente
%esi
registro.Bash en Linux, 6
(seguido de una nueva línea)
Salidas
Linux
seguidas de una nueva línea.fuente
uname
no es un bash incorporado - es un ejecutable separadouname
como un bash incorporado? Cada distribución en la que puedo poner mis manos en este momento es un binario separado, incluido TIO . Por el contrario, como muestra su respuesta vinculada,umask
es una función integrada en la mayoría / todos los shells.uname
como un edificio. Cuando dije "-1, y en realidad un builtin", quise decir "Esta respuesta utilizaumask
para -1 bytes, y enumask
realidad es un builtin".Javascript ES6, 9 bytes
Usar cadenas de plantillas
fuente
undefined
considera una cuerda?(_=>_+'')
.Esquema piramidal ,
744342 bytes¡Ahorré 31 bytes gracias a Khuldraeseth na'Barya! ¡Ahorrado 1 byte gracias a la solución rediseñada de JoKing!
Pruébalo en línea! Emite el número de 41 dígitos
28^28 = 33145523113253374862572728253364605812736
, seguido de una nueva línea final.Versión antigua
Pruébalo en línea!
Salidas
71277303925397560663333806233294794013421332605135474842607729452115234375
=160651015 ** 9
, o aproximadamente 10 74 .fuente
Python 2 , 9 bytes
Esto imprime
set([1])
y un salto de línea.Pruébalo en línea!
fuente
print
, no hay soluciones más cortas, y los únicos de 9 bytes son variantes de esto y de Luis Mendoprint 1e5
.Python 2 , 9 bytes
La salida mostrada contiene una nueva línea final.
Pruébalo en línea!
fuente
brainfuck , 25 bytes
Pruébalo en línea! Nota: Requiere una implementación con celdas sin signo de 8 bits
Salida:
Explicación
fuente
.
que imprima elNULL
carácter no imprimible ?C (Ideone), 14 bytes
En Ideone , que nombra su ejecutable
prog
, esto genera lo siguiente con una nueva línea final.C (GCC), 15 bytes
Debido a que GCC escribe un ejecutable nombrado
a.out
por defecto (en ausencia de indicadores adicionales que costarían bytes), esto genera lo siguiente con una nueva línea final.fuente
C (gcc) ,
1817 bytesTenga en cuenta que hay un byte STX ( 0x02 ) entre
@
yC
.Pruébalo en línea!
Portabilidad
Esto se ha probado con gcc 6.3.1 y clang 3.9.1 en Fedora 25, gcc 4.8.4 en Ubuntu 14.04.4 y gcc 4.8.3 en openSUSE 13.2, donde imprime el siguiente resultado.
Espero que esto produzca el mismo resultado con todas las versiones de gcc, siempre que se compile en un ejecutable del siguiente tipo.
Las diferentes plataformas requerirán una dirección de memoria diferente y posiblemente un orden diferente para los bytes en la constante de caracteres de varios caracteres.
Por ejemplo, reemplazando
@\2C
con@\2\4
impresionesexec/ld-elf.so.1
y una nueva línea en FreeBSD 11 con clang 3.8.0.Verificación fuera de línea
Cómo funciona
Por defecto, ld usa 0x400000 como la dirección base del segmento de texto, lo que significa que podemos encontrar el contenido del ELF comenzando en la dirección de memoria 0x400000 .
Los primeros 640 bytes del ELF son en gran medida independientes del código fuente real. Por ejemplo, si la declaración de f es seguida por
main(){f();}
y nada más, se ven de la siguiente manera.El uso, por ejemplo,
main(int c, char**v){f();}
cambia algunos bytes, pero no el desplazamiento de la cadena/lib64/ld-linux-x86-64.so.2
, que usaremos para producir la salida.El desplazamiento de dicha cadena es 0x238 y tiene 27 bytes de longitud. Solo queremos imprimir 17 bytes (y el último será una nueva línea si usamos
puts
), por lo que agregamos 11 al desplazamiento para obtener 0x243 , el desplazamiento deinux-x86-64.so.2
. Agregar 0x400000 y 0x243 da 0x400243 , la ubicación de memoria deinux-x86-64.so.2
.Para obtener esta dirección de memoria, podemos usar constantes de caracteres de varios caracteres, que exhiben un comportamiento definido por la implementación. 0x400243 es (64) (2) (67) en la base 256 y las constantes de caracteres de varios caracteres de gcc usan el orden de bytes big-endian, por lo que
'@\2C'
produce la dirección de memoria de la cadena deseada.Finalmente,
puts
imprime la picadura (terminada en nulo) en esa ubicación de memoria y una nueva línea final, creando 17 bytes de salida.fuente
U
al compilar con-Df=main
.U
al compilar conmain(){f();}
.Brainfuck auto modificable , 5 bytes
Pruébalo en línea!
Salida:
Explicación:
Muy simple, imprime la fuente en reversa. En SMBF, el contenido del programa se almacena en la cinta, a la izquierda de la posición inicial del puntero. Si se desliza hacia la izquierda e imprime, el código fuente saldrá hacia atrás.
Dado que la fuente de lectura está permitida en este desafío, esto definitivamente debería estar dentro de las reglas.
fuente
Calculadora aritmética básica , 2 bytes
1=
impresiones
1.
o:en esas tontas pantallas de siete segmentos.
Para reproducir, tome cualquier calculadora al azar; Todos tienen este lenguaje de programación instalado de alguna manera.
fuente
1.
lugar de1x
? Además, esta es una quine, que no está permitida por las reglas.1=
me equivoqué. Quise decir1x
que es igual a implícito, pero olvidé que=
es un botón.1
en mi TI-36 y TI-84 CE. ¿No cuentan como calculadoras "básicas"?Fourier,
262220 bytesPruébalo en FourIDE!
Salidas:
Para una capitalización adecuada, son 4 bytes adicionales:
Pruébalo en FourIDE!
RIP Adam West
fuente
Brachylog , 1 byte
Pruébalo en línea!
Explicación
w
es el "escribir" incorporado. Aquí, escribirá la entrada. Como la entrada es una variable libre, law
etiquetará como un entero antes de imprimir. El primer entero que intenta es0
.fuente
Here, it will write the Input.
¿Es 'la entrada' el programa en sí? ¿No cuenta esto como leer la fuente, que por defecto es hacer trampa en una quine?Java (OpenJDK 8) , 11 bytes
Pruébalo en línea!
Salida:
Sólo un poco más elaborada que la respuesta obvia,
()->"".format("%23s",0)
.Ahorra
fuente
()->1E10-1+""
,"9.999999999E9" (13)
ahorra tres bytes más1e10
a1e9
, o 2 bytes usando una entrada vacía en lugar de()
esto:o->1e8-1+""
(salidas9.9999999E7
; longitud y conteo de bytes 11 ).05AB1E , 1 byte
Emite una nueva línea nueva.
õ
empuja una cadena vacía, y se genera implícitamente con una nueva línea.Pruébalo en línea!
Algunas otras soluciones de 2 bytes, para su placer visual (la salida está entre paréntesis y toda la salida tiene una nueva línea final):
Sin embargo, hay muchas más soluciones de 2 bytes.
fuente
V / vim, 1 byte
Esto imprime una nueva línea.
Pruébalo en línea!
Hay un montón de variantes en esto que también funcionarían. Por ejemplo,
en vim, y
en V.
También hay muchas, muchas, muchas soluciones de tres bytes. Por ejemplo:
Todos estos son específicos de V.
fuente
4ii<ESC>
Sin embargo, V rellena implícitamente el escape al final del programa.Lote, 12 bytes.
El recuento de bytes incluye una nueva línea final para el script y la salida, que es
fuente
cmd.exe
, por supuesto, hará eco de un CRLF después deWindows_NT
, por lo tanto, 12 bytes.Hexagonía , 3 bytes.
Pruébalo en línea!
Impresiones
111
.Desplegado:
Pero el código realmente solo se ejecuta en el orden
o!@
.fuente
/// , 12 bytes
Pruébalo en línea!
Esto se imprime
bcdbcdbcdbcd
, y como son 12 bytes, agregué un código inofensivo/
al final del código para rellenarlo.fuente
R, 7 bytes
Impresiones "lógicas"
fuente
MATL , 2 bytes
Hay una nueva línea final.
Pruébalo en línea!
Explicación
Portapapeles H contiene número
2
por defecto.H
empuja ese contenido a la pila, que se muestra implícitamente con una nueva línea final.fuente
Carbón , 2 bytes
Pruébalo en línea!
Imprime una línea horizontal de longitud 1
-
a la derecha y una nueva línea.fuente
Gelatina , 1 byte
Un buen número de Jelly one byters, este es uno, evalúa el argumento izquierdo que, cuando no se proporciona nada como entrada, el valor predeterminado es cero, que a su vez se evalúa a cero y el resultado se imprime implícitamente, a
0
.Pruébalo en línea!
De hecho, de los 256 bytes en la página de códigos, solo hay 95 que actualmente no producen una salida de un byte diferente dentro del rango especificado cuando se ejecutan como un programa completo; estos son (como caracteres de página de códigos en orden de bytes):
Notas:
La mayoría de los programas de 1 byte imprimen un
0
(no-ops / dando una lista con un solo cero, que imprime a0
), la mayoría de los otros imprimen un1
(0=0
y similares)Ọ
es el programa de una que hace dar un byte diferente, pero una que está fuera del intervalo según la especificación - se produce el null-byte (yesos la0
de carácter)⁶
produce un espacio (un literal)⁷
produce un avance de línea (un literal)Es posible que algunos bytes que funcionan ahora no lo hagan en el futuro: creo que hay unos pocos bytes reservados (creo) para valores niládicos que, cuando se asignan, es casi seguro que no producirán una salida de un byte.
fuente
byte
Befunge , 2 bytes
Pruébalo en línea!
Imprime
0
con un espacio final. También funciona en Befunge 98.fuente