Generate a parity bit
MATL, 8 7 bytes
8\hBz2\
Try it online! Or verify all test cases at once.
8\ % Implicitly take first input ('e' or 'o'), and compute modulo 8. Inputs 'e' and 'o'
% give 5 or 7 respectively, which have an even or odd number of `1` bits resp.
h % Implicitly take second input, and concatenate
B % Convert to binary. Gives 2D array, with one row for each original entry
z % Number of nonzero values in that 2D array
2\ % Modulo 2, i.e. compute parity
Java, 97 bytes
Because, ya know, Java.
(s,c)->{boolean e=1>0;for(int i:s.getBytes())while(i>0){if(i%2==1)e=!e;i/=2;}return c=='o'?e:!e;}
This is a lambda for a BiFunction<String, Character, Boolean>
.
e
and o
appear to be reversed in the return statement because apparently my logic was backwards.
C, 62 bytes
- 12 bytes saved thanks to @LevelRiverSt and @TonHospel.
XOR has the nice property that it can be used to reduce strings down to one char, while preserving parity.
f(s,p)char*s;{for(p/=8;*s;)p^=*s>>4^*s++;p^=p/4;return p%4%3;}
Ideone.