The "Who caught the fish" logical riddle: Given: 1) If Tom didn't, then Dick did. 2) "Tom did" and "Jim didn't" are not both true statements. 3) If Dick did, then Tom did and Jim did. Is it true that Jim did? I will convert each statement to DCI program settings that change any machine state which conflicts with it to one that doesn't. If the riddle allows, with care/luck the resulting program won't have crashes were it tries to simultaneously set and reset the same flip-flop. I will then determine which machine states the completed program leaves unchanged and see if they provide a consistent answer to the riddle. Assign flip-flop A to Tom, B to Dick, and C to Jim; let 1/true signify "did catch" and 0/false signify "didn't catch". In strict Boolean logic terms, the first statement says only that having both A and B "didn't" is inconsistent -- setting either or both to "did" yields states consistent with it. The statement's colloquial meaning is to set B to "did" while leaving A as "didn't", and the corresponding program is: . __1_ __2_ __3_ __4_ __5_ __6_ A: ..|. .F|. ..|. ..|. ..|. ..|. B: ..|. .F|S ..|. ..|. ..|. ..|. C: ..|. ..|. ..|. ..|. ..|. ..|. The second statement says states with both A true and C false are not valid, but it doesn't provide guidance as to how they should be changed. The program could toggle either or both A and C flip-flops. I think toggling both is most aesthetic, so I'll add programming for two sets of rods: . __1_ __2_ __3_ __4_ __5_ __6_ A: ..|. .F|. T.|R T.|. ..|. ..|. B: ..|. .F|S ..|. ..|. ..|. ..|. C: ..|. ..|. .F|. .F|S ..|. ..|. The third statement may be split into two sub-statements (this can help avoid a crash): 3a) if B is true and A is false, set A true 3b) if B is true and C is false, set C true I'll assign 3a to logic rod 6, exhausting the available "Set" clock rods. Since clock rod 4 sets only C, I can use logic rod 5 for 3b's condition and use an OR-slider to join logic rods 4 and 5 to clock rod 4: . . . . . . . . . |--o----| . __1_ __2_ __3_ __4_ __5_ __6_ A: ..|. .F|. T.|R T.|. ..|. .F|S B: ..|. .F|S ..|. ..|. T.|. T.|. C: ..|. ..|. .F|. .F|S .F|. ..|. The resulting state transition table is: abc --- 000 -> 010 001 -> 011 010 -> 111 011 -> 111 100 -> 001 101 -> 101 110 -> 011 111 -> 111 Note we can start from any state and cycle the clock until we reach one of two stable states: 101 and 111. We can answer the riddle that yes, Jim did catch fish, as did Tom, but the boys didn't tell enough to determine whether or not Dick did. Also note that if we had programmed only one of the transitions for statement 2, the stable states would have remained the same and reachable from any starting state.