
Anonymous A. answered 05/22/19
Computer programmer with 10+ years experience
He gave you a digraph. Digraphs and trigraphs are archaic sequences two- or three-character values that translate to a character that some really old keyboards did not have. In your case, ":>" is digraph of "]" and "<:" is "[". So your odd while statement becomes
```
while( a[ 0xFULL?'\\0':-1]>>=a[!!0X.1P1 ] )
```
While we're at it, 0xFULL is 0xF where ULL stands for `unsigned long long` which is just an unsigned 64-bit integer. This is still 0xF (or 15 in decimal).
```
while( a[15?'\\0':-1]>>=a[!!0X.1P1 ] )
```
Non-zero numbers evaluate to true, so the conditional expression `15?'\\0':-1` evaluates to `\\0` That is a multi-character constant which, while allowed, is implementation defined and horrible practice. On my machine, it evaluates to 0x5C30 (23600 decimal) and causes a segmentation fault when I try to run it. You probably meant just `\0`. This evaluates to the number 0.
```
while(a[0] >>= a[!!0X.1P1 ])
```
0X.1P1 is a hexadecimal floating literal. Your hex fraction (from the `.1` of `0X.1`) is 0.1 (or 1/16) and it's raised by 2^1 (from the `1` in `P1`). So this value resolves to (1/16)*2 or 1/8 or 0.125. This is a non-zero number, so it evaluates to TRUE. So you can evaluate `!!0X.1P1` as `!(!(0.125))` as `!(!TRUE)` as `!FALSE` as `TRUE`. When converted to an integer, TRUE evaluates to `. You can use `!!` as a way to convert any non-zero value into 1 or TRUE. So you have
```
while(a[0] >>= a[1])
```
The rest is simple programming compared to this, so I leave that all to you.