Um loop é uma estrutura algébrica bastante simples. É um tuplo (L, +) onde L é um conjunto e + é um operador binário G x L → L . Isso é + leva dois elementos da G e retorna um novo elemento. O operador também é obrigado a preencher duas propriedades
Cancelamento: Para cada a e b em G existe x e y únicos em G, de modo que
a + x = b y + a = b
Identidade: Existe um e em G tal que para cada a em G
e + a = a a + e = a
Se você estiver familiarizado com o conceito de grupo, poderá notar que um loop é apenas um grupo que não possui uma propriedade associativa.
Os loops são bem simples, então as pessoas gostam de adicionar mais regras para criar novas estruturas mais interessantes. Uma tal estrutura é um circuito Moufang que é um circuito que também satisfaz a seguinte quatro identidades forall x , y e z em L
z + (x + (z + y)) = ((z + x) + z) + y
((y + z) + x) + z = y + (z + (x + z))
(z + x) + (y + z) = (z + (x + y)) + z
(z + x) + (y + z) = z + ((x + y) + z)
Por exemplo, a seguinte tabela Cayley representa um loop Moufang:
0 1 2 3
1 0 3 2
2 3 0 1
3 2 1 0
(Se você não estiver familiarizado, uma tabela Cayley é uma matriz quadrada M, onde M i, j é igual a i + j . É uma maneira útil de representar operadores binários em um conjunto.)
Podemos mostrar que existe uma identidade facilmente 0
. O cancelamento é um pouco mais difícil de mostrar, mas uma abordagem de força bruta produz essa tabela
b a → 0 1 2 3
↓
0 0 1 2 3
1 1 0 3 2
2 2 3 0 1
3 3 2 1 0
Onde nossos elementos são as soluções para
a + x = b = x + a
(Você pode notar que esta tabela é idêntica à nossa tabela de Cayley. Vou deixar como um exercício para o leitor descobrir por que esse é o caso desse loop de Moufang)
Agora precisamos verificar as identidades de Moufang para nossa estrutura. Existem duas maneiras de fazer isso para a estrutura específica: a primeira maneira é perceber que ela é associativa e, portanto, preenche automaticamente os critérios; no entanto, isso não funcionará em geral, portanto, preferiríamos o resultado com força bruta. Existem 3 variáveis livres, cada uma com um potencial de 4 valores em todas as expressões aqui. Isso significa que precisamos executar 7 * 4 3 ou 448 cálculos. Vou deixar de fora os cálculos brutos, mas aqui está um Haskell que você pode usar para verificar isso .
Tarefa
Dado um número inteiro positivo n como entrada, o número de loops de Moufang que têm a ordem n . (a ordem de um grupo é o tamanho do conjunto)
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
Aqui está o número de loops de Moufang para as primeiras 71 entradas
1,1,1,2,1,2,1,5,2,2,1,6,1,2,1,19,1,5,1,6,2,2,1,20,2,2,5,5,1,4,1,122,1,2,1,18,1,2,2,19,1,7,1,5,2,2,1,103,2,5,1,6,1,17,2,17,2,2,1,18,1,2,4,4529,1,4,1,6,1,4,1
fonte
12
não é11
. Eu deveria ter percebido isso porque11
é o número primo.Respostas:
Python 3 ,
475410 bytesObrigado ao Mr.Xcoder por salvar alguns bytes!
Use a simetria da fórmula para salvar 65 bytes. Sim, é muita coisa.
Experimente online!
Alguns
and
podem ser substituídos por*
, resultam em menor número de unidades, mas ao custo de um tempo de execução significativamente mais lento:Python 3 , ??? bytes
[TODO coloque código aqui]
(é claro que nem tudo
*
torna o programa significativamente mais lento, apenas alguns são críticos)Ungolfed:
Experimente online!
Nenhuma barra de rolagem ...
Explicação:
O programa é bem simples.
e
tal que ae
'th th linha e ae
th th coluna são iguais a[0, 1, 2, ..., n-1]
, que é a mesma condição queEntão a parte
do código verifica isso. (para todas as linhas da matriz
T
e sua transposiçãoA
, a classificação é igual arangeN
, e existe uma linha em ambasT
eA
que é igual a ela mesma sendo classificada)As quatro condições de um loop Moufang são verificadas manualmente.
No código,
(a + b)
é representado comoT[a][b]
. (devido à representação como tabela de Cayley). Use a comparação de igualdade de encadeamento Python para evitar duplicação de(z + x) + (y + z)
.No entanto, porque a fórmula é simétrica:
Se mudarmos os operandos da
+
primeira fórmula, obteremos a segunda fórmula; e se trocarmos os operandos da+
terceira fórmula, obteremos a quarta fórmula comx
e oy
lugar trocado.Observe que a transposição da tabela Cayley é equivalente aos operadores binários que trocaram os operandos. (
x + y -> y + x
)Finalmente, todos os candidatos à mesa Cayley são escolhidos
para que cada linha seja uma permutação de
rangeN
(qual é[0, 1, 2, ..., n-1]
) e que hajan
linhas distintas.fonte