Un ensemble de différences cycliques est un ensemble d'entiers positifs avec une propriété unique:
- Soit
n
le plus grand entier de l'ensemble. - Soit
r
n'importe quel entier (pas nécessairement dans l'ensemble) supérieur à 0 mais inférieur ou égal àn/2
. - Laissez -
k
le nombre de solutions à(b - a) % n = r
oùa
etb
sont des membres de l'ensemble. Chaque solution est une paire ordonnée(a,b)
. (Notez également que cette version de modulo rend les nombres négatifs positifs en y ajoutantn
, contrairement aux implémentations dans de nombreuses langues.) - Enfin, si et seulement s'il s'agit d'un ensemble de différences cycliques, la valeur de
k
ne dépend pas de votre choix der
. Autrement dit, toutes les valeurs der
donnent le même nombre de solutions à la congruence ci-dessus.
Cela peut être illustré par l'exemple suivant:
Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)
Chaque valeur de r
a le même nombre de solutions, 3 dans ce cas, il s'agit donc d'un ensemble de différences cycliques.
Contribution
L'entrée sera une liste d'entiers positifs. Puisqu'il s'agit d'une propriété set, supposez que l'entrée n'est pas triée. Vous pouvez supposer que n
c'est au moins 2
, mais k
peut être nul.
Production
Votre programme / fonction doit sortir une valeur véridique si l'ensemble est un ensemble de différence cyclique, ou une valeur de falsey sinon.
Cas de test
Ensembles de différences cycliques valides:
10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1
( source de données , bien que leur convention soit différente)
Ensembles de différences cycliques non valides:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
a
etb
être le même membre (pas nécessairementa ≠ b
)?b
eta
sont le même nombre, alors(b-a)%n = 0
, mais 0 n'est pas l'une des valeurs pour lesquelles vous recherchez des solutions. Il n'y a donc pas d'interdiction explicite de leur donner le même numéro, mais ils ne le seront jamais.7 7 7
soit une entrée non valide. Un ensemble ne répète pas les valeurs7 7 7
a été demandé par un autre utilisateur, mais je l'ai supprimé car il ne s'agit pas d'un ensemble.r
par0 < r <= max(input)/2
, mais plutôt0 < r < max(input)
parce que nous pouvons obtenir desr > max(input)/2
cas en retournant simplement la soustraction enr <= max(input)/2
cas.Réponses:
Gelée ,
147 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Husk , 13 octets
Essayez-le en ligne!
Les trois exposants 1 semblent inutiles ...
Explication
la source
Wolfram Language (Mathematica) ,
5352 octetsEssayez-le en ligne!
Remarque, on n'a pas besoin de diviser l'élément max par deux en raison de symétrie (on peut vérifier tous les comptes de modulos
1
àmax(input) - 1
).Explication
Prenez toutes les permutations de longueur 2 de l'entrée.
Trouvez les différences de chacun
Modifiez le résultat par l'élément maximal de l'entrée.
Trouvez les fréquences de chaque élément.
Indiquez si tous les nombres sont identiques.
la source
Python 3 ,
868481 octets-3 octets à JungHwan Min
Essayez-le en ligne!
la source
JavaScript (ES6), 87 octets
Renvoie 0 ou 1 .
Cas de test
Afficher l'extrait de code
la source
Perl,
686766 octetsComprend
+2
pourap
la source
Python 3 , 74 octets
Essayez-le en ligne!
la source
Rubis , 81 octets
Essayez-le en ligne!
Non golfé:
la source
Haskell, 84 octets
l est la fonction qui effectue la vérification. Il calcule simplement toutes les différences et compte.
la source
let
dans un modèle de garde au lieu d'where
enregistrer un octet: essayez-le en ligne!