Introdução
Você é um criminoso encarregado de roubar alguns planos secretos da nova startup de tecnologia Dejavu. Você entra pela parede dos fundos, mas encontra uma porta que requer um alfinete para abri-la. Você reconhece a marca da fechadura e sabe que é necessário um pino de 5 dígitos usando todos os números de 0 a 4. Após cada dígito digitado, a fechadura verifica os últimos 5 dígitos digitados e abre se o código estiver correto. Você precisa ultrapassar esse bloqueio e rápido.
Superpermutações em poucas palavras
Uma permutação é todas as combinações possíveis de um determinado conjunto de dígitos. por exemplo, todas as permutações dos dígitos 0, 1, 2 são:
012, 021, 102, 120, 201 e 210.
Se concatenarmos todas essas permutações juntas, obteremos uma superpermutação:
012021102120201210
essa superpermutação contém todas as permutações de 0, 1, 2, mas é possível diminuir uma delas. Vou pular um pouco aqui, mas a superpermutação mais curta desses dígitos é:
012010210
Para nossos propósitos e propósitos, essa é essencialmente a menor seqüência de dígitos que contém todas as permutações possíveis desses dígitos, ou seja, uma superpermutação.
Tarefa
Sua tarefa é um pouco mais difícil que o exemplo da superpermutação, como mostrado acima, porque você tem mais dois dígitos para se preocupar. - Se você não leu sobre superpermutações, ou se meu exemplo acima foi um pouco obscuro, sugiro que você leia este ótimo artigo de Patrick Honner sobre o assunto (esse desafio foi bastante inspirado em seu artigo, então parabéns a ele): https://www.quantamagazine.org/unscrambling-the-hidden-secrets-of-superpermutations-20190116/ . Seu objetivo é escrever o programa mais curto possível que gere uma superpermutação dos dígitos de 0 a 4.
Pontuação
Seu programa não recebe nenhum tipo de entrada e produz uma superpermutação dos dígitos de 0 a 4. Essa superpermutação resultante deve ser impressa no console ou exibida visivelmente ao usuário na extensão fornecida pelo seu idioma de escolha. Isso não precisa ser a permutação mais curta possível, apenas uma superpermutação válida. Por isso, o objetivo é escrever o programa mais curto com a superpermutação mais curta, portanto, você deve calcular sua pontuação da seguinte forma:
tamanho do arquivo (bytes) * comprimento da superpermutação gerada (dígitos)
por exemplo, se eu tivesse um programa de 40 bytes e minha superpermutação tiver 153 dígitos, minha pontuação será:
40 * 153 = 6120
como sempre, o objetivo é obter essa pontuação o mais baixa possível.
Modelo
Aqui está como você deve postar sua resposta:
Idioma | Ponto
link para código no ambiente de trabalho (se possível)
code snippet
explicação de código, etc.
Finalidades
Esta é uma das minhas primeiras perguntas neste site. Então, diga-me se estou perdendo alguma coisa ou se uma seção do meu desafio não está clara. Obrigado e divirta-se jogando golfe!
fonte
Respostas:
05AB1E , pontuação = 1673 (7 bytes · 239)
Experimente online!
Como funciona
Pitão , pontuação = 1944 (9 bytes · 216)
Experimente online!
Como funciona
fonte
vy3yJ
salva um bytem+d
->+R
salva um byte.Brachylog , pontuação = 2907 (19 bytes × 153)
É muito lento para ver qualquer coisa, mas se você mudar
4
,2
pode testá-lo: Experimente online!Isso encontra a superpermutação mais curta como tal:
fonte
JavaScript (ES6), 26975 (325 * 83 bytes)
Com este sistema de pontuação, há pouco espaço para algo entre 'codificar a supermutação ideal' e 'apenas usar um pequeno built-in para concatenar todas as permutações' , pelo menos em não-esolangs.
Aqui está uma tentativa de qualquer maneira.
Experimente online!
Ele gera uma sequência de 325 bytes:
fonte
26975/153-153>23
)n
sufixo padrão queconsole.log
sai)Python 2 , Pontuação:
24327151471285212628 (154 * 82 bytes)Experimente online!
Além disso:
Python 2 , 12628 (154 * 82 bytes)
Experimente online!
fonte
05AB1E , pontuação:
53552160 (216 * 10 bytes )Porto de @AndersKaseorg 's resposta Pyth , por isso certifique-se de upvote-lo!
Experimente online.
Explicação:
fonte
Oitava , 27 x 442 = 11934
Experimente online!
Acontece que, ingenuamente, gera todas as permutações e, em seguida, trunca para a substring mais curta que ainda é uma superpermutação válida, é mais curta do que gerar a superpermutação mais curta. Infelizmente, desta vez a pontuação não é um palíndromo.
Oitava , 97 x 153 = 14841
Experimente online!
Entrada atualizada para algumas coisas
a++
não é implementado para números simbólicos.contains()
não está implementado no Octave. Substituído porany(regexp())
.a
superpermutação de 153 comprimentos. Isso permite que a solução seja verificada.fonte
CJam (6 * 240 = 1440)
Demonstração online , validação (gera o índice no qual cada permutação de
0..4
pode ser encontrada; ele precisa achatar a saída porque o programa original fornece uma saída adequada para o stdout, mas o que ele coloca na pilha não é diretamente utilizável).Abordagem roubada da Sanchises , embora a ordem de permutação do CJam seja diferente, fornecendo uma substring diferente.
CJam (22 * 207 = 4554)
Demonstração online , validação .
Dissecação
Isso usa uma construção recursiva simples.
fonte
Geléia , 3000 (600 * 5 bytes)
Experimente online!
fonte
Carvão , 29 bytes, comprimento de saída 153, pontuação 4437
Experimente online! Link é a versão detalhada do código. Explicação: Como o @TFeld, eu apenas imprimo metade de uma superpermutação e espelho. Eu calculei a superpermutação usando o seguinte código:
Isso se traduz em um programa de 45 bytes em carvão, de modo que teria marcado 6885.
fonte
MATL , 16 x 442 = 7072
Experimente online!
Porta MATL da minha resposta Octave. -442 agradecimentos a Luis Mendo
fonte
Japt -P, 2376 (11 x 216)
Tente!
-1 byte graças a @ Shaggy!
Porto de Anders Kaseorg é resposta Pyth .
fonte
q<space>
;)Perl 6 , 7191 (153 * 47 bytes)
Experimente online!
Localiza o primeiro número que contém todas as permutações dos dígitos de 0 a 4. Isso levará muito tempo para ser executado, mas você pode testá-lo com as duas primeiras permutações
0
e0,1
fonte
Wolfram Language (Mathematica) , 153 * 95 bytes, 14535
Experimente online!
fonte