Quineoid Triple - A(B) = C

C, 243 240 180 132 57 bytes

f(int*v){ v[4]^=1;}
f(int*v){ v[4]^=2;}
f(int*v){ v[4]^=3;}

Try it online: A B C

The input program can be passed as a char* to the function f, and is implicitly converted to an int*.

-60 bytes thanks to @Neil
-48 bytes thanks to @Bubbler
-72 bytes thanks to @AZTECCO


Pyth, 5 + 5 + 5 = 15 bytes

CxCz1
CxCz2
CxCx3

Try A(B), A(C), B(A), B(C), C(A), C(B) online!

Explanation

CxCz_
  Cz    # convert input from base-256 to int
 x  _   # xor 1, 2 or 3 based on program
C       # convert from int to base-256

brainfuck, 33+34+35=102 bytes

Perhaps one of a few answers that has the length of the 3 programs not equal. (*)

+␀>>,<,[<+>,]<-----[+>>.<<].,[.,]
++␀>>,<,[<+>,]<-----[+>>.<<].,[.,]
+++␀>>,<,[<+>,]<-----[+>>.<<].,[.,]

Try it online!

The ␀ () represents a null character.

Alternatives:

  • +␀>,>,[<<+>>,]<<-----[+>.<].,[.,]
  • -␀>,>,[<<->>,]<<+++++[->.<].,[.,]

(*): The only one at the time of posting. BF is the only used language that doesn't have integer literal.


Explanation:

+             Set a cell (call this cell 1) to X (depends on the current program, may be 1, 2 or 3)
<NUL>         No operation
>,            Read the first byte of the input (must be a "+") and store it in cell 2
>,[<<+>>,]    Increment cell 1 by (-1+(the number of remaining "+" in the input until the <NUL>))
                (use cell 3 as temporary storage)
<<-----       Decrement cell 1 by 5
[+>.<]        Print (-(that many)) (cell 2) (must be +)
.             Print a NUL byte
,[.,]         Copies the rest of the input to the output