Acechador desde hace mucho tiempo, cartel por primera vez. Entonces aquí va.
En la página de Wikipedia para quine , dice que "una quine se considera 'trampa' si mira su propio código fuente". Su tarea es hacer una de estas "trampas" que lea su propio código fuente.
Este es el código de golf , por lo que gana el código más corto en bytes, en cada idioma . Esto significa que un script Pyth de 5 bytes no superaría a un script Python de 21 bytes, pero un script Python de 15 bytes sí.
Debe usar la E / S de archivo para leer el código fuente, por lo que el siguiente código JavaScript, tomado de la página oficial de Wikipedia, no es válido:
function a() {
document.write(a, "a()");
}
a()
Debe acceder al código fuente del archivo en el disco .
No tiene permiso para especificar el nombre del archivo. Debe hacer que detecte el nombre del archivo en sí.
¿Todo el mundo claro? ¡Ir!
Respuestas:
Zsh , 4 bytes
El caparazón Z tiene funcionalidades felinas integradas. El cuarto personaje es un salto de línea.
Pruébalo en línea!
El código no depende de ninguna manera del nombre del archivo; funciona incluso si el nombre del archivo contiene caracteres especiales, como espacios o líneas nuevas.
Prueba de funcionamiento
fuente
feline functionalities
:)Bash, 6 bytes
Básicamente.
fuente
cat
no agrega una nueva línea (al menos en mi sistema).cat
imprime el contenido del archivo proporcionado byte por byte.cat
solución entonces, en lugar de unabash
solución? Y cat realmente no califica como lenguaje de programación-e
?Cargador ejecutable UNIX, 10 bytes
Si no le importa el spam en el error estándar, puede hacerlo un byte más corto:
fuente
cat
. Y supongo que si quieres ser muy específico, uncat
programa simplemente se imprime solo y es compatible con todos los formatos de archivo existentes :)sudo install /bin/cat /c
. Ya sabes, por si acaso/bin
no está en el sistema de archivos raíz. Tengo que tener esocat
en un solo usuario ...C, 52
Por supuesto, esto lee el código fuente y no el programa compilado, supongo que está dentro de las especificaciones.
fuente
printf
lugar deputs
evitar una nueva línea final.puts
se puede usar, solo necesitaread
menos caracteres.PHP, 21 bytes
file
lee un archivo línea por línea en una matriz y el archivo solo tiene una línea. Esto ahorra un byte en comparación conreadfile(__FILE__)
.fuente
readfile
es también 21:<?readfile(__FILE__);
.<?=
Perl, 15 bytes
¡Guardado 3 bytes gracias a @ ThisSuitIsBlackNot !
fuente
open 0;print<0>
0
supuestos$0
entonces?perldoc -f open
: "Como acceso directo, una llamada de un argumento toma el nombre de archivo de la variable escalar global del mismo nombre que el$ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
Perl 6, 20 bytes
No he trabajado con Perl 6 por mucho tiempo, así que no estoy seguro de si hay algún truco para hacerlo más corto.
fuente
osascript (AppleScript desde la línea de comando),
403332 bytesEjecutando en un archivo llamado a con
osascript a
.Obtiene el primer párrafo (línea) del archivo y lo imprime en STDOUT con una nueva línea final, por lo tanto, la nueva línea en el código.
fuente
read path to me
Parece funcionar para mi. El Cap.Python 2, 32 bytes
Hay una nueva línea al final del archivo.
Python 3, 33 bytes
Hay una nueva línea al final del archivo.
Gracias a feersum por detectar un problema y suministrarlo
__file__
, Loovjo por un nuevo enfoque de la solución Python 2 que ahorró 17 bytes, y Skyler por una solución que ahorró otro byte y funcionó tanto en Python 2 como en 3 (pendiente deprint
ser una función en Python 3)!Enlace de documento para
readline
fuente
end
parámetro.print
?print(open(__file__).readline())
seguido de una nueva línea.Lote,
9 98 bytesSalvó un byte gracias a @Joshua
fuente
Python 2.7, 30 bytes
Editar: solo para ser claros, se supone que el código anterior tiene una nueva línea al final como el byte 30. No estoy familiarizado con Markdown lo suficiente como para descubrir cómo mostrarlo en el bloque de código.
Estoy usando el mismo truco aquí que el de mi presentación en C. Esto lee todo el archivo fuente, excluyendo la nueva línea final para dar cuenta de la nueva línea adicional que se
print
agregará a la salida.fuente
print
no sea extraña.Java,
212196 bytes (171 bytes con reglas de codificación duros cuestionables)¡Gracias a @Cruncher por acortarlo en ~ 15 bytes!
No tengo dudas de que esto se puede jugar al golf.
O, otro método, usando el método estático (y el nombre de la clase), obtengo 171 bytes. Sin embargo, no estoy seguro de si esto califica como codificado.
Utiliza un constructor para obtener el nombre de la clase mediante un método no estático. El uso de un método estático (
A.class.getName()
) estaba realmente codificado, así que utilicé la forma 'adecuada'. UsandoA.class.getName()
, este código se acorta a 171 bytes.Versiones legibles:
Usando constructor y
this.getClass()
:Usando el método estático
A.class.getName()
:Toma todos los bytes del archivo a la vez y lo envía a STDOUT. Muy claro.
fuente
A.class.getName()
?AutoIt, 34 bytes
Se envía al portapapeles:
fuente
Rubí, 14
fuente
.
para evitar paréntesisIr,
111105bytesMi primer código de golf en Go: supongo que solo algunos trucos que puedes usar aquí.
fuente
PowerShell,
39363125 BytesTan apretado como puedo conseguirlo:
gc $MyInvocation.MyCommand.Path | oh
Respaldado por la demanda popular, esto se ha cambiado a:
imprime en la salida estándar actual del
shell del host.fuente
gc $MyInvocation.MyCommand.Path
es suficiente. Lo imprimirá automáticamente.gc
era un alias y que solo iba a usarcat
, así que tenías un byte allí de todos modos.gc $PSCommandPath
para 17 bytes. El problema que veo es que esto escupe una nueva línea (que no existe en la fuente). Es ambiguo ahora si la nueva línea final está bien o no ... dependiendo de cómo eso rige, es posible que tengamos que hacer algo engañosogc $PSCommandPath|write-host -n
para 31 bytes.Rubí, 15 bytes
Fuente: https://stackoverflow.com/questions/2474861/shortest-ruby-quine
fuente
C, 49 bytes
Editar: para aclarar, el byte 49 es una nueva línea.
Esto lee el código fuente menos la nueva línea al final para dar cuenta de la nueva línea que se
puts
agregará al final de la salida.fuente
int main() {*0;}
podría funcionar incluso en compiladores existentes, ya que contiene un comportamiento indefinido. Del mismo modo, la solución de xsot podría funcionar en compiladores existentes, ya que contiene un comportamiento indefinido. Ninguno de los dos tiene la garantía de resolver el problema. (Aunque es probable que xsot sea más probable que lo haga, podría bloquearse con la misma facilidad). Mi argumento real es que debemos permitir soluciones que dependan de un comportamiento no especificado o dependiente de la implementación, pero no de un comportamiento indefinido.Mathematica, 16 bytes
Ejecútelo en modo script .
fuente
Pyth, 25 bytes
Esto lee su nombre de archivo. Básicamente, busca argv, abre el archivo correspondiente a su último argumento e imprime su primera línea.
fuente
h'$__file__$
?NameError: name '__file__' is not defined
. Pyth se compila en Python, y luego se ejecuta la cadena resultante. Así que no esperaría que eso funcione.Ir, 133 bytes
fuente
r"runtime"
.> <> , 13 bytes
Probado tanto en intérpretes en línea como fuera de línea. El
g
comando es el más cercano a poder leer desde el archivo fuente y si no cuenta para el propósito de este desafío, marcaré mi entrada como no competitiva; Creo que normalmente se considera "trampa" para quines.Pruébalo en línea.
fuente
Haskell, 63 bytes
¡Para la ciencia!
fuente
runhaskell
comando. Sin embargo> <> , 31 bytes
Descargo de responsabilidad: no hay E / S de archivo en> <>, sin embargo, pensé que sería interesante mostrar su E / S de espacio de código heredado de Befunge, uno de los idiomas que inspiró> <>.
Un Quine de auto lectura que hice hace algún tiempo, puedes probarlo aquí .
Acabo de ver que hay una quine de lectura más corta> <> . Si bien es claramente mejor en los estándares de código de golf, me gustaría señalar que tiene una longitud de código codificada, mientras que la mía copiaría líneas o columnas de código adicionales (siempre que no rompan el código original).
fuente
F #, 54 bytes
Uso:
fuente
Perl 5,
1513 bytesCrédito a la solución Bash por inspirar esto:
EDITAR: No necesita el punto y coma ni el primer espacio.
fuente
cat
, presente y encontrable en el$PATH
. Pero si está presente, se puede suponer como un comando disponibleperl
, entonces, ¿por qué no?Node.js,
6663 bytesNo usa
console.log
, que agrega una nueva línea.fuente
p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
console.log(require('fs').readFileSync(process.argv[1]))\n
para 57 bytes?test.js
. Es válido invocarlo ejecutandonode test
, lo que hará que esto arroje un error.C, 31 bytes
La solución bash es tan corta, entonces ¿por qué no basar una solución C en ella?
fuente
Haskell , 49 bytes
Pruébalo en línea!
(GHC) Haskell tiene una extensión para usar el preprocesador C (comúnmente utilizado para la portabilidad entre versiones y arquitecturas). Esperemos que se explique por sí mismo.
fuente
HTML con JavaScript, 115 bytes (realmente no cuenta)
¿Esto cuenta? No me importa, fue divertido :)
Técnicamente no abre un archivo. También es un documento HTML5 bien formado. XMLSerializer fue la única herramienta que también devolvió la parte DOCTYPE, pero no es estándar. Aún así, funciona en Chrome y Firefox, y apuesto a otros navegadores.
Y como extra:
JavaScript, 41 bytes
fuente