ou: Construa uma coluna vertical
Inspirado por Tome uma posição contra longas filas .
Sua tarefa é construir um quine vertical com o menor comprimento possível de linha.
Pontuação
O menor comprimento da linha (excluindo novas linhas) vence, com os critérios de código de golfe como desempate.
O comprimento da linha é determinado como a linha mais longa do seu programa, excluindo o caractere de quebra de linha.
Por exemplo:
$_=
Q.
P
tem um comprimento de linha de 3 e uma contagem de bytes de 8, enquanto:
Q
$
_
P
Tem um comprimento de linha de 1 e uma contagem de bytes de 7 (assumindo que não há nova linha à direita).
Regras
Quines devem atender à definição da comunidade de um quine .
As brechas padrão são proibidas.
code-challenge
quine
source-layout
Dom Hastings
fonte
fonte
Respostas:
Linguagem , comprimento da linha 0, ≈ 1,01 × 10 805 bytes
O código fonte consiste em
linefeeds, que codifica o programa brainfuck a seguir.
O código-fonte é quase idêntico ao Lenguage suavizado por radiação de jimmy23013 , menos o
.
no final, com a++++++++++.[-]
substituição.
para imprimir feeds de linha em vez de bytes nulos e as alterações correspondentes na seção de dados na linha 1.fonte
"about 1.75*10**76 yottabytes in ASCII"
]++++++++ ++.-->
JavaScript, comprimento da linha 1,
960956928 bytesVersão mais legível, que também é um quine (novas linhas externas removidas):
Explicação
Ufa. Aceite uma carona aqui, porque esta será uma jornada traiçoeira ...
Passei muito tempo tentando descobrir como resolver esse desafio com o comprimento 1 - sem incorporar (diretamente, de qualquer maneira), palavras-chave ou até funções de seta - antes de perceber que isso é facilmente possível com o JSF *** , que pode avalie qualquer código JavaScript e evite tokens de vários bytes. Mas uma solução JSF seria facilmente de milhares de bytes, se não dezenas ou centenas de milhares. Felizmente, não estamos limitados a apenas -
()[]+!
temos todos os ASCII à nossa disposição!Decidi começar jogando os elementos essenciais do JSF - os personagens que podem ser construídos em strings para "desbloquear mais recursos", por assim dizer. Não podemos usar strings diretamente para obter caracteres, pois isso exigiria linhas de comprimento 3. Então, em vez disso, roubamos um truque do JSF, obtendo alguns caracteres de literais que podem ser construídos com tokens de byte único:
A partir disso, podemos expandir para fora, começando com
[].find
, que é um objeto de Função. Convertendo isso para uma seqüênciafunction find() { ...
nos dá acesso ac
,o
, espaço (_
) e parênteses (y
ez
). Talvez mais importante, agora temos acesso à suaconstructor
, aFunction
função-que, inceptional que possa parecer, nos dá a capacidade de executar código através da construção de uma corda, passando-a paraFunction()
, em seguida, chamar a função gerada.Eu provavelmente mencionaria o método geral usado pelo próprio programa. A partir de 2015, o JavaScript tem esse recurso muito legal chamado " modelos marcados " , que não apenas permite novas linhas sem escape em cadeias de caracteres, mas também permite chamar uma função com uma literal de cadeia diretamente (de certa forma;
myFunc`abc`;
é aproximadamente equivalente amyFunc(["abc"])
). Se colocarmos a chamada de função como a última coisa no programa, a estrutura geral ficará assim:Tudo o que
func
precisa fazer é emitir seu argumento, seguido por um backtick, depois seu argumento novamente e um segundo backtick. Supondo que temos o argumentoa
e um backtick armazenadosf
, podemos fazer isso com o códigoalert(a+f+a+f)
. No entanto, no momento, estamos perdendo+
e o próprio bastão.+
(armazenado emP
) não é difícil; roubamos outro truque do JSF, construindo a string1e23
, convertendo em um número, depois voltando a uma string, dando"1e+23"
.Conseguir um backtick é um pouco mais complicado. No começo, tentei obter
String.fromCharCode
, mas encontrar umC
resultado quase tão difícil. Felizmente,atob
é fácil de obter (Function("return atob")()
;b
é gerado a partir de0+{}
, o que fornece[object Object]
) e pode fornecer qualquer caractere ASCII, se uma string mágica apropriada for encontrada. Um pequeno script me deu12A
como uma das opções, que podem ser convenientemente encontrados em12Array
(um pouco mais curto para gerar, graças a[].constructor[n+a+m+e]
;m
é encontrado em0 .constructor+0
:"function Number() { ..."
).Finalmente, juntamos tudo. Atribuímos o backtick à variável
f
, mas, como não podemos usá-lo diretamente na cadeia de funções, definimos a variávelq
como letraf
e, em vez disso, a usamos. Isso torna nossa string finala+l+e+r+t+y+a+P+q+P+a+P+q+z
, ou"alert(a+f+a+f)"
. Em seguida, alimentamos issoFunction()
, alimentamos o código final para o resultado e, voila, temos um código JavaScript com não mais que um caractere por linha!Minha cabeça está péssima no momento, por isso, pergunte sobre os erros que cometi ou sobre as coisas que perdi nesta explicação, e voltarei a responder depois de descansar um pouco ...
fonte
f=
linha.f
um único backtick. A linha em si é equivalente af=atob("12Array")[1]
. O outro truque é que,q
na verdade, é definido como a letraf
na primeira linha, para que naF(...)
linha eu possa usá-lo para colocar a letraf
na string avaliada, uma vez que a variávelf
não está mais definida para essa letra. Oa+l+e+r+t+y+a+P+q+P+a+P+q+z
é equivalente a"alert(a+f+a+f)"
.0+{}
e0[E]
restringir para obterb
em
.Haskell , comprimento da linha 6,
400343336 bytesExperimente online! Não tenho conhecimento de uma maneira de contornar
putStr
, portanto, o comprimento da linha de 6. Os chavetas externas permitem livrar-se da recuo necessária de outra maneira após uma nova linha em uma única declaração.fonte
> <> , 22 bytes, comprimento de linha 1
Experimente online!
-6 bytes graças a Emigna .
fonte
CJam , comprimento da linha 1,
1613 bytesExperimente online!
É um pequeno milagre que a inserção de novas linhas no
quine padrãoainda mais curto{"_~"}_~
"_p"␊_p
faça o que é certo. (Obrigado, Martin!) A nova linha à direita é necessária.Explicação (com • como nova linha)
Na terminação, o que resta na pilha é impresso (
•_•p•
), produzindo uma saída total"•_•p•"••_•p•
.fonte
Haskell + CPP, comprimento da linha 2,
705237 bytesExperimente online! O uso do sinalizador
-CPP
que habilita o pré-processador C nos permite usar uma barra invertida no final de uma linha para continuar na próxima linha.O código real é
main=putStr$(:"\\\n")=<<s++show s;s="<data>"
.Edit: Um casual -468 bytes graças a Ørjan Johansen !
fonte
main=putStr$(:"\\\n")=<<s++show s;s="<data>"
. Experimente online!Ferrugem, comprimento da linha: 5, bytes:
301299Experimente online
Apesar da aparência, essa não é uma linguagem de programação esotérica, há muito ruído na linha de formato.
O comprimento vertical de 5 foi escolhido para poder usar
print
. Eu não acho que exista uma maneira de imprimir que tenha menor comprimento vertical, declarando que as funções C usam aextern
palavra-chave,stdout
tem 6 bytes de comprimento,write
5 bytes de comprimento,no_main
7 bytes de comprimento (main é geralmente uma função;)).fonte
cargo fmt
que nem ajudaria aqui ...05AB1E , Comprimento da linha: 1, Contagem de bytes: 43
Experimente online!
fonte
Japt , comprimento da linha 1, 20 bytes
Baseado no padrão japonês da ETHproductions .
Experimente aqui!
fonte
JavaScript (ES6), comprimento da linha 3, 17 bytes
fonte
Vermelho , comprimento de linha: 10, 49 bytes
Experimente online!
Este é de fato um Rine Quine
Explicação: O vermelho / Rebol
mold
segue o estilo de codificação de colocar 4 espaços deslocados.fonte
RProgN , 3 bytes, comprimento de linha 1
Experimente online!
Uma cópia da resposta de Dennis aqui (faça um voto positivo também)
Isso está de acordo com nossa definição atual de quine adequada, pois o primeiro 0 codifica o segundo 0 e vice-versa.
fonte
RProgN 2 , L = 1, B = 15 bytes
Isso é equivalente ao programa:
Demolir
«
primeiro envia uma função que representa implicitamente o restante do programa para a pilha e continua a execução.Ø.
anexa uma string vazia à função, que a especifica. Isso sempre será estrito como o programa equivalente, devido às novas linhas serem não operacionais.`\n-
Remove todas as novas linhas da string, agora parecendo«Ø.`=S`.
.S
em seguida, converte-o em uma pilha de caracteres únicos e`\n.
junta-se à pilha por novas linhas, retornando o programa esperado.Experimente online!
fonte
Subcarga , comprimento da linha 1, 20 bytes
Experimente online!
Este é apenas o quine padrão do Underload com as novas linhas anexadas. Requer uma implementação como a do TIO, que ignora caracteres de comando desconhecidos.
A parte in
()
é uma string literal colocada na pilha,:
duplica-a, colocaa
a entrada superior da pilha entre parênteses eS
imprime.fonte
Perl 5 , 259 bytes
Experimente online!
Verificação .
fonte
Javascript (ES6 REPL), programa completo, comprimento de linha: 3, contagem de bytes: 31
Esta é uma porta da resposta do @ kamoroso94 para um programa completo independente.
Se alguém encontrar uma maneira de remover alguns bytes sem adicionar mais ao comprimento da linha, fique à vontade para comentar :)
fonte
Pip , comprimento da linha 1, 35 bytes
Experimente online!
Com base no pip quine mais curto conhecido
V Y"`V Y`.RPy"
,. A principal dificuldade em comprimir o comprimento da linha 1 éRP
que não pode ser dividido em duas linhas. Mas neste caso, tudo o queRP
(repr) faz é colocar a cadeia entre aspas duplas, o que podemos fazer diretamente.Aqui está uma explicação baseada em uma versão horizontal:
fonte
Befunge-98 , 41 bytes
Experimente online!
Realmente, apenas um quine normal virou de lado, com algumas coisas extras para imprimir novas linhas.
fonte