Este é um desafio de policiais e ladrões . Para o tópico da polícia, clique aqui .
Esse desafio envolve duas sequências OEIS escolhidas pelos policiais - S 1 , S 2 - e quão bem essas sequências podem ser jogadas e ofuscadas.
Os policiais estão construindo o código A que produz S 1 e dando um número X que eles afirmam ser a melhor distância possível de Levenshtein (em caracteres) para criar B que produz S 2 .
O desafio dos ladrões
Para quebrar a submissão de um policial em particular, os ladrões devem criar um programa C no mesmo idioma (e versão) que a resposta que produz S 2 (n) e o caractere Y muda de A (com Y <= X
). Os ladrões não precisam necessariamente encontrar exatamente o mesmo código B que o policial (secretamente) produziu. As submissões dos assaltantes devem aderir ao mesmo índice 0 ou 1, conforme especificado pela submissão do policial.
Se você conseguir isso, poste uma resposta com a solução, vinculando-a à resposta do policial e deixe um comentário sobre a resposta do policial voltando para a sua.
Cada resposta policial pode ser quebrada apenas uma vez e, é claro, você não tem permissão para quebrar sua própria resposta. Se a resposta do policial for inválida antes ou depois de ser quebrada, ela não será contabilizada na pontuação do ladrão.
Vencendo e Pontuação
Os ladrões são pontuados por (X - Y)*5 + 5
cada uma de suas rachaduras e o ladrão com a maior pontuação geral vence.
Regras adicionais
- Você não deve usar nenhum componente interno para hash, criptografia ou geração de números aleatórios (mesmo que você propague o gerador de números aleatórios para um valor fixo).
- Programas ou funções são permitidos, mas o código não deve ser um trecho e você não deve assumir um ambiente REPL.
- Você pode receber e dar saída em qualquer formato conveniente . Os métodos de entrada / saída devem ser os mesmos para ambas as seqüências.
- A calculadora definitiva para a distância de Levenshtein para esse desafio é esta no Planet Calc.
- Além de ser um desafio CnR, este é um código de golfe, portanto todas as regras usuais de golfe se aplicam.
fonte
Respostas:
Pyke, Levenshtein distância de 1, A036487 , A135628 - pontuação 5
Rachadura de uma entrada por muddyfish
Experimente aqui!
O código original
X*e
, ao quadrado da entrada,X
multiplica isso pela entrada*
e divide pela metade o resultadoe
,.O truque é que
'X'
56 na representação de base 96 dew
, portanto,wX
gera 56, multiplique que pela entrada então desça e reduza pela metade e você obtém 28 vezes a entrada conforme necessário.fonte
Brain-Flak , 28 bytes, Distância de 4, A002817 , A090809
Essa resposta foi descoberta com a ajuda de um bruto, que gerou 35.000 programas possíveis (muitos deles estavam desequilibrados e, portanto, código de falha cerebral inválido, mas eu rolei com o bug e encontrei a resposta de qualquer maneira). Isso foi por volta do vigésimo milésimo programa testado e demorou cerca de uma hora para ser descoberto (embora eu não saiba exatamente quanto tempo estive ausente quando ele terminou).
Eu meio que ainda não queria postar esta resposta, pois ainda não tenho um entendimento completo de como esse programa funciona. No entanto, a resposta está prestes a ser segura, então não quero que ela expire. Espero atualizar esta resposta mais uma vez que eu a entenda completamente, além de postar o código que eu usei para encontrar essa resposta. Mas, por enquanto, vou apenas postar uma explicação parcial.
Isso faz sentido porque o OEIS afirma:
E A000124 são os números triangulares + 1. No entanto, não sei exatamente o que é o forumla, por isso não posso explicar completamente como isso funciona.
fonte
Perl 6, 19 bytes, X = 1, A000045 → A000035
+>
no lugar de+<
também funcionaria.Experimente online!
Como funciona
infix ... é bastante útil para seqüências recursivas simples. A
(0,1,*+*...*)
parte do código original, que é uma abreviação deespecifica uma sequência que começa com 0 e 1 e adiciona itens calculando a soma dos dois primeiros itens da sequência.
Por outro lado,
(0,1,*+<*...*)
usa o deslocamento de bits esquerdo (o deslocamento de+>
bits direito também funcionaria) para construir a sequência de paridade. Como deslocar 1 unidade zero para a esquerda é 1 e deslocar 0 uma unidade para a esquerda é 0 , obtemos os padrões alternados desejados de uns e zeros.fonte
Perl 6 , 10 bytes, distância 1 - pontuação 5
Rachadura de uma entrada por smls
Torna-se:
Experimente Online!
fonte
*[0]o
que ela estivesse lá. Acho que isso significa que eu posso vir acima com um outro desafio com base na minha "truque" ... :)***
e pensei que poderia desdobrar a operação de multiplicação diádica*
. Com os argumentos anteriores, realmente não sei o que o código realmente faz. Sinta-se livre para editar em algumas explicações!1***
é analisado como1 ** *
, isto é, um lambda que faz "1 à potência de x".1*+*
é analisado como1 * (+*)
, ou seja, um lambda que "1 multiplicado por (x convertido em um número)".Perl 6 , distância 2, smls
Original:
Rachadura:
Experimente online!
fonte
+(^*Z%2)
Eu acho que não sou muito bom em elaboração destes desafios..WolframAlpha, Distância 1, Greg Martin , A002378 , A000537
Como funciona
Percebi que, curiosamente, (n * (n + 1) / 2) ^ 2 é uma fórmula para a segunda sequência. Como soma (1 a n) é equivalente a n * (n + 1) / 2, eu apenas precisei mudar o * para a ^.
fonte
Flak cerebral , 20 bytes, DJMcMayhem
Experimente online!
Adicionado a
({})
no início do loop para dobrar o valor em cada iteração.fonte
({(({}[()])){}}{})
JavaScript, Distância 4, LliwTelracs
Original:
Rachadura:
Experimente online!
fonte
JavaScript (ES6), Distância 1, Avançado
Original:
Rachadura:
Experimente online!
ou
Experimente Online!
De alguma forma, eu consegui fazer com que ele se comportasse de maneira diferente entre TIO e repl.it (absolutamente nenhuma pista do porquê 2 * 1 ^ ... seria igual a 0, de acordo com repl.it)
fonte
as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
.Javascript, 41 bytes, Distância de 3, A061313, A004526
Experimente online!
fonte
Java, Distância 4, Peech , A094683 , A000290
Original:
Rachadura:
retorna n * n
fonte
Javascript, Advancid , distância de 2, A059841 e A000004
Apenas deixando o código para trás do link do TIO, porque parece estar quebrando o site.
Graças a @nderscore, cujo código eu usei para descriptografar o código inicial
Havia algum código redundante, como usar !! [] + [] + [] em vez de !! [] + [].
A adição de! + [] - (! + []) (+ 1-1) inicialmente impediu a descriptografia.
Experimente Online
fonte
Pyke, Levenshtein distância de 2, A008788, A007526
Experimente aqui!
Como funciona
Isso faz conversão de base mista.
'S
agarra a entrada n e se aplica, pressionando [1, ..., n] na pilha. O próximoS
pega a entrada n e empurra a mesma matriz mais uma vez.'
parece causar o próximo comando a ser aplicado ao topo anterior da pilha; Estou um pouco confusa com os detalhes.Finalmente,
^
aplica a conversão de base mista, de modo que [1, ..., n] [1, ..., n]f
calculaa (n): = [1] n + n + (n) (n-1) .. . + [n!] 1 onde os colchetes indicam o valor do local e o número à direita do dígito.
Agora, a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( a (n) + 1) , que é a mesma fórmula recursiva que define a (n) em [A007526]. Como uma soma vazia é zero, a (0) = 0 e o caso base também coincidem.
fonte