Observador veterano, postador iniciante. Então aqui vai.
Na página da Wikipedia para quine , ele diz que "um quine é considerado 'trapaceiro' se observar seu próprio código-fonte". Sua tarefa é criar um desses "truques" que lê seu próprio código-fonte.
Isso é código-golfe , então o código mais curto em bytes - em cada idioma - vence. Isso significa que um script Pyth de 5 bytes não superaria um script Python de 21 bytes - mas um script Python de 15 bytes.
Você deve usar a E / S do arquivo para ler o código-fonte, para que o seguinte código JavaScript, retirado da página oficial da Wikipedia, seja inválido:
function a() {
document.write(a, "a()");
}
a()
Ele deve acessar o código fonte do arquivo no disco .
Você não tem permissão para especificar o nome do arquivo. Você deve fazê-lo detectar o próprio nome do arquivo.
Todo mundo está limpo? Ir!
Respostas:
Zsh , 4 bytes
O shell Z possui funcionalidades felinas incorporadas. O quarto caractere é um avanço de linha.
Experimente online!
O código não depende de forma alguma do nome do arquivo; funciona mesmo que o nome do arquivo contenha caracteres especiais, como espaços ou novas linhas.
Execução de teste
fonte
feline functionalities
:)Bash, 6 bytes
Basicamente.
fonte
cat
não anexa uma nova linha (pelo menos no meu sistema).cat
imprime o conteúdo do arquivo fornecido byte por byte.cat
solução, em vez de umabash
solução? E gato realmente não qualificar como linguagem de programação-e
?Carregador executável UNIX, 10 bytes
Se você não se importa com spam em erro padrão, pode reduzi-lo em um byte:
fonte
cat
. E eu acho que se você quer ser muito específico, umcat
programa simplesmente imprime em si, e é compatível com todos os formatos de arquivo na existência :)sudo install /bin/cat /c
. Você sabe, apenas no caso de/bin
não estar no sistema de arquivos raiz. Tenho que ter issocat
em um único usuário ...C, 52
Obviamente, isso lê o código fonte e não o programa compilado - presumo que esteja dentro das especificações.
fonte
printf
vez deputs
evitar uma nova linha à direita.puts
pode ser usado, você só precisa deread
menos caracteres.PHP, 21 bytes
file
lê um arquivo linha por linha em uma matriz e o arquivo possui apenas uma linha. Isso economiza um byte em comparação comreadfile(__FILE__)
.fonte
readfile
é também 21:<?readfile(__FILE__);
.<?=
Perl, 15 bytes
Guardado 3 bytes graças a @ ThisSuitIsBlackNot !
fonte
open 0;print<0>
0
assume$0
então?perldoc -f open
: "Como atalho, uma chamada de argumento único leva o nome do arquivo da variável escalar global com o mesmo nome que o arquivo:$ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
"Perl 6, 20 bytes
Eu não trabalho com Perl 6 há muito tempo, então não tenho certeza se existem truques para tornar isso mais curto.
fonte
osascript (AppleScript na linha de comando),
403332 bytesExecutando em um arquivo chamado a with
osascript a
.Obtém o primeiro parágrafo (linha) do arquivo e o imprime em STDOUT com uma nova linha à direita, portanto a nova linha no código.
fonte
read path to me
Parece funcionar para mim. El Cap.Python 2, 32 bytes
Há uma nova linha no final do arquivo.
Python 3, 33 bytes
Há uma nova linha no final do arquivo.
Graças ao feersum por capturar um problema e fornecer
__file__
, Loovjo por uma nova abordagem da solução Python 2 que economizou 17 bytes, e Skyler por uma solução que economizou mais um byte e funcionou tanto em Python 2 quanto em 3 (pendenteprint
sendo uma função em Python 3)!Doc link para
readline
fonte
end
parâmetro.print
?print(open(__file__).readline())
seguido por uma nova linha.Lote,
98 bytesGuardou um byte graças a @Joshua
fonte
Python 2.7, 30 bytes
Edit: Só para esclarecer, o código acima deve ter uma nova linha no final como o 30º byte. Não estou familiarizado com a remarcação suficiente para descobrir como exibi-la no bloco de código.
Estou usando o mesmo truque aqui que o da minha submissão em C. Isso lê todo o arquivo de origem, excluindo a nova linha à direita, para dar conta da nova linha adicional que
print
será anexada à saída.fonte
print
não seja estranha.Java,
212196 bytes (171 bytes com regras de codificação questionáveis)Obrigado ao @Cruncher por reduzi-lo em ~ 15 bytes!
Não tenho dúvida de que isso pode ser jogado.
Ou, outro método, usando o método estático (e o nome da classe), obtenho 171 bytes. Não tenho certeza se isso se qualifica como codificado, no entanto.
Usa um construtor para obter o nome da classe por um método não estático. O uso de um método estático (
A.class.getName()
) era realmente codificado, então eu usei o caminho 'adequado'. UsandoA.class.getName()
, esse código reduz para 171 bytes.Versões legíveis:
Usando construtor e
this.getClass()
:Usando o método estático
A.class.getName()
:Agarra todos os bytes do arquivo de uma só vez e o envia para STDOUT. Bem direto.
fonte
A.class.getName()
?AutoIt, 34 bytes
Emite-se na área de transferência:
fonte
Ruby, 14
fonte
.
de parênteses EvitarGo,
111105 bytesMeu primeiro código de golfe em Go - apenas alguns truques que você pode usar aqui, eu acho.
fonte
PowerShell,
39363125 bytesTão apertado quanto eu consigo:
gc $MyInvocation.MyCommand.Path | oh
Apoiado pela demanda popular, este foi alterado para:
imprime para
hospedara saída padrão atual doshell.fonte
gc $MyInvocation.MyCommand.Path
basta. Ele será automaticamente impresso.gc
era um apelido e só ia usarcat
, então você tinha um byte comigo lá de qualquer maneira.gc $PSCommandPath
por 17 bytes. O problema que vejo é que isso cospe uma nova linha (que não existe na fonte). Agora é ambíguo se a nova linha à direita estiver correta ou não ... dependendo de como essas regras, talvez seja necessário fazer algo complicadogc $PSCommandPath|write-host -n
por 31 bytes.Ruby, 15 bytes
Fonte: https://stackoverflow.com/questions/2474861/shortest-ruby-quine
fonte
C, 49 bytes
Editar: para esclarecer, o 49º byte é uma nova linha.
Isso lê o código fonte menos a nova linha no final, para dar conta da nova linha, que
puts
será anexada ao final da saída.fonte
int main() {*0;}
pode funcionar mesmo em compiladores existentes, pois contém comportamento indefinido. Da mesma forma, a solução do xsot pode funcionar em compiladores existentes, pois contém comportamento indefinido. Nenhum deles é garantido para resolver o problema. (Embora seja mais provável que o xsot's faça isso, ele pode travar com a mesma facilidade). Meu argumento real é que devemos permitir soluções que dependam de comportamento dependente da implementação ou não especificado, mas não de comportamento indefinido.Mathematica, 16 bytes
Execute-o no modo de script .
fonte
Pitão, 25 bytes
Isso lê seu nome de arquivo. Essencialmente, ele pesquisa argv, abre o arquivo correspondente ao seu último argumento e imprime sua primeira linha.
fonte
h'$__file__$
?NameError: name '__file__' is not defined
. Pyth é compilado em Python e, em seguida, a sequência resultante é executada. Então, eu não esperava que isso funcionasse.Go, 133 bytes
fonte
r"runtime"
.> <> , 13 bytes
Testado nos intérpretes online e offline. O
g
comando é o mais próximo de poder ler o arquivo de origem e, se não contar para o objetivo deste desafio, marcarei minha entrada como não concorrente; Eu acredito que normalmente é considerado "trapaça" para os peixes.Experimente online.
fonte
Haskell, 63 bytes
Pela ciência!
fonte
runhaskell
comando Muito legal> <> , 31 bytes
Isenção de responsabilidade: não há E / S de arquivo em> <>, no entanto, pensei que seria interessante mostrar sua E / S de espaço de código herdada do Befunge, um dos idiomas que inspirou> <>.
Uma Quine de leitura automática que fiz há algum tempo, você pode experimentá-la aqui .
Acabei de ver que existe um quine mais curto de leitura automática . Embora seja claramente melhor nos padrões de código-golfe, gostaria de salientar que ele possui um código codificado, enquanto o meu copia linhas ou colunas adicionais de código (desde que não quebre o código original).
fonte
F #, 54 bytes
Uso:
fonte
Perl 5,
1513 bytesAgradecemos à solução Bash por inspirar isso:
Edição: Não precisa de ponto e vírgula ou primeiro espaço.
fonte
cat
, presente e localizável no$PATH
. Mas se estiver presente, pode ser assumido como apenas um comando disponível paraperl
, então por que não.Node.js,
6663 bytesNão usa
console.log
, que acrescenta uma nova linha.fonte
p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
console.log(require('fs').readFileSync(process.argv[1]))\n
57 bytes?test.js
. É válido invocá-lo executandonode test
, o que causará um erro.C, 31 bytes
A solução bash é tão curta, então por que não basear uma solução C nela?
fonte
Haskell , 49 bytes
Experimente online!
(GHC) Haskell possui uma extensão para usar o pré-processador C (normalmente usado para portabilidade entre versões e arquiteturas). Esperamos que seja auto-explicativo.
fonte
HTML com JavaScript, 115 bytes (realmente não conta)
Isso conta? Eu não me importo, foi divertido :)
Tecnicamente, não abre um arquivo. Também é um documento HTML5 bem formado. O XMLSerializer foi a única ferramenta que também retornou a parte DOCTYPE, mas não é padrão. Ainda assim, ele funciona no chrome e no firefox, e aposto em outros navegadores.
E como um bônus:
JavaScript, 41 bytes
fonte