Salida de esta secuencia binaria de longitud 1160:
-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++
La secuencia
Esta secuencia finita está estrechamente estructurada de una manera que espero se preste a métodos únicos para la compresión. Surge del problema de discrepancia de Erd, que apareció en un desafío anterior .
Tratando los términos como +1 y -1, esta es una secuencia de discrepancia de longitud máxima 2, lo que significa que:
Para cada tamaño de paso positivo
d
, si toma cadad
'enésimo término (comenzando con eld
enésimo término), la suma de la secuencia resultante permanece entre -2 y 2 inclusive.
Si piensa que cada uno +
significa un paso a la derecha y -
un paso a la izquierda, esto significa que la caminata de cada d
instrucción no se desplaza más de 2 pasos desde la posición inicial.
Por ejemplo, para d=3
, tomar cada 3er término da la secuencia +-++--+--+-...
, cuyas sumas corrientes son [1,0,1,2,1,0,1,0,-1,0,1,...]
, que nunca llegan a -3 o 3.
-++-+--++-++-+--+--++-+--+--++-+--+...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
+ - + + - - + - - + -
1 0 1 2 1 0 1 0 -1 0 -1 ...
Esta secuencia se encontró en 2014 a través de una búsqueda por computadora. Consulte este documento , donde la secuencia se reproduce en el Apéndice B. La búsqueda demuestra que 1160 es la longitud máxima de una secuencia de discrepancia-2, aunque hay más de una secuencia de esa longitud. El problema de discrepancia de Erd, comprobado en 2015 , dice que dicha secuencia debe tener una longitud finita para cualquier discrepancia máxima c
en lugar de 2.
Requisito de tiempo
Su código debería finalizar en 5 segundos . Esto es para limitar la fuerza bruta.
Formato de salida
Puede utilizar dos caracteres o valores distintos fijos para +
y -
en cualquier formato de tipo lista o cadena. El formato debe ser uno en el que los valores de 1160 bits se puedan leer directamente, no, por ejemplo, codificados como un número a través de su representación binaria o una cadena a través de valores de caracteres. Para la salida de cadena, se permite una nueva línea final.
Tabla de clasificación
Respuestas:
Jalea , 149 bytes
Hay algún patrón, por ejemplo, solo 81 de las 256 cadenas binarias de longitud 8 están presentes si se corta la secuencia en ochos, pero (al menos todavía) no he notado ninguna forma de utilizar ninguno para reducir el conteo de bytes desde esta base directa 250 de compresión convertida en una lista binaria.
Pruébalo en línea! (el pie de página formatea la lista binaria en una cadena para facilitar la comparación directa).
fuente
Python 2 ,
269259256247245243 bytesPruébalo en línea!
fuente
JavaScript (ES6),
263253252 bytesTraté de usar la menor cantidad de datos de carga posible. Lamentablemente, pero no es sorprendente, esto requiere bastante código de descompresión.
Descompostura:
163153152 bytesA continuación se muestra una versión formateada sin los datos. El código sin procesar está en el fragmento de demostración.
¿Cómo?
Llevamos un registro de las sumas en ejecución a [i] de cada i -ésimo término. Cada vez que una de estas sumas alcanza el límite inferior -2 , sabemos que el próximo término debe ser un + . La misma lógica se aplica al límite superior. Esto es útil hasta i = 264 y no guarda ningún byte adicional más allá de eso.
Esto nos deja con 599 términos que no se pueden adivinar. Los almacenamos como ⌈599 / 8⌉ = 75 bytes, codificados en una cadena Base64 de 100 caracteres.
Manifestación
Mostrar fragmento de código
fuente
Jalea ,
110109107 bytesEsto toma demasiado tiempo en TIO, pero termina en menos de 3 segundos en mi computadora de escritorio.
Pruébalo en línea!
fuente
Jalea ,
135133130129105104 bytesBasado en los elementos anteriores de la secuencia, el algoritmo hace una suposición educada sobre cuál podría ser el siguiente elemento. Esto funciona para todos menos 99 elementos, cuyos índices están codificados para que los elementos correspondientes puedan intercambiarse.
Pruébalo en línea!
fuente
MATL , 224 bytes
La salida es de la forma
1 0 0 1 0 ...
, donde1
corresponde'-'
y0
corresponde a'+'
.Pruébalo en línea!
Explicación
La secuencia ha sido codificada en longitud de ejecución. Todas las 720 carreras tienen longitudes 1, 2, 3 o 4, siendo 3 o 4 menos comunes. Entonces cada 3 ha sido reemplazado por 2, 0, 1 (una corrida de 2, luego una corrida de 0 del otro símbolo, luego una corrida de 1 nuevamente) y de manera similar cada 4 ha sido reemplazado por 2, 0, 2. Esto da una matriz ternaria de longitud 862.
Esta matriz se convierte a codificación base-94 y es la cadena larga que se muestra en el código (
'$Te...kG'
). La codificación Base 94 utiliza los 95 caracteres ASCII imprimibles, excepto la comilla simple (que tendría que ser escapado).El código convierte esa cadena de la base 94 a la base 3, y utiliza el resultado para decodificar los símbolos
[1 0 1 0 ... 0]
de longitud de ejecución (matriz de longitud 862).fuente
Jalea , 95 bytes
Un punto medio entre mis dos enfoques anteriores.
El código intenta adivinar 842 elementos de la secuencia y codifica los 318 restantes. 19 de las conjeturas son incorrectas y deben revertirse mediante una lista de índices codificados.
Pruébalo en línea!
Cómo funciona
©
B
Ḥ
C
⁽¡ɠ
Ḋ
fuente
Carbón , 150 bytes
Pruébalo en línea!
Utiliza la compresión de cuerda incorporada de carbón. Usos
.
para-
y!
para+
.fuente
CJam, 153 bytes
Usos
1
para-
y0
para+
.Contiene no imprimibles. Pruébalo en línea!
Esto es bastante simple Convierte una secuencia larga de base 256 a base 2.
fuente
Python 3 ,
236232 bytesGracias a Mego por guardar 4 bytes.
Pruébalo en línea!
Utiliza la codificación CP-437. Gracias a Dennis por señalar un error.
fuente
437
es un alias paracp437
, por lo que puede reducir 4 bytes eliminando loscp
bits en ambas ocasiones.Python 2 ,
364250 bytesGracias a Jonathan Allan por guardar 114 bytes.
Pruébalo en línea!
fuente
C# , 385 bytes
Datos
String
El resultado pretendido.Golfed
Sin golf
Código completo
Lanzamientos
385 bytes
- Solución inicial.Notas
fuente
05AB1E , 149 bytes
Súper aburrida. Solo un número comprimido. Usos
1
para-
y0
para+
.Pruébalo en línea!
fuente
PHP, 276 bytes
Pruébalo en línea!
fuente
Rubí , 245 bytes.
Salida 0 para + y 1 para -.
Pruébalo en línea!
fuente
Perl, 164 bytes
Hexdump:
La solución obvia y aburrida: simplemente ponga todos los bits en una cadena binaria, 8 bits por byte. Utiliza 0 para - y 1 para +. Intentaré jugar al golf un poco más.
fuente
Retina , 333 bytes
Pruébalo en línea!
fuente