The original riddle posted on HN.
Official solution: Dancer -> Donder -> Comet -> Vixen -> Blitzen -> Dasher -> Rudolph -> Cupid -> Prancer
My solution's demo link
Solution code:digraph {
rankdir=LR;
-- Vixen should be behind Rudolph, Prancer and Dasher, whilst Vixen should be in front of Dancer and Comet.
Vixen -> Rudolph;
Vixen -> Prancer;
Vixen -> Dasher;
Dancer -> Vixen;
Comet -> Vixen;
-- Dancer should be behind Donder, Blitzen and Rudolph.
Dancer -> Donder;
Dancer -> Blizten;
Dancer -> Rudolph;
-- Comet should be behind Cupid, Prancer and Rudolph.
Comet -> Cupid;
Comet -> Prancer;
Comet -> Rudolph;
-- Donder should be behind Comet, Vixen, Dasher, Prancer and Cupid.
Donder -> Comet;
Donder -> Vixen;
Donder -> Dasher;
Donder -> Prancer;
Donder -> Cupid;
-- Cupid should be in front of Comet, Blitzen, Vixen, Dancer and Rudolph.
Comet -> Cupid;
Blizten -> Cupid;
Vixen -> Cupid;
Dancer -> Cupid;
Rudolph -> Cupid;
-- Prancer should be in front of Blitzen, Donder and Cupid.
Blizten -> Prancer;
Donder -> Prancer;
Cupid -> Prancer;
-- Blitzen should be behind Cupid but in front of Dancer, Vixen and Donder.
Blizten -> Cupid;
Dancer -> Blizten;
Vixen -> Blizten;
Donder -> Blizten;
-- Rudolph should be behind Prancer but in front of Dasher, Dancer and Donder.
Rudolph -> Prancer;
Dasher -> Rudolph;
Dancer -> Rudolph;
Donder -> Rudolph;
-- Finally, Dasher should be behind Prancer but in front of Blitzen, Dancer and Vixen.
Dasher -> Prancer;
Blizten -> Dasher;
Dancer -> Dasher;
Vixen -> Dasher;
}
You could simplify the solution graph by piping it through tred, i.e. do a transitive reduction...