Digamos que uma substring seja qualquer seção contínua de uma string original. Por exemplo, cat
é uma substring de concatenate
. Diremos que uma substring adequada é uma substring que não é igual à string original. Por exemplo, concatenate
é uma substring, concatenate
mas não uma substring adequada. (cadeias de caracteres únicos não possuem substrings apropriadas)
Agora definiremos uma sequência usando esses termos. O n º termo nesta seqüência será o menor número tal que há uma substring adequada de sua representação binária que não é uma substring de qualquer termo anteriormente na seqüência. O primeiro termo é 10
.
Como exercício, vamos gerar os 5 primeiros termos. Vou trabalhar em binário para facilitar as coisas.
O primeiro termo é 10
. Como 11
o próximo número menor, possui apenas uma substring adequada, 1
que também é uma substring 10
, 11
não está na sequência. 100
no entanto, contém a substring adequada, 00
que não é uma substring, 10
portanto 100
é o próximo termo. A seguir, é 101
que contém a substring apropriada exclusiva, 01
adicionando-a à sequência e, em seguida, 110
contém a substring apropriada, 11
que é nova, adicionando-a à sequência.
Agora temos
10, 100, 101, 110
111
é o próximo, mas contém apenas as substrings 1
e 11
não é um termo. 1000
no entanto, contém 000
adicioná-lo à sequência.
Aqui estão os primeiros dois termos em decimal
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Tarefa
Ou
Tome n como entrada e gerar o n ésimo termo nesta sequência (0 ou 1 indexada)
Termos de saída contínuos da sequência
Isto é , as respostas do código-golfe são pontuadas em bytes, com menos bytes sendo melhores.
n
)?a(36)
é 47 (1 indexado).Respostas:
Python 3 ,
88807875 bytes-6 bytes graças ao Assistente de Trigo
-2 bytes graças ao RootTwo
-3 bytes graças ao notjagan
Experimente online!
fonte
bin(n)[2:]
porf"{n:b}"
.Gelatina , 22 bytes
Experimente online!
fonte
Mathematica,
116110 bytesGera infinitamente termos da sequência.
Explicação
x
é a lista de termos da sequência até agora.f
é umFunction
que pega um número inteiro e retorna toda aSubsequences
sua2
representação básica (incluindo a lista vazia{}
e a lista completa deIntegerDigits
si mesma).Avalie o
...
valor den
de2
até∞
.Se
...
forFalse
, o segundo argumento paraAnd
(&&
) nunca é avaliado. Se...
forTrue
, entãoEcho@n
imprime e retornan
, que entãoAppendTo
a listax
.Queremos verificar se alguma substring adequada de
n
não é uma substring de nenhum termo anterior na sequência.Most@f@n
a lista de substrings adequadas den
, nós, em seguida, verifique se existem substringss_
que é umMemberQ
da lista de modo que a listaf/@x
de listas de substrings de termos anteriores da sequência éFreeQ
des
nível2
.fonte
Mathematica,
10994 bytesTermos de saída contínuos da sequência
Agradecimento especial a @ngenisis por -15 bytes
Mathematica, 123 bytes
Tome n como entrada e gere o enésimo termo nesta sequência (1 indexado)
entrada
resultado
fonte
15
bytes que podem ir:SubsetQ
é menor do que e equivalente aContainsAll
, você pode usarAnd
em vez deIf
, oUnion
é desnecessário, eDo
é quase sempre menor do queFor
:s={};Do[!SubsetQ[s,(t=Subsequences@IntegerDigits[i,2])[[2;;-2]]]&&(s=s~Join~t;Echo@i),{i,∞}]
3
mais bytes usandoMost
:s={};Do[!SubsetQ[s,Most[t=Subsequences@IntegerDigits[i,2]]]&&(s=s~Join~t;Echo@i),{i,2,∞}]
Pitão , 20 bytes
Isso imprime a sequência infinitamente. Só pode ser usado offline como consequência.
Explicação (O espaço é uma nova linha):
fonte
Pitão , 20 bytes
Experimente online!
fonte
Haskell,
172 bytesExperimente online.
Explicação
O código gera a sequência continuamente.
b
retorna a representação binária de umInt
como umString
s
retorna todas as substrings de uma stringp
retorna todas as substrings apropriadas de uma stringn
é uma função aplicada iterativamente e retorna uma tupla contendo:scanl
é usado para chamarn
repetidamente e sua saída é filtrada para conter apenas elementos maiores que 1Aqui está uma versão um pouco mais legível, antes do golfe:
fonte
JavaScript, 57 bytes
Mostrar snippet de código
Vamos escrever o número dado n na forma binária, então:
10
, n deve na sequência:1
, a cadeia binária restante não deve ser vista, pois n é o menor número que pode conter essa cadeia11
:1
, a cadeia binária restante (vamos doá-la como1x
deve ser vista desde:1x
está na sequência ou1x0
está na sequência, pois contém uma sub-string exclusiva1x
Conclusão:
a forma binária do número começa com
10
ou termina com1
seguido pelo número ímpar de0
. Ou descreva em regex: x match/^10|10(00)*$/
.fonte