Un conjunto de diferencias cíclicas es un conjunto de enteros positivos con una propiedad única:
- Deje
n
ser el número entero más grande del conjunto. - Sea
r
cualquier número entero (no necesariamente en el conjunto) mayor que 0 pero menor o igual quen/2
. - Deje
k
ser el número de soluciones para(b - a) % n = r
dóndea
yb
son miembros del conjunto. Cada solución es un par ordenado(a,b)
. (También tenga en cuenta que esta versión del módulo hace que los números negativos sean positivos al agregarlen
, a diferencia de las implementaciones en muchos idiomas). - Finalmente, si y solo si este es un conjunto de diferencias cíclicas, el valor de
k
no depende de su elecciónr
. Es decir, todos los valores der
dan el mismo número de soluciones a la congruencia anterior.
Esto se puede ilustrar con el siguiente ejemplo:
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)
Cada valor de r
tiene el mismo número de soluciones, 3 en este caso, por lo que este es un conjunto de diferencias cíclicas.
Entrada
La entrada será una lista de enteros positivos. Como se trata de una propiedad establecida, suponga que la entrada no está ordenada. Puede suponer que n
es al menos 2
, aunque k
puede ser cero.
Salida
Su programa / función debería generar un valor verdadero si el conjunto es un conjunto de diferencia cíclica, o un valor falso de lo contrario.
Casos de prueba
Conjuntos de diferencia cíclica válidos:
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
( fuente de datos , aunque su convención es diferente)
Conjuntos de diferencia cíclica no válidos:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
code-golf
number
decision-problem
number-theory
PhiNotPi
fuente
fuente
a
yb
ser el mismo miembro (no necesariamentea ≠ b
)?b
ya
son el mismo número, entonces(b-a)%n = 0
, pero 0 no es uno de los valores para los que está buscando soluciones. Por lo tanto, no existe una prohibición explícita de que sean el mismo número, pero nunca lo serán.7 7 7
fuera una entrada no válida. Un conjunto no repite valores7 7 7
fue solicitado por otro usuario, pero lo eliminé porque no es un conjunto.r
por0 < r <= max(input)/2
, pero en su lugar0 < r < max(input)
, ya que podemos obtenerr > max(input)/2
de los casos con sólo girar la sustracción der <= max(input)/2
los casos.Respuestas:
Jalea ,
147 bytesPruébalo en línea!
Cómo funciona
fuente
Casco , 13 bytes
Pruébalo en línea!
Los tres superíndices 1 parecen un desperdicio ...
Explicación
fuente
Wolfram Language (Mathematica) ,
5352 bytesPruébalo en línea!
Tenga en cuenta, que no es necesario dividir el elemento máximo por dos debido a la simetría (podemos hacer un recuento de todos los modulos
1
amax(input) - 1
).Explicación
Tome todas las permutaciones de longitud 2 de la entrada.
Encuentra las diferencias de cada
Modifique el resultado por el elemento máximo de la entrada.
Encuentra las frecuencias de cada elemento.
Devuelve si todos los números son iguales.
fuente
Pitón 3 ,
868481 bytes-3 bytes gracias a JungHwan Min
Pruébalo en línea!
fuente
JavaScript (ES6), 87 bytes
Devuelve 0 o 1 .
Casos de prueba
Mostrar fragmento de código
fuente
Perl,
686766 bytesIncluye
+2
paraap
fuente
Python 3 , 74 bytes
Pruébalo en línea!
fuente
Ruby , 81 bytes
Pruébalo en línea!
Sin golf:
fuente
Haskell, 84 bytes
l es la función que hace la verificación. Simplemente calcula todas las diferencias y cuenta.
fuente
let
en un patrón protector en lugar de guardarwhere
un byte: ¡ Pruébelo en línea!