Escreva um programa que se conecte a este site, baixe a própria resposta em que é publicado, extraia seu próprio código-fonte e o imprima. A saída deve ser idêntica ao código fonte. O código mais curto (em bytes) vence.
Regras:
- Não são permitidos encurtadores de URL.
- A resposta deve ter um formato regular - um cabeçalho com o nome e o tamanho do idioma, descrição opcional, bloco de código, descrição e explicação opcionais. Não são permitidos delimitadores não naturais.
- A saída deve se originar do bloco de código real publicado no site.
- A funcionalidade não deve depender da posição na lista de respostas; deve funcionar mesmo se houver várias páginas e a resposta não estiver na primeira.
- Novo: nota especial para respostas que devem ser executadas em um navegador: não há problema em executá-las no domínio codegolf (para obedecer à política de mesma origem), mas o domínio e o caminho devem ser incluídos na solução para faça justo.
code-golf
quine
internet
self-referential
aditsu
fonte
fonte
Respostas:
Navegador Bash + coreutils + Lynx, 61 bytes
Obrigado a @FDinoff pelas dicas:
fonte
codegolf.stackexchange.com/posts/28164/body
E ignora comentários. Eu também acho que dentro das regras que você pode usá-lo ...Ruby,
155186195148138 13811097 caracteresEu tive que criar uma linha, porque, caso contrário, produziria novas linhas como em
\n
vez de novas linhas reais.+31 caracteres porque eu não notei que alguns caracteres estavam sendo escapados.+9 caracteres para se livrar da barra invertida irritante.A explicação
Vamos embelezar isso um pouco primeiro. No entanto, vou ter que usar uma notação ... interessante neste código. Não posso usar ponto e vírgula neste post, por razões explicadas mais adiante; portanto, em vez disso, usarei
{SEMI}
no lugar de ponto e vírgula.Tudo bem, agora vamos passar por isso. As duas primeiras linhas são bastante auto-explicativas - elas buscam o texto HTML desta resposta.
Agora, a última linha é a interessante aqui. Você vê esse ponto e vírgula aparentemente inútil no final do código? É absolutamente necessário, e aqui está o porquê.
Primeiro,
resp.match
extrai o código a ser impresso. A expressão regular que ele usa para isso é o truque:/req.+{SEMI}/
. Ele pega o início do código,REQuire'net/http'
procurando porreq
(re
iria pegar o meuREputation
). Em seguida, ele encontra o final do código pesquisando um ponto e vírgula! Como+
é ganancioso por padrão, ele continuará até encontrar o ponto-e-vírgula que significa o final do código. Veja por que não consigo mais usar ponto e vírgula?Depois disso, não tenho mais que escapar, graças à correção de Ventero de não usarNão há mais necessidade disso por causa do novo URL. Depois disso, o código original foi recuperado! (Observação: também não posso usar o "e" comercial, porque ele é codificado em HTML, o que faz com que um ponto-e-vírgula seja criado.)\
mais. Tudo o que tenho a fazer é consertar a{AMPERSAND}
mudança{AMPERSAND}amp{SEMI}
, o que pode ser alcançado simplesmente removendo aamp{SEMI}
peça.fonte
puts
; poderia ser corrigido comprint
mas meh. Apenas finja que há uma nova linha no código, mesmo que o SE não consiga mostrá-la.http://codegolf.stackexchange.com/a/28159
daria o mesmo resultado que o seu e salvaria alguns caracteres.PowerShell -
6962fonte
irm
é o alias paraInvoke-RestMethod
e foi introduzido no núcleo do PowerShell v3. computerperformance.co.uk/powershell/powershell3-alias.htmJavaScript -
1231221019592918786114É executado no console do seu navegador nesta página. Testado no Chrome
e Firefoxmais recentes .edite: +28 bytes para adicionar o domínio completo.
O Firefox não gosta mais do meu truque de URL Regex com esta atualização :(
Aqui está a solução inovadora de 86 bytes:
fonte
codegolf.stackexchange.com/
ao URL.Ruby + wget +
gunzip,159868271Usando a dica de @FDinoff para usar
http://codegolf.stackexchange.com/posts/28173/body
.Testado. Obrigado a @ace e @Bob pela otimização da linha de comando.
fonte
wget
, como emwget -qO- url
. Além disso, no bash você não precisa de aspas duplas para o URL, portanto, isso também pode funcionar para você.http://
.CJam - 53
Estou criando este wiki da comunidade, pois estou respondendo à minha própria pergunta e realmente não quero competir: p
Créditos ao FDinoff pela escolha da URL.
fonte
);
não parece muito risonho para mim ...Rebmu, 91 caracteres
Devido ao Catch-22, tenho que postar para obter o URL desta resposta. : - / Ok, entendi.Rebmu é um dialeto de Rebol, e você pode ler tudo sobre ele . O Rebol equivalente aqui seria:
O PARSE da Rebol é uma espécie de resposta altamente alfabetizada ao RegEx. Inicia uma posição do analisador da entrada (que pode ser de qualquer série, incluindo blocos estruturais ... dados binários ... ou tipos de string) . As regras são um idioma para o movimento da posição de análise.
Tags e URLs são realmente apenas strings no idioma. Mas eles são "aromatizados" e, como o Rebol é digitado dinamicamente, você pode verificar esse tipo. Leia, por exemplo, sabe que, se você fornecer uma string com sabor de URL, ela deverá ser enviada para um manipulador de esquema para fazer a leitura. (Nesse caso, aquele registrado para HTTP). Como você recebe UTF-8 bytes por padrão, usamos a cadeia de caracteres para decodificar isso e obter uma série de pontos de código em uma cadeia Unicode normal.
No caso do dialeto de análise, encontrar um tipo de tag corresponde apenas como se fosse uma string que se parecesse com a tag. THRU é uma instrução que significa "pular até que a regra a seguir seja correspondida e, em seguida, coloque a posição da correspondência no final do que você acabou de corresponder". (TO é o análogo que corresponde, mas deixa a posição de análise antes do elemento).
Então, passamos pelo
<a name="28154">
. Em seguida, passamos pela próxima ocorrência de<code>
, com nossa posição de análise agora localizada logo após a>
. O comando COPY do PARSE nos permite copiar dados para outra regra, neste caso, essa regra é[TO </code>]
... então entramos na variável C tudo até pouco antes disso<
.Legal , né? :-)
Tecnicamente, eu poderia
TO "</"
economizar mais, por exemplo, procurando e economizando três caracteres - não há necessidade de combinar com a</code>
tag final quando</
isso aconteceria. Argumentos semelhantes poderiam ser feitos para a tag start. Mas Rebmu é sobre golfe alfabetizado ... mesmo que você ache estranho no começo!ATUALIZAÇÃO : o
/body
truque está pronto, mas da mesma forma vou deixar como está ... porque acho que é mais educativo dessa maneira.fonte
Java agora 634, 852, era 1004
O código foi atualizado; obrigado por sugestões. Golfed: agora substitui & gt por>
Ao enviar para o teste, editarei e tentarei jogar em breve. Precisava alterar x> 1 para x> 2 porque a sequência de teste também está no meu código. Nota: O código golf substitui o símbolo> por & gt.
fonte
//bacchus
?*
importações para economizar muito código.throws Exception
ao invés de tentar lidar com qualquer coisa. Além disso, eu acho que usando um scanner em vez de um BufferedReader seria mais simples, especialmente porque você pode definir o delimitador para//bacchus
, o que tornaria as coisas um pouco mais fácil ...Python,
175167 bytesIsso usa duas bibliotecas externas; Eu não li que não era autorizado.
Código mais longo, mas mais bonito:
fonte
questions
URL pode ser substituído porq
: #http://codegolf.stackexchange.com/q/28154
bs4, requests
(linha 1) pode ser removido para reduzir 1 byte.JavaScript, 228
É executado nesta página.
fonte
if(this.readyState == this.DONE)
função interna.Haskell,
563613 bytesTestado. Possui suporte à página por meio do recurso "postagens mais antigas". Usa estrutura de linhas quinas para encontrar o que imprimir. O
import Control.Monad
é apenas porque>>=
gera>
em HTML.fonte
Javascript + jQuery,
87, 67Não tenho certeza se posso usar o jQuery, mas:
Javascript + jQuery, se for executado nesta página:
27, 25Por diversão, se seria executado aqui:
$('[id$=28268] pre').html()
fonte
$('body').load('//codegolf.stackexchange.com/posts/28268/body pre')
w3m 45 caracteres
fonte
Dardo, 164
Eu pensei que eu tentaria isso em Dart, é muito divertido de usar IMO.
Isso pode ser executado no console do DartEditor, mas requer o pacote http adicionado em pubspec.yaml
Versão não destruída:
fonte
R 114 caracteres
Nenhuma mágica real aqui: leva o valor do campo entre as tags html
<code></code>
. Usa bibliotecaXML
(como se pode ver no código, obviamente). Produz o resultado como stdout.fonte
Java,
300294Uma versão melhorada da resposta de bacchusbeale que:
Scanner
para evitar ter que passar por cima da entradaAtualizada:
<code>[...]</code>
como delimitadores para procurar (na verdade, usando a expressão regular "./?[cξode\W", para evitar ter que decodificar<
e>
- o "\ W" é necessário, e não o mais curto "." para evitar que ele corresponda parte do URL à postagem, infelizmente, que custa 2 caracteres, e os colchetes em torno de c impedem que o regex corresponda a si próprio).fonte
w3m 55 bytes
Baseado em @DigitalTrauma
fonte
Ruby,
237215146132fonte
Processamento, 90
Edit: Finalmente entendi!
fonte
bash + awk, 71 bytes
fonte
http://
.Javascript, 138
Isso funciona assumindo que a página carrega menos de 99 ms. Ele também deve ser executado através de um console aberto em uma página codegolf.SE, devido à mesma política de origem.
fonte
http://codegolf.stackexchange.com/a/28160
vez dehttp://codegolf.stackexchange.com/a/28160/12551
Perl 5.10,
155127122117 bytesUsando
XML::LibXML
.fonte
Shell e xmllint, 82 bytes
fonte
Python, 164
Funciona extraindo o texto entre as tags de código. É bastante longo, mas sempre funcionará corretamente, a menos que a página html seja editada diretamente ou um novo bloco de código seja adicionado antes do abaixo (ter um bloco de código depois não deve afetar a saída do programa).
fonte