summaryrefslogtreecommitdiff
path: root/lib/symmetric.c
blob: 729b38cbd6bde07b4b558feba74aec398d28fdc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#include "symmetric.h"

q_t *symmetric_compose(q_t q, const q_t *g1, const q_t *g2) {
  q_t *g3 = (q_t *)malloc(q * sizeof(q_t));

  for (q_t i = 0; i < q; i++) {
    g3[i] = g1[g2[i]];
  }

  return g3;
}

q_t symmetric_act(const q_t *g, q_t s) {
  return g[s];
}

q_t *symmetric_invert(q_t q, const q_t *g) {
  q_t *g_inv = (q_t *)malloc(q * sizeof(q_t));

  for (q_t i = 0; i < q; i++) {
    g_inv[g[i]] = i;
  }

  return g_inv;
}