title: Minimum Rotations Unlock Circular Lock
signature: minimumRotationsUnlockCircularLock :: Integer -> Integer -> Integer
  minimumRotationsUnlockCircularLock input unlock_code = 
test_code: import Text.Printf
  import Control.Exception (catch, SomeException)
  import Data.Typeable
  import qualified Data.List as List
  import qualified Data.Map as Map
  import qualified Data.Set as Set
  
  -- SOLUTION CODE
  -- ============================================
  
  PLACEHOLDER_CODE_BODY
  
  -- TESTING CODE 
  -- ============================================
  validateSolution :: Integer -> Integer -> Bool
  validateSolution actual expected = do
      actual == expected
  
  
  driver :: Integer -> Integer -> Integer -> String
  driver input unlock_code expected = do
      if (validateSolution (PLACEHOLDER_FN_NAME input unlock_code) expected)
          then "PASSED"
      else "FAILED"
  
  main = do
      printf "TEST-0...%s\n" (driver (71) (46) (8) )
  
      printf "TEST-1...%s\n" (driver (90) (65) (8) )
  
      printf "TEST-2...%s\n" (driver (28) (84) (8) )
  
      printf "TEST-3...%s\n" (driver (41) (23) (4) )
  
      printf "TEST-4...%s\n" (driver (32) (58) (6) )
  
      printf "TEST-5...%s\n" (driver (39) (82) (8) )
  
      printf "TEST-6...%s\n" (driver (33) (58) (7) )
  
      printf "TEST-7...%s\n" (driver (89) (32) (8) )
  
      printf "TEST-8...%s\n" (driver (50) (51) (1) )
  
      printf "TEST-9...%s\n" (driver (92) (77) (7) )
  
source_py: def minimum_rotations_unlock_circular_lock(input, unlock_code):
      rotation = 0
      while ((input > 0) or (unlock_code > 0)):
          input_digit = (input % 10)
          code_digit = (unlock_code % 10)
          rotation += min(abs((input_digit - code_digit)), (10 - abs((input_digit - code_digit))))
          input = int((input / 10))
          unlock_code = int((unlock_code / 10))
      return rotation
source_cpp: int minimum_rotations_unlock_circular_lock(int input, int unlock_code) {
    int rotation = 0;
    int input_digit, code_digit;
    while ( input || unlock_code ) {
      input_digit = input % 10;
      code_digit = unlock_code % 10;
      rotation += min ( abs ( input_digit - code_digit ), 10 - abs ( input_digit - code_digit ) );
      input /= 10;
      unlock_code /= 10;
    }
    return rotation;
  }