Um conjunto de diferenças cíclicas é um conjunto de números inteiros positivos com uma propriedade exclusiva:
- Let
n
Ser o maior número inteiro no conjunto. - Seja
r
qualquer número inteiro (não necessariamente no conjunto) maior que 0, mas menor ou igual an/2
. - Seja
k
o número de soluções para(b - a) % n = r
ondea
eb
quaisquer membros do conjunto. Cada solução é um par ordenado(a,b)
. (Observe também que esta versão do módulo torna positivos os números negativos, adicionandon
a ele, ao contrário das implementações em muitos idiomas.) - Por fim, se e somente se este for um conjunto de diferenças cíclicas, o valor de
k
não depende da sua escolhar
. Ou seja, todos os valores der
dão o mesmo número de soluções para a congruência acima.
Isso pode ser ilustrado com o seguinte exemplo:
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
tem o mesmo número de soluções, 3 neste caso, portanto, este é um conjunto de diferenças cíclicas.
Entrada
A entrada será uma lista de números inteiros positivos. Como essa é uma propriedade definida, assuma que a entrada não está classificada. Você pode assumir que n
é pelo menos 2
, embora k
possa ser zero.
Resultado
Seu programa / função deve gerar um valor verdadeiro se o conjunto for um conjunto de diferenças cíclicas ou um valor falsey de outra forma.
Casos de teste
Conjuntos de diferenças cíclicas 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
( fonte de dados , embora a convenção seja diferente)
Conjuntos de diferenças cíclicas invá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
fonte
fonte
a
eb
é o mesmo membro (não necessariamentea ≠ b
)?b
ea
são o mesmo número,(b-a)%n = 0
mas 0 não é um dos valores que você procura por soluções. Portanto, não há uma proibição explícita de que eles sejam o mesmo número, mas eles nunca serão.7 7 7
fosse uma entrada inválida. Um conjunto não repita valores7 7 7
foi solicitado por outro usuário, mas eu o removi porque não é um conjunto.r
por0 < r <= max(input)/2
, mas em vez disso0 < r < max(input)
, porque podemos obterr > max(input)/2
casos simplesmente girando a subtração der <= max(input)/2
casos.Respostas:
Geléia ,
147 bytesExperimente online!
Como funciona
fonte
Casca , 13 bytes
Experimente online!
Os três 1s sobrescritos parecem um desperdício ...
Explicação
fonte
Wolfram Language (Mathematica) ,
5352 bytesExperimente online!
Observe que não precisamos dividir o elemento max por dois devido à simetria (podemos verificar a contagem de todos os módulos
1
paramax(input) - 1
).Explicação
Faça todas as permutações de comprimento 2 da entrada.
Encontre diferenças de cada
Modifique o resultado pelo elemento máximo da entrada.
Encontre as frequências de cada elemento.
Retorne se todos os números são iguais.
fonte
Python 3 ,
868481 bytes-3 bytes thaks em JungHwan Min
Experimente online!
fonte
JavaScript (ES6), 87 bytes
Retorna 0 ou 1 .
Casos de teste
Mostrar snippet de código
fonte
Perl,
686766 bytesInclui
+2
paraap
fonte
Python 3 , 74 bytes
Experimente online!
fonte
Ruby , 81 bytes
Experimente online!
Ungolfed:
fonte
Haskell, 84 bytes
l é a função que faz a verificação. Apenas calcula todas as diferenças e contagens.
fonte
let
em uma proteção de padrão em vez dewhere
salvar um byte: Experimente on-line!