Dado un número entero positivo n, diseñe un transportador con el menor número de marcas que le permita medir todos los ángulos que sean un múltiplo integral de 2π/n(cada uno en una sola medición).
Detalles
Como salida, puede generar una lista de enteros en el rango 0de n-1(o 1a n) que representan la posición de cada marca. Alternativamente, puede generar una cadena / lista de longitud ncon un #en la posición de cada marca y un _(guión bajo) donde no hay ninguno. (O dos caracteres diferentes si es más conveniente).
Ejemplo: para n = 5que necesite exactamente 3 marcas para poder medir todos los ángulos 2π/5, 4π/5, 6π/5, 8π/5, 2πconfigurando (por ejemplo) una marca en 0, una marca en 2π/5y una marca en 6π/5. Podemos codificar esto como una lista [0,1,3]o como una cadena ##_#_.

Ejemplos
Tenga en cuenta que las salidas no son necesariamente únicas.
n: output:
1 [0]
2 [0,1]
3 [0,1]
4 [0,1,2]
5 [0,1,2]
6 [0,1,3]
7 [0,1,3]
8 [0,1,2,4]
9 [0,1,3,4]
10 [0,1,3,6]
11 [0,1,3,8]
20 [0,1,2,3,6,10]
PD: Esto es similar al problema de la regla dispersa , pero en lugar de una escala lineal (con dos extremos) consideramos una escala circular (angular).
PPS: este script debe calcular un ejemplo de un conjunto de marcas para cada uno n. Pruébalo en línea!
PPPS: como señaló @ngn, este problema es equivalente a encontrar una base de diferencia mínima de un grupo cíclico de orden n. Los pedidos mínimos se enumeran en http://oeis.org/A283297 y algunos límites teóricos se encuentran en https://arxiv.org/pdf/1702.02631.pdf

n = q^2 + q + 1para potencia principalq.Respuestas:
Jalea , 13 bytes
Pruébalo en línea!
Cómo funciona
fuente
MATL , 20 bytes
Esto se queda sin memoria en TIO para entradas más allá
8.Pruébalo en línea!
Cómo funciona
Esto genera el poder cartesiano de
[0 1 ... n-1]con exponenten, y utiliza un bucle para probar cada tupla cartesiana. La prueba consiste en calcular todas las diferencias por pares de elemento si la tupla, y ver si esas diferencias módulonincluyen todos los números0,1, ...,n-1.Tan pronto como se encuentra una tupla cartesiana que cumple la condición, se cierra el bucle y las entradas únicas en esa tupla se imprimen como la solución.
Esto funciona porque dado u > v , se garantiza que un conjunto suficiente de tuplas con entradas únicas u se probará antes que cualquier tupla con entradas únicas v . Un "conjunto suficiente" significa que si ninguna de las tuplas en ese conjunto es una solución, entonces ninguna otra tupla con el mismo número de entradas únicas es una solución.
Por ejemplo, para
n = 3las tuplas cartesianas se muestran a continuación, donde cada fila es una tupla:0 0 0es la única tupla relevante con1un valor único. Incluso si1 1 1y2 2 2aparecerá mucho más tarde,0 0 0es una solución si y solo si esos son. Entonces, el conjunto singleton formado por la tupla0 0 0es un conjunto suficiente para u =1.0 0 1y0 0 2, forman un conjunto suficiente para u =2; es decir, cubren todos los casos con2valores únicos. La cuarta tupla,0 1 0nunca se seleccionará como solución, porque0 0 1se habrá probado primero. Del mismo modo, la tupla0 2 0nunca se seleccionará porque aparece más tarde que0 0 2. Tuplas como2 2 1nunca se seleccionarán como solución porque0 0 1es equivalente (módulony hasta valores duplicados) y aparece primero.Código comentado:
fuente
Stax ,
2621 bytes¡Ejecute y depure en línea!
En este momento, la versión en línea falla para la entrada,Implementado. Tenga en cuenta que lleva un tiempo ejecutar el20pero este error se ha solucionado y aún no se ha implementado en el intérprete en línea20caso.Explicación
Resulta que debido a la forma en pairwise diferencia se calcula, no tiene que preocuparse acerca de la equivalencia de las
kyx-kaquí. Ahorro de 5 bytes.Utiliza la versión desempaquetada para explicar.
Al hacer cumplir el requisito de que
0y1ser ambos miembros de la respuesta, podemos generar el powerset con[2..x]en lugar de[0..x]a continuación, añadir el0y1manualmente para cada elemento en el powerset. Es más eficiente pero necesita manejar la entrada1especialmente y cuesta más bytes.fuente
Jalea , 17 bytes
Pruébalo en línea!
-1 byte gracias al Sr. Xcoder
fuente
R.Python 2 , 148 bytes
Pruébalo en línea!
fuente