Escreva um programa capaz de gerar-se aleatoriamente.
Isso deve ser feito com base nos tokens usados em seu código-fonte. Se o código-fonte do seu programa for composto por 50 tokens exclusivos e tiver 60 tokens, o programa deverá gerar 60 tokens nos quais cada token for escolhido aleatoriamente dentre um dos 50 tokens exclusivos.
Por exemplo, este programa teria uma chance em 50 ^ 60 de se reproduzir.
O que é um token? Isso depende do idioma. Por exemplo, identificadores ( foo_bar
), palavras-chave ( while
) e números ( 42
) contariam como tokens na maioria dos idiomas. Espaço em branco não conta na maioria dos idiomas.
Regras adicionais:
- A saída pode conter apenas tokens encontrados no código-fonte do programa, separados pelo delimitador apropriado
- A saída deve ter o mesmo comprimento que o código-fonte do programa, contado por tokens
- Apenas uma linguagem de programação pode ser usada
- O código-fonte deve ter pelo menos três tokens exclusivos
- Excluir comentários do código-fonte
- O programa deve ter apenas uma chance em U ^ L de se reproduzir
Pontuação: O programa que tem a melhor chance de se reproduzir ganha.
code-challenge
quine
Austin Henley
fonte
fonte
Respostas:
Python 2, 3 ^ -3 = 0,037
exec
abuso é bastante útil para reduzir a contagem de tokens. Agora atualizado para não ler o arquivo de origem!O extra
''
entreexec
e a cadeia gigante de aspas triplas é apenas para preencher a contagem de tokens até o mínimo necessário de 3. Ela é mesclada na segunda cadeia devido à concatenação literal implícita da cadeia.Versão original, abrindo o arquivo de origem:
Estritamente falando, a gramática Python coloca um token ENDMARKER no final do arquivo de origem, e não podemos produzir um arquivo de origem com os ENDMARKERs espalhados aleatoriamente. Fingimos que não existe.
fonte
".]';(?3 3 3){]`".;~({:,],{:,],6#{:)'';(?3 3 3){]`".;~({:,],{:,],6#{:)'''''''
.Javascript, 102 tokens, 33 exclusivo, 7,73 × 10 -154
Note, este é um verdadeiro quine. Ele não lê o arquivo ou usa
eval
ouFunction.toString
fonte
Python: P (gerando programa em uma avaliação) = 3.0317 * 10 ^ -123
34 fichas exclusivas, 80 fichas no total. Observe que há um espaço no final de cada linha.
Saída de amostra:
Agradeço à outra solução Python do user2357112 por me lembrar de descartar o último token e usar o
__file__
que eu ignorava anteriormente.fonte
J - 1 em 11 17 = 1,978 x 10 -18
J tem várias ferramentas úteis para realizar esse tipo de trabalho.
Antes de tudo, qualquer sequência de números separada por espaço é um token . Significa uma matriz unidimensional desses números. É assim que o lexer de J funciona. A propósito, são dezessete
11
s, se alguém estiver curioso.(,,,{:,{:)'QUINE'''
é um truque de quine comum em J, feito para usar o menor número possível de tokens:{:
significa Tail , então ele anexa a string a si próprio e adiciona duas cópias do último caractere ao final. Como o último caractere é uma aspas simples (J usa seqüências de caracteres no estilo Pascal), o resultado éQUINE'QUINE'''
.;:
é um tokenizador e divide uma sequência de entrada como se fosse o código J, retornando uma lista de caixas. O comprimento deste resultado é 17.~.
pega todos os elementos exclusivos dessa matriz. O comprimento deste resultado é 11.?
é chamado de rolo . Para cada número inteiro em seu argumento, ele seleciona um número positivo aleatório maior ou igual a zero, menor que esse número. Então, aqui J gerará 17 números de 0 a 10, inclusive.{
usa os índices aleatórios para selecionar itens da nossa lista de tokens-in-boxes exclusivos.;
abre todas essas caixas e executa o resultado juntos.Alguns exemplos a seguir. As linhas recuadas são os prompts de entrada e as linhas alinhadas com o lado esquerdo são a saída do intérprete.
fonte
Postscript
essa foi engraçada
Existem 17 fichas exclusivas e 54 fichas no total, por aproximadamente 1 em 3,6e-67 de chance.
fonte
Espaço em branco,
3 ^ -2053 ^ -1893 ^ -1813 ^ -132 ~ = 10 ^ -63Este é um programa de espaço em branco que, quando propagado com caracteres aleatórios, tem uma chance de 1 em 3 ^ 132 de se reproduzir (3 tokens distintos, repetidos 132 vezes). Ele deve ser propagado com pelo menos 132 caracteres aleatórios quando executado (o espaço em branco não possui nenhuma função aleatória ou de data incorporada), por exemplo
some_whitespace_interpreter my_quine.ws <some_random_source >quine_output.ws
. A pontuação seria melhorada se o programa pudesse ser jogado mais, mas esse é o meu primeiro programa "em branco" de espaço em branco, então deixarei com minha quantidade escassa de golfe.Código de espaço em branco simples ou veja-o executar : (para experimentá-lo, clique em "editar", copie o material dentro das tags <pre>; deve ter 132 caracteres com EOL no estilo Unix)
Código anotado com qual comando é o que (tecnicamente não é um quine, pois não reproduz os comentários):
Se a semente for equivalente (os caracteres serão modificados 3 para serem convertidos em tokens), isso será bem-sucedido:
É um programa bastante simples, aproximadamente equivalente a este programa Ruby:
fonte
Perl, 27 tokens, P = 1,4779 x 10 -34
Última edição: use em
@ARGV=$0
vez deopen*ARGV,$0
para salvar um token.=
,/
,@
,$
)W
)Então eu acho que isso torna a probabilidade (pow (2,2 * 4) * pow (4,4)) / pow (27,27), em cerca de 1,48E-34.
Se o código-fonte estiver em um arquivo chamado
ARGV
, você poderá usar esta solução de 26 token com P = ~ 2.193 x 10 -31 :fonte
P = (4 * 2! + 4!) / 27!
que é de cerca de 1,7632684538487448 x 10 ^ -26Perl 6 ,1 dentro 33 = 0,037037 ...
(Eu sei que isso não é código-golfe, mas ...)
Experimente online!
Muito parecido com a resposta do Python, onde o primeiro token é uma literal de cadeia de caracteres que é avaliada. Os tokens são
Explicação:
fonte