Найти все циклы в графе и проверить что при проходе по ним обороты считаются правильно - это вроде бы не слишком сложная задача.
Кстати, если хочется именно минималистично-нечитаемо - вот: ;)
static char state;
state >>= 2;
if( !pinA )
state |= 0x10;
if( !pinB )
state |= 0x20;
if( state == 0x2d )
up();
else if( state == 0x1e )
down();