Calculate n % 12
4
(Language is irrelevant)
n-((48&(11-n))>>2)
Woo! Got to 4.
11-n
will ensure all of the high order bits are set if and only if n>= 12.
48&(11-n)
== if n>11 then 48 else 0
(48&(11-n))>>2
== if n>11 then 12 else 0
n-((48&(11-n))>>2)
is the answer
4
A solution with a lookup table (it looks up i ^ (i % 12)
):
i ^ (0x1d4c000 >> (i & 0xfc) & 30)
4
Here's another solution with 4 operations:
i - ((0xffff >> (i - 12)) & 12)
It assumes that the count operand of bitshifts is implicitly taken mod 32, i.e. x >> -1
is the same as x >> 31
.
5
Another approach, using a lookup table:
i - (16773120 >> i & 1) * 12
bash – 1
echo `seq 0 11` `seq 0 11` | awk '{print $(number+1)}'
e.g.
$ echo `seq 0 11` `seq 0 11` | awk '{print $(0+1)}'
0
$ echo `seq 0 11` `seq 0 11` | awk '{print $(11+1)}'
11
$ echo `seq 0 11` `seq 0 11` | awk '{print $(12+1)}'
0
$ echo `seq 0 11` `seq 0 11` | awk '{print $(23+1)}'
11