A tarefa
Nesse desafio, sua tarefa é escrever um código que produza um de seus anagramas escolhidos aleatoriamente com distribuição uniforme, mas que nunca deve ser produzido sozinho.
Elaboração
Dado que não há informações, o seu programa deve produzir qualquer um dos anagramas do seu código fonte. Seu programa nunca deve produzir sua própria fonte como ela é, ou seja, nunca deve ser um problema.
Entrada
Seu programa não deve receber nenhuma entrada. No entanto, se o seu idioma exigir entrada como uma necessidade, você pode assumir que ele será fornecido em minúsculas a
. Você não deve usar a entrada de forma alguma.
Resultado
Seu programa pode gerar qualquer saída, exceto gravá-lo em uma variável. A gravação em arquivo, console, tela etc. é permitida. A função também return
é permitida.
Regras adicionais
O código-fonte do seu programa deve ter pelo menos 3 caracteres (não 3 bytes).
O código-fonte do seu programa deve ter pelo menos três possíveis anagramas (exceto ele próprio). Por exemplo,
aab
não conta como um envio válido, poisaab
possui apenas dois anagramas diferentes deaab
(baa
eaba
).Seu programa não deve produzir nenhum erro.
Seu programa deve exibir exatamente seus anagramas .
Aplicam- se as lacunas padrão e as regras padrão de quine .
Exemplo
Suponha que o código fonte do seu programa seja abc
. Ele deve gerar aleatoriamente qualquer um dos seguintes (com distribuição uniforme):
acb
bca
bac
cba
cab
E, nunca deve produzir abc
.
Critério vencedor
Isso é código-golfe , então o código mais curto em bytes vence! Em caso de empate, a solução postada anteriormente vence!
fonte
Respostas:
Gelatina , 15 bytes
Apenas para começar as coisas; isso é quase certamente imbatível. Isso é basicamente apenas uma combinação de um construtor universal de quine e uma função "escolher uma permutação aleatória que não seja a entrada"; o último pode ser improvável, o primeiro quase certamente é.
Explicação
Construtor de quine universal
Isso pode ser visto como um problema, se executado por si só. Também é uma solução adequada para a maioria das definições que conheço; ele não lê sua própria fonte (em vez disso, contém um literal que é "avaliado" e recebe uma cópia de si mesmo como argumento), pode carregar uma carga útil (como pode ser visto aqui!) e o
v
exterior da string literal é codificado porv
dentro.Escolha um anagrama aleatório
Isso é realmente ineficiente em uma string por tanto tempo, então não pude testar o programa como um todo, mas testei-o em strings mais curtas e ele parece funcionar corretamente.
fonte
Q
. No entanto, acho que você pode alterar esse método "todas as permutações" com um "shuffle" usadoẊ⁼¿
, economizando um byte e permitindo que ele funcione no TIO.CJam , 17 bytes
Isso não vai terminar tão cedo, então nenhum link TIO dessa vez.
Como um consolo, aqui está uma solução de 20 bytes que termina muito rapidamente:
Experimente online!
Explicação
Em vez disso, a solução de 20 bytes embaralha o código-fonte até que seja diferente do original.
fonte
Python 2, 117 bytes
Surpreendentemente, esta solução é mais curta do que eu esperava. Baralha o código-fonte, até que seja diferente do original.
-2 bytes, graças a @ mbomb007
-3 bytes, graças a @Wondercricket
Experimente online
Este é um dos quines básicos em python, que eu modifiquei
A geração de anagramas é feita por módulo aleatório
Onde R contém código fonte
Foram necessárias aspas triplas, pois fui forçado a manter os verdadeiros participantes de linha em código. Anagramas terão 3 linhas de qualquer maneira.
fonte
exec s
em vez deexec(s)
str
é imutável, você pode salvar bytes executandoL=R
e usandosample
on emL
vez de usarshuffle
onlist
. repl.it . A idéia é retirada deste StackoverflowJava 7,
376428426428 bytes+52 e +2 bytes para duas correções de bugs. Eu não estava verificando (corretamente) se a String gerada aleatoriamente era igual ao código-fonte original. As chances disso são astronômicas pequenas, considerando a quantidade de caracteres envolvidos, mas eu tenho que validá-lo independentemente de cumprir as regras do desafio.
Minha primeira resposta rápida em Java ..
Experimente aqui.
Você pode remover os dois
Collections.shuffle(l)
e adicionar!
na frente dos doisx.equals(s)
para verificar se a saída realmente é igual ao programa:Experimente aqui.
Explicação:
String s
contém o código fonte não formatado.%s
é usado para inserir essa String em si mesma com os.format(...)
.%c
,%1$c
E34
são usados para formatar as aspas.s.format(s,34,s)
coloca tudo juntoE essa parte do código é responsável pela saída de um anagrama aleatório:
fonte
05AB1E , 22 bytes
Isso cria uma lista muito grande para o TIO, portanto, o link usa uma string menor, mas a ideia é a mesma.
Experimente online!
fonte
Javascript (ES6), 128 bytes
Usa sort () retornando aleatoriamente -1,0 ou 1 para embaralhar a saída.
fonte
Bash,
2796 bytesfold
divide o código em linhas,shuf
embaralha as linhas etr
junta o código novamentecorrigiu o problema de se exibir, agora nunca mais se exibirá
Experimente Online!
fonte
$0
parece uma violação de "Seu programa não deve receber nenhuma entrada".