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 0
de n-1
(o 1
a n
) que representan la posición de cada marca. Alternativamente, puede generar una cadena / lista de longitud n
con 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 = 5
que 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π/5
y 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 + 1
para 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ódulon
incluyen 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 = 3
las tuplas cartesianas se muestran a continuación, donde cada fila es una tupla:0 0 0
es la única tupla relevante con1
un valor único. Incluso si1 1 1
y2 2 2
aparecerá mucho más tarde,0 0 0
es una solución si y solo si esos son. Entonces, el conjunto singleton formado por la tupla0 0 0
es un conjunto suficiente para u =1
.0 0 1
y0 0 2
, forman un conjunto suficiente para u =2
; es decir, cubren todos los casos con2
valores únicos. La cuarta tupla,0 1 0
nunca se seleccionará como solución, porque0 0 1
se habrá probado primero. Del mismo modo, la tupla0 2 0
nunca se seleccionará porque aparece más tarde que0 0 2
. Tuplas como2 2 1
nunca se seleccionarán como solución porque0 0 1
es equivalente (módulon
y 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 el20
pero este error se ha solucionado y aún no se ha implementado en el intérprete en línea20
caso.Explicación
Resulta que debido a la forma en pairwise diferencia se calcula, no tiene que preocuparse acerca de la equivalencia de las
k
yx-k
aquí. Ahorro de 5 bytes.Utiliza la versión desempaquetada para explicar.
Al hacer cumplir el requisito de que
0
y1
ser ambos miembros de la respuesta, podemos generar el powerset con[2..x]
en lugar de[0..x]
a continuación, añadir el0
y1
manualmente para cada elemento en el powerset. Es más eficiente pero necesita manejar la entrada1
especialmente 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