Antecedentes
Una secuencia de conjunto ex-creciente de orden se define como una secuencia de conjuntos enteros que satisface lo siguiente:
- Cada es un subconjunto no vacío de . { 1 , 2 , ⋯ , N }
- Para , , es decir, dos conjuntos consecutivos no tienen elementos en común.S i ∩ S i + 1 = ∅
- Para , la media (valor promedio) de es estrictamente menor que la de .S i S i + 1
Desafío
Dado un número entero positivo N
, genera la longitud de la secuencia de orden de conjunto ex-creciente más larga N
.
Casos de prueba
Estos se basan en los resultados del usuario de Project Euler thundre .
1 => 1 // {1}
2 => 2 // {1} {2}
3 => 3 // {1} {2} {3}
4 => 5 // {1} {2} {1,4} {3} {4}
5 => 7 // {1} {2} {1,4} {3} {2,5} {4} {5}
6 => 10 // {1} {2} {1,4} {3} {1,4,5} {2,3,6} {4} {3,6} {5} {6}
7 => 15 // {1} {2} {1,4} {3} {1,2,7} {3,4} {1,2,5,7} {4} {1,3,6,7} {4,5} {1,6,7} {5} {4,7} {6} {7}
8 => 21
9 => 29
10 => 39
11 => 49
12 => 63
13 => 79
14 => 99
15 => 121
16 => 145
17 => 171
18 => 203
19 => 237
20 => 277
21 => 321
22 => 369
23 => 419
24 => 477
25 => 537
Reglas
Se aplican reglas estándar de código de golf . El envío válido más corto en bytes gana.
Generosidad
Este problema se discutió aquí en el foro del Proyecto Euler hace aproximadamente 4 años, pero no se nos ocurrió un algoritmo de tiempo polinómico demostrable (en términos de N
). Por lo tanto, otorgaré una recompensa de +200 a la primera presentación que logre esto, o probaré su imposibilidad.
Respuestas:
Brachylog , 28 bytes
Pruébalo en línea!
Esto es realmente muy lento. Toma alrededor de 30 segundos
N = 3
y no se completó después de 12 minutosN = 4
.Explicación
Versión más rápida, 39 bytes.
Esto toma alrededor de 50 segundos en mi computadora
N = 4
.Este es el mismo programa, excepto que clasificamos el subconjunto de subconjuntos por promedio en lugar de tomar una permutación aleatoria. Entonces usamos en
{⟨+/l⟩/₁/₁}ᵒ
lugar dep
.Necesitamos obtener un promedio flotante porque acabo de descubrir un error ridículo en el que los flotantes y los enteros no se comparan por valor sino por tipo con predicados de orden (por eso también uso
<ᵈ
y no<₁
comparo ambos promedios; esto último requeriría que truco de doble inversión para trabajar).fuente
CJam (81 bytes)
Demo en línea . Debería ejecutarse para la entrada
4
en un tiempo razonable, pero no lo intentaría con entradas más altas.Disección
fuente
JavaScript (ES6), 175 bytes
Una búsqueda recursiva ingenua y bastante lenta. Toma aproximadamente 15 segundos calcular los 7 primeros términos en TIO.
Pruébalo en línea!
o pruebe esta versión modificada que genera la secuencia de conjuntos ex-creciente más larga.
¿Cómo?
Primero calculamos la powerset de y la almacenamos en :a{1,2,…,n} a
Parte recursiva:
fuente
Python 3 ,
205197184182 bytesochoveintiuno bytes gracias a los ovs .Pruébalo en línea!
fuente
sum
lugar dechain.from_iterable
.