Digamos que una subcadena es cualquier sección continua de una cadena original. Por ejemplo, cat
es una subcadena de concatenate
. Diremos que una subcadena adecuada es una subcadena que no es igual a la cadena original. Por ejemplo, concatenate
es una subcadena concatenate
pero no una subcadena adecuada. (las cadenas de caracteres individuales no tienen subcadenas adecuadas)
Ahora definiremos una secuencia usando estos términos. El n º término en esta secuencia será el número más pequeño de tal manera que hay una subcadena adecuada de su representación binaria que no es una subcadena de cualquier término anterior en la secuencia. El primer término es 10
.
Como ejercicio vamos a generar los primeros 5 términos. Trabajaré en binario para facilitar las cosas.
El primer término es 10
. Dado que 11
el siguiente número más pequeño tiene solo una subcadena adecuada, 1
que también es una subcadena 10
, 11
no está en la secuencia. 100
sin embargo, contiene la subcadena adecuada 00
que no es una subcadena de 10
lo que 100
es nuestro próximo término. El siguiente es el 101
que contiene la subcadena adecuada única que lo 01
agrega a la secuencia, luego 110
contiene la subcadena adecuada 11
que es nueva y la agrega a la secuencia.
Ahora tenemos
10, 100, 101, 110
111
es el siguiente, pero contiene solo las subcadenas 1
y 11
no es un término. 1000
sin embargo contiene 000
agregarlo a la secuencia.
Aquí están los primeros dos términos en 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
Tarea
Ya sea
Tome n como entrada y generar el n º término en esta secuencia (ya sea 0 o 1 indexada)
Salida continua de términos de la secuencia
Este es el código de respuestas de golf se puntúan en bytes con menos bytes que son mejores.
n
)?a(36)
es 47 (1 indexado).Respuestas:
Python 3 ,
88807875 bytes-6 bytes gracias a Wheat Wizard
-2 bytes gracias a RootTwo
-3 bytes gracias a notjagan
Pruébalo en línea!
fuente
bin(n)[2:]
conf"{n:b}"
.Jalea , 22 bytes
Pruébalo en línea!
fuente
Mathematica,
116110 bytesProduce infinitamente términos de la secuencia.
Explicación
x
es la lista de términos de la secuencia hasta ahora.f
es unFunction
que toma un número entero y devuelve todaSubsequences
su2
representación base (incluida la lista vacía{}
y la lista completa deIntegerDigits
sí mismo).Evaluar el
...
valor den
from2
a∞
.Si
...
es asíFalse
, entonces el segundo argumento paraAnd
(&&
) nunca se evalúa. Si...
es asíTrue
, luegoEcho@n
imprime y devuelven
, que luegoAppendTo
la listax
.Queremos verificar que alguna subcadena adecuada
n
no sea una subcadena de ningún término anterior en la secuencia.Most@f@n
es la lista de subcadenas adecuadas den
, luego verificamos si hay alguna subcadenas_
que sea unaMemberQ
de esa lista de tal manera que la listaf/@x
de listas de subcadenas de términos anteriores de la secuencia seaFreeQ
des
nivel2
.fuente
Mathematica,
10994 bytesSalida continua de términos de la secuencia
Gracias especiales a @ngenisis para -15 bytes
Mathematica, 123 bytes
Tome n como entrada y genere el enésimo término en esta secuencia (1 indexado)
entrada
salida
fuente
15
bytes que pueden ir:SubsetQ
es más corto y equivalente aContainsAll
, puede usar enAnd
lugar deIf
,Union
es innecesario, yDo
casi siempre es más corto queFor
:s={};Do[!SubsetQ[s,(t=Subsequences@IntegerDigits[i,2])[[2;;-2]]]&&(s=s~Join~t;Echo@i),{i,∞}]
3
más bytes usandoMost
:s={};Do[!SubsetQ[s,Most[t=Subsequences@IntegerDigits[i,2]]]&&(s=s~Join~t;Echo@i),{i,2,∞}]
Pyth , 20 bytes
Esto imprime la secuencia infinitamente. Solo se puede usar fuera de línea como consecuencia.
Explicación (El espacio es una nueva línea):
fuente
Pyth , 20 bytes
Pruébalo en línea!
fuente
Haskell
172 bytesPruébalo en línea.
Explicación
El código genera la secuencia continuamente.
b
devuelve la representación binaria de anInt
como aString
s
devuelve todas las subcadenas de una cadenap
devuelve todas las subcadenas adecuadas de una cadenan
es una función que se aplica de forma iterativa y devuelve una tupla que contiene:scanl
se usa para llamarn
una y otra vez y su salida se filtra para contener solo elementos mayores que 1Aquí hay una versión un poco más legible, antes de jugar al golf:
fuente
JavaScript, 57 bytes
Mostrar fragmento de código
Vamos a escribir el número dado n en forma binaria, entonces:
10
, n debe en la secuencia:1
, no se debe ver la cadena binaria restante, ya que n es el número más pequeño que puede contener dicha cadena11
:1
, la cadena binaria restante (vamos a donarlo como1x
debe verse desde:1x
está en la secuencia, o1x0
está en la secuencia, ya que contiene una subcadena única1x
Conclusión:
la forma binaria del número comienza con
10
o termina con1
seguido de un número impar de0
. O describa en regex: x match/^10|10(00)*$/
.fuente