Revenge of the Clocks (ripped off USACO)

There are 9 clocks, arranged in a 3x3 array. They are labelled
A B C
D E F
G H I
Each clock is set to either one o'clock, two o'clock, three o'clock, ... or twelve o'clock.
There are nine possible moves, numbered from 1 to 9. Each move advances a certain set of clocks by 1 hour. The moves and their corresponding sets of clocks are:
1 ABDE
2 ABC
3 BCEF
4 ADG
5 BDEFH
6 CFI
7 DEGH
8 GHI
9 EFHI

We wish to know the shortest sequence of moves that will restore all the clocks to 12 o'clock.
For example, suppose A, B, and C are initially set to eleven o'clock, D, E, and F are set to twelve o'clock, and G, H, and I are set to ten o'clock. Then, doing move 2 once and move 8 twice resets all the clocks.

Input Format:
9 lines, containing one integer each, the initial states of clocks A, B, C, D, E, F, G, H, and I, respectively, where 1 denotes 1 o'clock, 2 denotes 2 o'clock, and so on.

Output Format:
9 lines, containing one integer each. Line #n should contain the number of times to do move #n in the shortest possible sequence of moves.

Sample Input:
11
11
11
12
12
12
10
10
10


Sample Output:
0
1
0
0
0
0
0
2
0

All Submissions
Best Solutions


Point Value: 15
Time Limit: 2.00s
Memory Limit: 16M
Added: Dec 01, 2008
Author: bbi5291

Languages Allowed:
C++03, PAS, C, HASK, ASM, RUBY, PYTH2, JAVA, PHP, SCM, CAML, PERL, C#, C++11, PYTH3

Comments (Search)

If you do a move 12 times it's the same as not doing it at all. (so mod 12). Furthermore, mod 12, there's only one possible solution per test. If you can determine a sequence of moves that will turn just one of the clocks forward 1 hour, therefore, you can turn each clock the appropriate number of hours. Write a program to determine these 9 "magic sequences" (it will take a while, but once you have the answers you can hard-code them into your program.)

USACO training pages?

Wow, that was quick.