Étant donné un nombre entier positif n
, concevez un rapporteur avec le moins de marques qui vous permet de mesurer tous les angles qui sont un multiple entier de 2π/n
(chacun dans une seule mesure).
Détails
En sortie, vous pouvez sortir une liste d'entiers dans la plage 0
à n-1
(ou 1
à n
) qui représentent la position de chaque marque. Alternativement, vous pouvez sortir une chaîne / liste de longueur n
avec un #
à la position de chaque marque et un _
(trait de soulignement) là où il n'y en a pas. (Ou deux caractères différents si cela vous convient plus.)
Exemple: Pour n = 5
vous avez besoin exactement de 3 marques pour pouvoir mesurer tous les angles 2π/5, 4π/5, 6π/5, 8π/5, 2π
en définissant (par exemple) une marque à 0
, une marque à 2π/5
et une marque à 6π/5
. Nous pouvons coder cela sous forme de liste [0,1,3]
ou de chaîne ##_#_
.
Exemples
Notez que les sorties ne sont pas nécessairement uniques.
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: Ceci est similaire au problème de la règle clairsemée , mais au lieu d'une échelle linéaire (avec deux extrémités), nous considérons une échelle circulaire (angulaire).
PPS: ce script doit calculer un exemple d'un ensemble de marques pour chacun n
. Essayez-le en ligne!
PPPS: Comme l'a souligné @ngn, ce problème équivaut à trouver une base de différence minimale d'un groupe cyclique d'ordre n
. Les commandes minimales sont répertoriées dans http://oeis.org/A283297 et certaines limites théoriques se trouvent dans https://arxiv.org/pdf/1702.02631.pdf
n = q^2 + q + 1
pour une puissance maximaleq
.Réponses:
Gelée , 13 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
MATL , 20 octets
Cela manque de mémoire sur TIO pour les entrées au-delà
8
.Essayez-le en ligne!
Comment ça fonctionne
Cela génère la puissance cartésienne de
[0 1 ... n-1]
avec exposantn
et utilise une boucle pour tester chaque tuple cartésien. Le test consiste à calculer toutes les différences de paires d'éléments si le tuple, et de voir si ces différences modulon
comprennent tous les nombres0
,1
...,n-1
.Dès qu'un tuple cartésien remplissant la condition est trouvé, la boucle est quittée et les entrées uniques de ce tuple sont imprimées comme solution.
Cela fonctionne car étant donné u > v , un ensemble suffisant de tuples avec u entrées uniques est garanti pour être testé plus tôt que tout tuple avec v entrées uniques. Un «ensemble suffisant» signifie que si aucun des tuples de cet ensemble n'est une solution, aucun autre tuple avec le même nombre d'entrées uniques n'est une solution.
Par exemple, pour
n = 3
les tuples cartésiens sont comme indiqué ci-dessous, où chaque ligne est un tuple:0 0 0
est le seul tuple pertinent avec1
une valeur unique. Même si1 1 1
et2 2 2
apparaîtra beaucoup plus tard,0 0 0
est une solution si et seulement si c'est le cas. Ainsi, l'ensemble singleton formé par le tuple0 0 0
est un ensemble suffisant pour u =1
.0 0 1
et0 0 2
, forment un ensemble suffisant pour u =2
; c'est-à-dire qu'ils couvrent tous les cas avec2
des valeurs uniques. Le quatrième tuple,,0 1 0
ne sera jamais sélectionné comme solution, car0 0 1
il aura été testé en premier. De même, le tuple0 2 0
ne sera jamais sélectionné car il apparaît après0 0 2
. Des tuples tels que2 2 1
ne seront jamais sélectionnés comme solution car le0 0 1
est équivalent (modulon
et jusqu'aux valeurs dupliquées) et apparaît en premier.Code commenté:
la source
Stax ,
2621 octetsExécutez et déboguez en ligne!
À l'heure actuelle, la version en ligne échoue pour la saisie,déployé. Attention, il faut du temps pour exécuter le20
mais ce bogue a été corrigé et doit encore être déployé sur l'interpréteur en ligne20
dossier.Explication
Il s'avère qu'en raison de la façon dont la différence par paire est calculée, je n'ai pas à me soucier de l'équivalence de
k
etx-k
ici. Enregistrement de 5 octets.Utilise la version décompressée pour expliquer.
En appliquant l'exigence selon laquelle
0
et les1
deux doivent être membres de la réponse, nous pouvons générer le jeu de pouvoirs avec[2..x]
au lieu de[0..x]
, puis ajouter le0
et1
manuellement à chaque élément du jeu de pouvoirs. Il est plus efficace mais doit gérer l'entrée en1
particulier et coûte plus d'octets.la source
Gelée , 17 octets
Essayez-le en ligne!
-1 octet merci à M. Xcoder
la source
R
.Python 2 , 148 octets
Essayez-le en ligne!
la source