Dado um número inteiro positivo n
, projete um transferidor com o menor número de marcas que permita medir todos os ângulos que são um múltiplo integral de 2π/n
(cada um em uma única medição).
Detalhes
Como saída, você pode enviar uma lista de números inteiros no intervalo 0
para n-1
(ou 1
para n
) que representam a posição de cada marca. Como alternativa, você pode gerar uma string / lista de comprimento n
com a #
na posição de cada marca e a _
(sublinhado) onde não há nenhuma. (Ou dois caracteres diferentes, se for mais conveniente.)
Exemplo: Para que n = 5
você precise exatamente de 3 marcas para poder medir todos os ângulos 2π/5, 4π/5, 6π/5, 8π/5, 2π
, defina (por exemplo) uma marca em 0
, uma marca em 2π/5
e uma marca em 6π/5
. Podemos codificar isso como uma lista [0,1,3]
ou como uma string ##_#_
.
Exemplos
Observe que as saídas não são necessariamente ú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]
PS: É semelhante ao problema da régua esparsa , mas em vez de uma escala linear (com duas extremidades), consideramos uma escala circular (angular).
PPS: esse script deve calcular um exemplo de um conjunto de marcas para cada um n
. Experimente online!
PPPS: Como o @ngn apontou, esse problema é equivalente a encontrar uma base de diferença mínima de um grupo cíclico de ordem n
. Os pedidos mínimos estão listados em http://oeis.org/A283297 e alguns limites teóricos são encontrados em https://arxiv.org/pdf/1702.02631.pdf
n = q^2 + q + 1
no poder principalq
.Respostas:
Gelatina , 13 bytes
Experimente online!
Como funciona
fonte
MATL , 20 bytes
Isso fica sem memória no TIO para entradas além
8
.Experimente online!
Como funciona
Isso gera o poder cartesiano de
[0 1 ... n-1]
com expoenten
e usa um loop para testar cada tupla cartesiana. O teste consiste no cálculo todas as diferenças de pares de elemento se a tupla, e ver se essas diferenças modulon
incluem todos os números0
,1
, ...,n-1
.Assim que uma tupla cartesiana que preenche a condição é encontrada, o loop é encerrado e as entradas exclusivas nessa tupla são impressas como a solução.
Isso funciona porque, dado u > v , é garantido que um conjunto suficiente de tuplas com u entradas exclusivas seja testado antes de qualquer tupla com v entradas exclusivas. Um "conjunto suficiente" significa que se nenhuma das tuplas nesse conjunto for uma solução, nenhuma outra tupla com o mesmo número de entradas exclusivas será uma solução.
Por exemplo, para
n = 3
as tuplas cartesianas são mostradas abaixo, onde cada linha é uma tupla:0 0 0
é a única tupla relevante com1
valor único. Mesmo que1 1 1
e2 2 2
apareça muito mais tarde,0 0 0
é uma solução se e somente se forem. Portanto, o conjunto de singleton formado pela tupla0 0 0
é um conjunto suficiente para u =1
.0 0 1
e0 0 2
, formam um conjunto suficiente para u =2
; isto é, eles cobrem todos os casos com2
valores únicos. A quarta tupla,,0 1 0
nunca será selecionada como solução, porque0 0 1
será testada primeiro. Da mesma forma, a tupla0 2 0
nunca será selecionada porque aparece depois0 0 2
. Tuplas como2 2 1
nunca serão selecionadas como solução porque0 0 1
são equivalentes (módulon
e até valores duplicados) e aparecem primeiro.Código comentado:
fonte
Stax ,
2621 bytesExecute e depure online!
No momento, a versão online falha na entrada,Implementado. Cuidado, leva algum tempo para executar o20
mas esse bug foi corrigido e ainda deve ser implantado no intérprete online20
caso.Explicação
Acontece que, devido à maneira como a diferença por pares é calculada, não preciso me preocupar com a equivalência de
k
ex-k
aqui. Salvando 5 bytes.Usa a versão descompactada para explicar.
Fazendo cumprir a exigência de que
0
e1
tanto ser membros da resposta, podemos gerar o powerset com[2..x]
em vez de[0..x]
e, em seguida, adicionar o0
e1
manualmente para cada elemento da Powerset. É mais eficiente, mas precisa lidar com a entrada1
especialmente e custa mais bytes.fonte
Gelatina , 17 bytes
Experimente online!
-1 byte graças ao Sr. Xcoder
fonte
R
.Python 2 , 148 bytes
Experimente online!
fonte