Quaternion Vector rotation formula, Simplified?

Quaternion vector rotation is defined as v’ = qvq’. I’m wondering if anyone has tried to completely factor it out and eliminate like terms yet? Haven’t taken a crack at it yet besides eliminating zero factors and unneeded output in code this looks like:
float r[4]; // r for ‘result’ (remeber v is 0,x,y,z)

r[0] = q[0]*v[0] - q[1]*v[1] - q[2]*v[2] - q[3]*v[3];
r[1] = q[0]*v[1] + q[1]*v[0] + q[3]*v[2] - q[2]*v[3];
r[2] = q[0]*v[2] + q[2]*v[0] + q[1]*v[3] - q[3]*v[1];
r[3] = q[0]*v[3] + q[3]*v[0] + q[2]*v[1] - q[1]*v[2];

v[0] = r[0]*q[0] - r[1]*q[1] - r[2]*q[2] - r[3]*q[3];
v[1] = r[0]*q[1] + r[1]*q[0] + r[3]*q[2] - r[2]*q[3];
v[2] = r[0]*q[2] + r[2]*q[0] + r[1]*q[3] - r[3]*q[1];
v[3] = r[0]*q[3] + r[3]*q[0] + r[2]*q[1] - r[1]*q[2];

Quickly, I’ve managed to reduce it to the following:

result[0] = (-quat[1]*vect[0] - quat[2]*vect[1] - quat[3]*vect[2]);
result[1] = (quat[0]*vect[0] + quat[3]*vect[1] - quat[2]*vect[2]);
result[2] = (quat[0]*vect[1] + quat[1]*vect[2] - quat[3]*vect[0]);
result[3] = (quat[0]*vect[2] + quat[2]*vect[0] - quat[1]*vect[1]);

vect[1] = result[1]*quat[0] - result[3]*quat[2] + result[2]*quat[3] - result[0]*quat[1];
vect[2] = result[2]*quat[0] - result[1]*quat[3] + result[3]*quat[1] - result[0]*quat[2];
vect[3] = result[3]*quat[0] - result[2]*quat[1] + result[1]*quat[2] - result[0]*quat[3];

if you wanted to get rid of the ‘result’ value, this is what we’d be factoring:
v[1] =
(quat[0]*vect[0] + quat[3]*vect[1] - quat[2]*vect[2])*quat[0] -
(quat[0]*vect[2] + quat[2]*vect[0] - quat[1]*vect[1])*quat[2] +
(quat[0]*vect[1] + quat[1]*vect[2] - quat[3]*vect[0])*quat[3] -
(-quat[1]*vect[0] - quat[2]*vect[1] - quat[3]*vect[2])*quat[1];
ect ect for v[2] and v[3];