Saída de um caractere aleatório para cada caractere do código fonte (conforme ilustrado abaixo). A probabilidade de cada caractere é sua frequência no código fonte original. Assim, a saída será um código-fonte falso, semelhante a um quine.
Especificação
- Restrições
- Aplicam-se restrições de quine padrão . Não há programas ou funções vazios. Também não é possível ler sua própria fonte.
- Saída
- O número de caracteres de saída deve ser exatamente o número de caracteres no código-fonte
- Cada caractere de saída deve ser escolhido aleatoriamente
- A probabilidade de escolher qualquer caractere é igual a
(occurrences in source) / (length of source)
- Isso significa que mesmo uma solução unária precisa escolher 'aleatoriamente' 1com probabilidade
1
. O que significa que a saída não pode ser codificada.
- Ganhando
- Isso é código de golfe, então o menor número de bytes ganha
Exemplo
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
a@!@ a - 1 a - 25% @@a@
! - 1 ! - 25%
@ - 2 @ - 50%
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
caBaDBcDaBDB a - 3 a - 25% aaaBBBBccDDD
B - 4 B - 33%
c - 2 c - 17%
D - 3 D - 25%
Respostas:
CJam , 14 bytes
Experimente online!
Explicação
Cada caractere aparece exatamente duas vezes, portanto, as probabilidades dos caracteres devem ser as mesmas.
fonte
Gelatina , 13 bytes
Experimente online!
Como funciona
fonte
Perl, 59 bytes
Usei um quine existente como base e modifiquei-o para imprimir caracteres aleatórios a partir do conteúdo de origem.
Uso
Salve como
faux-source-code.pl
e execute usando:Produz algo como o seguinte:
Em um breve teste, ~ 3% dos resultados do programa foram
eval
bem-sucedidos. Não sei o que isso diz sobre Perl ...fonte
eval
! Agradável! ;-)'
ouq//
,q{}
etc)!Japonês , 22 bytes
Teste online!
Como funciona
fonte
Pyth, 16 bytes
experimente online!
Contém cada caractere duas vezes, portanto, a probabilidade é a mesma que se cada um estivesse lá apenas uma vez.
fonte
PHP,
71140110124140120 120 bytescorrer com
php -d
ord
(mesma probabilidade como se eu dobrasse a string e adicionasse duas aspas);
Possivelmente pode ser jogado ainda mais, mas minhas tentativas de avaliar foram inúteis até agora.
Provavelmente não irei mais fundo aqui.
fonte
The probability of each character is its frequency in the original source code.
Posso estar errado, mas não parece que essa entrada atenda a esse requisito.syntax error, unexpected '<'
. Mas não estou familiarizado com PHP, como faço para testar isso?php
ouphp-cgi
sem nenhum sinalizador. Talvez você possa usar um heredoc.<?
para uso-d
.Python 2, 88 bytes
Todo o mérito real de chegar até aqui vai para mbomb007 - obrigado por sua ajuda (e o ponteiro sobre as barras invertidas)
fonte
n
caracteres), você precisa imprimirn
caracteres aleatórios. Onde a probabilidade de um símboloc
ser escolhido é igual a(number of times c occurs in your solution) / n
.exec("""s = 'from random import choice; print "".join([choice(s) for c in s])'; exec(s)""")
join
.s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec s
. Eu gostaria de ter pensado nisso.Ruby, 47 bytes
Isso é baseado no padrão
eval
quine:É um byte mais longo que o menor quine, mas geralmente é a melhor escolha para quines generalizados, porque qualquer cálculo feito na cadeia de código-fonte não precisa ser duplicado. Enquanto no quine usual, todo cálculo adicional precisa ir dentro e fora da string principal, só é necessário dentro da string principal para esse tipo de quine.
Quanto ao que o código realmente faz: após obter uma string que representa o código fonte inteiro, simplesmente selecionamos um caractere aleatório (selecionando um índice aleatório) 47 vezes e imprimimos cada caractere separadamente.
fonte
Wolfram Language / Mathematica, 109 bytes
saída de amostra:
Oh aqueles colchetes.
fonte
Geléia, 44 bytes
Espero ter interpretado todas as regras corretamente (eu não estou bastante certo de que a coisa "carry payload" está na meta ou se é mesmo relevante a este desafio).
Teste-o em TryItOnline
Isso constrói uma cadeia de caracteres para escolher caracteres. A cadeia inicial possui todo o caractere usado, exceto as aspas de abertura e fechamento. Em seguida, ele dobra essa sequência e concatena uma de cada uma das aspas abertas e fechadas dos ordinais (daí a necessidade de duplicar os outros caracteres). Por fim, ele seleciona repetidamente caracteres aleatórios da sequência composta até o tamanho do programa.
fonte
Pyke, 35 bytes
Experimente aqui!
Para verificar: remova a final
H
e a sequência resultante contém o número certo de cada caractere (com o número extraH
)Isso NÃO usa uma solução generalizada ou, de fato, uma solução. Ele conta com a capacidade de criar uma sequência contendo todos os caracteres na fonte. Ele deve poder fazer isso para qualquer código, mas cada caractere aumenta logaritmicamente o tamanho do código. O único número de vezes que um caractere é permitido na fonte é 2 ou 7
fonte
Ruby,
8167 bytesEconomizou um monte de bytes roubando alguns truques da solução de Martin
Eu não percebi que você tinha que selecionar aleatoriamente todas as vezes; Eu pensei que um shuffle faria o truque. Provavelmente isso pode ser jogado no golfe, mas é o menor tempo possível.
Quine padrão do Ruby com algumas modificações, para que ele imprima a sequência embaralhada. Estou triste porque demorou quinze minutos para descobrir as peculiaridades da formatação antes de perceber que eu estava subconscientemente roubando de qualquer maneira.
Acho que o embaralhamento das cordas pode ser reduzido, mas não sei como; Talvez eu também consiga reduzir o tamanho da formatação depois de pensar um pouco. Ajuda seria apreciada.
Experimente online!
fonte
64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
C, 125 bytes
C, 60 bytes para código golfado, mas não para quine, usando qualquer string
Enquanto para contar caracteres, minha solução precisava de 86:
fonte
f
pega string e imprime na saída padrão: string pode ser qualquer sequência de caracteres.rand()%LENGTH_OF_STRING
assume caractere de acordo com a probabilidade desse caractere com distribuição normal fornecida porrand()
. Talvez, eu não entendoquine
abordagem para C ....s
só precisa conterchar*s="";
. Eu acho que algo assimchar*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'
faria isso (mas eu não estou familiarizado com C).JavaScript, 128 bytes
Nota: só funciona no Firefox devido ao uso de
uneval
.Amostras de execuções:
fonte
gtraoan
que é quase um gemido eu acho ..."
uma probabilidade de aparecer?Python 3,
134132 bytesUso cada caractere no meu código-fonte dentro da string o número correto de vezes e multiplico a string por dois para incluir a si mesma. O programa imprime um caractere aleatório dessa sequência para cada caractere no código (o comprimento é codificado).
Experimente online
Evitei barras como a praga. Assim que o código contiver
\n
ou\"
, você tiver um problema, porque a string ainda não contém barras invertidas, você deverá adicioná-las também, mas em uma string separada multiplicada por um número maior, porque são necessárias duas barras invertidas para representar uma (\\
)Exemplo de saída:
Eu tenho que dizer, isso me lembra o FlogScript.
fonte
PowerShell v2 +, 175 bytes
Quines em PowerShell chupar, porque os delimitadores de substituição de string
{}
também laços denotam e outros enfeites, então você precisa usar um monte dechar
s no-f
operador, que incha o código.Semelhante à minha resposta Quine on Every Line . Basicamente, fazemos um loop de
0
para174
e cada iteração recalcula o quine$d
, ochar
projeta como um array e extrai umRandom
elemento escolhido uniformemente da entrada. Por definição, isso fornece probabilidade(occurrences in source) / (length of source)
conforme necessário. Esses caracteres são encapsulados em parênteses e-join
reunidos novamente em uma sequência.Exemplo
(Sim, é uma nova linha na saída - quando uma string que contém uma nova linha é
char
-array'd,`n
é tratada como um caractere, uma vez que achar
-array é apenas uma matriz de códigos de bytes, por isso também possui 1/175 chance de ser selecionado.)fonte
Dyalog APL , 20 bytes
f←{
...}
defina f como(,⎕CR'f')
listified (,
) C haracter (tabela) R ePresentation (⎕CR
) de f ('f'
)[?⍴⍨20]
indexado com ([
...]
)?
tempos aleatórios até ( ) repetir a si próprio (⍴⍨
) de vinteVamos executá-lo (com um argumento fictício) algumas vezes:
Tudo bem, mas a distribuição está correta? Vamos executá-lo com 10.000 argumentos fictícios e ver quantas vezes cada caractere ocorre:
Claramente,
f
e'
ocorrem duas vezes mais que os outros caracteres, assim como no código-fonte original.Como fizemos isso?
⍳1E4
gera os primeiros 10.000 números inteirosf¨
executa f em cada um desses números∊
nivela todos os pseudoquinos em uma única cadeia de 200.000 caracteres⌸
é uma função de ordem superior que, para cada caractere exclusivo nos dados do lado direito, alimenta a função do lado esquerdo do elemento exclusivo como argumento à esquerda e os índices em que esse caractere ocorre como argumento à direita. A função do lado esquerdo é⍺
argumento à esquerda, ou seja, o caractere único,
Seguido por1E¯4×
1 × 10⁻⁴ vezes⍴⍵
a forma do argumento correto (os índices de ocorrência), ou seja, quantas vezes ocorreFinalmente,
⌸
coloca tudo junto em uma tabela.fonte
C #,
277280268 bytes.Ungolfed:
Certamente isso funciona corretamente.
Saída de amostra:
fonte
(new Random()).Next(0,134)]
? Economizaria alguns bytes.C, 136 bytes
Exemplo de saída:
Este programa gera 136 caracteres aleatoriamente.
O código fonte inteiro (menos "aspas) está contido em uma seqüência de caracteres. O programa determina a probabilidade de gerar aspas como 2/136, caso contrário, gera um dos outros 67 caracteres aleatoriamente.
Existem duas ocorrências de cada caractere na cadeia de caracteres do programa. A probabilidade de gerar um caractere a partir da string é 134/136. A probabilidade de escolher um caractere específico na sequência é 1/67. Portanto, a chance de gerar um caractere na sequência é 134/136 * 1/67 = 2/136. Existem duas ocorrências de cada caractere de seqüência de caracteres no programa, portanto, existe uma probabilidade 1/136 de gerar um caractere para cada ocorrência no programa.
A ordem dos símbolos dentro da string não importa.
fonte