Este é um desafio de policiais e ladrões. Este é o fio do ladrão. A discussão do policial está aqui .
Os policiais escolhem qualquer sequência do OEIS e escrevem um programa p que imprime o primeiro número inteiro dessa sequência. Eles também encontrarão algumas cordas s . Se você inserir s em algum lugar em p , esse programa deverá imprimir o segundo número inteiro da sequência. Se você inserir s + s no mesmo local em p , este programa deverá imprimir o terceiro número inteiro a partir da sequência. s + s + s no mesmo local imprimirá o quarto, e assim por diante. Aqui está um exemplo:
Python 3, sequência A000027
print(1)
A cadeia oculta é de dois bytes .
A cadeia é +1
, porque o programa print(1+1)
imprimirá o segundo número inteiro em A000027, o programa print(1+1+1)
imprimirá o terceiro número inteiro etc.
Os policiais devem revelar a sequência, o programa original p e o comprimento da sequência oculta s . Os ladrões quebram uma submissão encontrando qualquer sequência com esse comprimento e o local para inseri-la e criar a sequência. A sequência não precisa corresponder à solução pretendida para ser um crack válido, nem o local em que está inserida.
Se você quebrar uma das respostas da polícia, poste sua solução (com a string e o local ocultos revelados) e um link para a resposta. Em seguida, comente a resposta da polícia com um link para o seu crack aqui.
Regras
Sua solução deve funcionar para qualquer número na sequência, ou pelo menos até um limite razoável em que falha devido a restrições de memória, excesso de número inteiro / pilha, etc.
O ladrão vencedor é o usuário que racha mais entradas, sendo o desempate quem atinge esse número de rachaduras primeiro.
O policial vencedor é o policial com a menor corda s que não está quebrada. O desempatador é o menor p . Se não houver envios sem rachaduras, o policial que teve uma solução sem rachaduras por mais vitórias.
Para ser declarada segura, sua solução deve permanecer sem quebra por 1 semana e, em seguida, ter a sequência oculta (e o local para inseri-la) revelada.
s não pode ser aninhado, deve concatenar de ponta a ponta. Por exemplo, se s fosse
10
, cada iteração seria executada em10, 1010, 101010, 10101010...
vez de10, 1100, 111000, 11110000...
Todas as soluções criptográficas (por exemplo, verificando o hash da substring) são proibidas.
Se s contiver caracteres não ASCII, você também deverá especificar a codificação que está sendo usada.
fonte
%
os associados de esquerda.Flak cerebral , A000984 por Nitrodon
Isso tem apenas 30 bytes, não sei o que o Nitrodon tinha em mente.
Experimente online!
Explicação
Eu tentei muitas coisas, mas aqui está o que funcionou. Os termos de A000984 são os elementos centrais do triângulo de Pascal.
Agora eu descobri que posso obtê-los somando as diagonais acima deles:
Por exemplo:
E como a ação final no programa de Nitrodon é resumir tudo isso parecia um bom candidato (mais como eu tentei várias coisas, mas essa acabou funcionando).
Então, queremos um programa que tome uma soma parcial e produza a próxima. Felizmente, existe uma maneira bem interessante de passar de uma dessas para a seguinte. Cada linha é o delta da próxima linha. Que é on º mandato consecutivo é a diferença entre o n º e n−1 ª termos na próxima linha.
O único problema é que não temos o suficiente da última linha para calcular a linha que queremos. Como cada linha é uma mais longa que a última, se tivermos uma linha, não podemos obter o último membro da próxima linha com esse método. No entanto, aqui temos outro truque, o último membro de cada linha é igual a todos os membros anteriores dessa linha!
E se você estiver familiarizado com o Brain-Flak, isso deve se destacar como algo que será realmente fácil de fazer.
Agora, o código:
Para começar, fazemos o cálculo da próxima linha em que cada novo membro é a soma de dois membros antigos adjacentes. Isso pode ser feito com:
O que basicamente move um elemento e adiciona (sem exclusão) o que já estava em cima dele. No entanto, isso reverte tudo e, para a próxima vez que tivermos uma linha, precisamos colocá-la de volta.
Agora precisamos calcular o último membro da linha. Como eu disse antes, isso é super fácil. Como tivemos um loop sobre todos os elementos da linha, podemos simplesmente pegar essa soma e pressioná-la. Empurramos antes do segundo loop para que ele acabe no fundo.
E é isso.
fonte
Brain-Flak, A000290 , por Sriotchilism O'Zaic
Original:
Rachado:
Experimente online!
Alternativamente:
Experimente online!
fonte
MATL , sequência A005206 de Luis Mendo
Original:
Experimente online!
Rachado:
Não sou especialista em MATL, mas pelo que entendi, o original
voOdoO
cria duas matrizes vazias e uma matriz[0]
na pilha.[0]
é isso que é impresso sem colchetes como o primeiro elemento da sequência. O crack / solução faz o seguinte:d
retira um elemento da pilha e (assumindo que seja um número ou uma matriz de tamanho 1) a transforma em uma matriz vazia. Essas matrizes vazias não são impressas, mas contribuem para o tamanho da pilhaNq
conta o tamanho da pilha e subtrai um. Esse é on+1
termo ao avaliar a função (uma vez que começa em 2 e aumenta em um a cada iteração devido aod
adição de itens invisíveis à pilha)17L
essa é a constantePhi = (1+sqrt(5))/2
/k
isso executafloor((n+1)/Phi)
qual é uma das fórmulas que calcula os elementos da sequência. Esta fórmula está listada no OEIS,a(n) = floor(sigma*(n+1)) where sigma = (sqrt(5)-1)/2
exceto que usamos a identidade(sqrt(5)-1)/2 = 1/Phi
fonte
\N17L/k&
(observe os dois usos diferentes&
no meio e no final do código), mas sua solução é mais simples e mais elegantePython 3 - A__
Experimente online!
100 garrafas de cerveja, adicione
-1
para obter o próximo número99
, etc.fonte
-1
. Vou deixar isso mais explícito.Barril , sequência A000045 , de A__
Original:
Rachado:
Observe que o desafio foi encontrar uma substring de comprimento <= 6, mas a cadeia encontrada tem comprimento 5.
Definição dos comandos para quem tem preguiça de procurar a especificação Keg:
0
e1
empurre o número respectivo para a pilha;"
move o topo da pilha para o fundo da pilha (rolo);&
coloca a parte superior da pilha no registrador se estiver vazia; caso contrário, esvazia o registrador na pilha;+
adiciona os dois principais valores da pilha.A inicial
1"
apenas insere um 1 na parte inferior da pilha. Essa lista crescente de 1s desempenha apenas um papel na primeira iteração, onde nos permite assumir que a pilha é iniciada1 0
e não apenas0
. De fato, o programa10:&+.
, onde o:&+
peça é repetida, tem exatamente o mesmo comportamento da solução acima, exceto que não possui uma lista crescente de 1s na parte inferior.Como
&
é usado apenas uma vez na parte de repetição e tem comportamento alternado, o comportamento de1":&+
depende da paridade da iteração.Agora, este programa realmente não imprime a sequência de Fibonacci, começando com 0, 1 desde o início; na verdade, imprime a sequência 1, 0 de Fibonacci do segundo lugar, ou seja, do 0. (Isso resulta na mesma sequência.) Sabendo disso, o programa é facilmente analisado:
[a, b]
e termina comoa+b (&=b)
.[b] (&=a)
e termina como[b, b+a]
.Isso realmente calcula a sequência conforme necessário.
fonte
:
comando no início da string.Java 8+, sequência A010686 de Benjamin Urquhart
fonte
Brain-Flak, A000578 por Sriotchilism O'Zaic
Original:
Experimente online!
Rachado:
Experimente online!
fonte
Pyret , sequência A083420 , de MLavrentyev
Você pode executá-lo aqui, mas ainda não descobri como vincular o código. Você terá que copiar e colar.
A função fornecida ignora seu segundo argumento. Dobra o primeiro e adiciona um, o que gerará a
2^n - 1
sequência necessária aqui - tudo o que preciso fazer é dizer quantas vezes para executar essa operação, alterando o comprimento da lista dobrada. Felizmente, Pyret não reclama da vírgula.fonte
Python 3 , sequência A268575 de NieDzejkob
Original:
Rachado (100 bytes):
Experimente online!
Pelo que pude entender, o código original está configurando definições para tornar a cadeia oculta o mais abreviada possível e, em seguida, definindo o padrão inicial do Jogo da Vida. A cadeia oculta é equivalente a escrever uma iteração do Jogo da Vida de Conway em 102 bytes.
Para os propósitos desse crack,
S
é uma função que soma os elementos em seus argumentos (que são iteráveis) eF
aplica uma função retornando um iterável a todos os elementos de uma lista e esmaga todos os resultados juntos.;A=-1,1,0;
finaliza a instrução anterior e abrevia a tupla (-1,1,0) com A, que é usadoproduct(A,A)
para fornecer todos os vizinhos em relação a uma determinada célula, bem como a própria célula.*X,=F(lambda a:(S(a,x)for x in product(A,A)),W);
cria uma nova listaX
mantendo todos os vizinhos das célulasW
e as células emW
si adicionando as posições relativas dos vizinhos a cada célula e juntando-os em uma lista.W={p for p in X if 2<X.count(p)<4+({p}<W)}
percorre esta listaX
e determina se cada célulaX
pertence ao conjunto de células na próxima iteração. Isso foi tirado quase literalmente deste jogo de golfe da vida .fonte
Haskell, A014675 por Khuldraeseth na'Barya
Código original
Com substring
Experimente online!
fonte
flip take[1,2]
vez daquela lambda interna. Caso contrário, idêntico.(`take`[2,1])
é ainda mais um byte a mais(`take`)
encontrou um erro de compilação, então achei que(`take`[2,1])
sim. :(Calculadora de mesa, A006125 , de A__
Original:
Rachado:
Experimente online!
Implementação direta.
fonte
Sa2Lad1-*2/^
, caso alguém me pergunte sobre isso.cQuents , sequência A003617 de Stephen
Experimente online!
Comece com o número mais baixo de n + 1 dígito, um seguido por n zeros. o
#2
especifica que apenas o segundo termo da sequência, o que é a definição sequência uma vez aplicado à semente, serão impressos; essa definição de sequência simplesmente encontra e retorna o próximo primo.fonte
Python 3 - agtoever
Experimente online!
fonte
MATL , sequência A000796 de Luis Mendo
Original:
Experimente online!
Rachado:
O autor original sorrateiramente criou a matriz
[-7:-1]
e depois extraiu e negou o primeiro elemento a ser obtido7
. Ele então usou isso para obter o 7º dígito arredondado de pi (que é3
) e o apresentou como o primeiro dígito de pi. A adição|SQ
torna a matriz original positiva, classifica e adiciona uma a tudo. Isso significa que, depois de tudo, em vez de obter o índice,7
ele obtém o índice-2
após um aplicativo,-3
após dois aplicativos e assim por diante. O-
é importante porque diz àY$
função para não arredondar os dígitos.fonte
Adiante (gforth) , A000042 , por NieDzejkob
Experimente online!
O trivial 1 byter está simplesmente estendendo o literal. O problema é que isso excede 64 bits desde o décimo nono dígito. Solução fácil é imprimir o dígito único repetidamente, certo? Sim, mas não é tão fácil assim. Embora a aderência
1 .
ao final realmente imprima os dígitos adicionais necessários, eles serão separados por espaços. Isso não vai funcionar.Agora, de acordo com a Wikipedia, "
.(
(ponto-paren) é uma palavra imediata que analisa uma string delimitada por parênteses e a exibe". Felizmente, essa exibição não possui outros caracteres estranhos, portanto, usar.(
para imprimir um único 1 deve ser suficiente. E faz. Não é necessário espaço após o fechamento, então esses cinco caracteres (há um espaço após o fechamento) podem ser repetidos para o conteúdo de nossos corações. Para demonstrar, incluí no TIO um exemplo que teria estourado várias vezes um int de 64 bits. Funciona como um encanto.fonte
Unefunge-98 (PyFunge) , sequência A000108 , de NieDzejkob
Experimente online!
Repetido seis vezes
Dois bytes de sobra dos dezenove permitidos! O que parece ser um espaço, na verdade, existe um caractere 0x01 Start Of Header.
Explicação:
Este desafio é tudo sobre a geração
a(n)
dea(n-1)
e talvezn
. OEIS fornece a fórmula explícitaa(n) = (2n)!/(n!(n+1)!)
, que é facilmente convertida ema(n) = a(n-1) * (4n-6) / n
. Agora, para implementar isso no Funge.Devo estar inserindo código entre o
1
e o.
. Isso é metade do quebra-cabeça já feito. Tudo o que resta é qual código inserir? O Funge está faltando notavelmente nas ferramentas de manipulação de pilha, portanto a parte inferior da pilha está fora dos limites; Eu preciso rastrear ambosn
ea(n)
sem aumentar a pilha. E qual a melhor maneira de fazer isso do que com o espaço Funge?Esse personagem 0x01 é o meu contador
n
. Eu continuoa(n)
na pilha, como deve estar na pilha depois que minha parte termina a execução.fonte
Python 3 , A008574 por tsh
Experimente online!
fonte
V, A000290 , por DJMcMayhem
produz os quadrados de 1.
Experimente online!
A base
é*
insere*
eØ.
conta o número de caracteres que não são de nova linha no buffer inteiro. A inserçãoÄ
duplica a linha superior para sua própria linha, na qual é2é*
inserida**
. As concatenações das inserções produzem números ímpares sucessivos, com o maior no topo. O final finalØ.
soma os primeiros n números ímpares, produzindo assim o n-ésimo quadrado.fonte
ÄÎé*<CR>
AsciiDots , sequência A019523 de Alion
Uma vez!
Duas vezes!
Dez vezes!
Enquanto tentava descobrir como o código / linguagem funciona, aprendi que as duas primeiras linhas do código existente fazem todo o trabalho de gerar a sequência de Fibonacci infinitamente. O código termina quando qualquer ponto atinge o
&
, então eu só precisava adicionar mais atraso nas linhas restantes para permitir o número apropriado de entradas a serem exibidas.Após algumas tentativas, erros e observações, descobri que o intervalo de atraso correto é de 16 unidades de tempo por número. Ajustar caracteres suficientes em uma única linha parecia inviável, então eu precisaria colocar o atraso em 2 linhas, deixando 10 caracteres para o atraso real. Para que o padrão se igualasse, as duas linhas precisavam ter 5 caracteres e, como os três caracteres do meio em uma linha podem ser percorridos duas vezes, isso fornece 16 unidades de tempo, conforme desejado.
O requisito de combinar isso com o
&
da oitava coluna parecia tornar isso impossível, até que percebi que poderia começar com uma nova linha no interior da terceira linha. Isso torna a penúltima linha do comprimento certo e remove a extremidade agora redundante da terceira linha.fonte
\v
/v>-----)
Brachylog , sequência A114018 de String não relacionada
Programa original:
String para inserir:
Experimente online!
Explicação
Aqui está primeiro a explicação do programa original (sabendo que a sequência usada é "primo com menos n dígitos cuja reversão também é primo")
Como você pode ver, o programa é bastante direto, exceto por uma coisa: existe uma completamente inútil
b - behead
chamada de predicado , que remove o primeiro elemento do reverso do nosso número, com o qual não fazemos nada.Esta é uma pista definitiva de como podemos encontrar a string. A idéia é que, como queremos aumentar o comprimento do número em 1 dígito cada vez que adicionamos a string, precisamos de uma string que "avalie" o comprimento desse número de alguma forma, usando esse inútil
b
.A solução é usar
ẹb
: primeiro,ẹ - elements
transformará o número em uma lista de dígitos; então,b - behead
removerá seu primeiro elemento. O truque é queb
falhará se a lista de dígitos estiver vazia. Portanto, toda vez que anexamos ab
, aumentamos o comprimento do número necessário em 1 (porque ele falhará até que o valor atribuído?
seja alto o suficiente para conter muitos dígitos suficientes para que o últimob
seja aplicado em uma lista de um dígito).Reaplicar
ẹ
cada vez não tem efeito, porque já é uma lista de dígitos. Só precisamos dele uma vez no início, porque se decapitarmos um número como, em9001
vez da lista de seus dígitos, obteremos o001 = 1
que perderá informações sobre o número de dígitos.fonte
9001b1
assunto, na verdade, acabou que, emborab
falhe se a lista de dígitos estiver vazia, não falhará se você nunca tiver uma lista, porque números de um dígito decapitam 0, incluindo o próprio 0 .b
é estranhoVDM-SL , A000312 , por Data de validade
Como as expressões do VDM-SL
let
podem reconfigurar variáveis que já estão vinculadas em um escopo anexo, elasx**x
podem ser avaliadas arbitrariamente profundamente aninhadas em escopos nos quaisx
é mais um que no escopo anterior, enquanto o originalx
ainda é menor que a cardinalidade dem(1)
.fonte
If you insert s somewhere into p, this program must print the second integer from the sequence. If you insert s + s into the same location in p, this program must print the third integer from the sequence.
Observe o comportamento do exemploprint(1)
.++
para substituir o mapaHaskell, A083318 por xnor
Experimente online!
fonte
show
.Haskell , A000045 (Fibonacci) , pela transformada de Fourier de Rin
Experimente online!
23 bytes exatamente.
Este foi divertido e um pouco complicado. Os 0 e 1 invertidos me tiraram um pouco antes que eu percebesse que não era um problema. A falta de
$
no original me fez tentar coisas incompletas como$...$id
(um byte muito longo) antes que me ocorresse que eu poderia colocar tudo entre parênteses. Em suma, um belo quebra-cabeça.H.PWiz assinala que a correspondência de padrão poderia ter me salvou pelo menos cinco bytes:
$(\[x,y]->[y,x+y])
. Esse maldito desafio sem ponto me faz pensar sem ponto em qualquer lugar.fonte