More Imbalance Problems

I’m really digging these imbalance problems I came up with.  Friday was our last day before spring break, and I worked on them with every one of my classes.  They liked the puzzles, but the examples I had were a bit too easy, so our real goal was creating good imbalance problems of our own, which is way harder than solving them.  My 5th graders had the best ideas for tweaking the puzzles and making new ones.  It was cool for them to realize you couldn’t just draw a picture, because sometimes they were impossible, and other times they didn’t give enough information.  I’ll hopefully post some of their puzzles after break.

I’ve been working the last two days on my own puzzles, and I’ve never had a better time working with inequalities in my life.  They have a way of sneaky way of revealing information that I’m really liking.  2x<y+z tells you some interesting stuff, for example.  Further down I’ll talk about how I write them, what makes for a good puzzles, and the puzzle-writing contest I’m having, but right now, why don’t you try some out?  I’m especially proud of 6, 9, 10, 11, and 12.  ENJOY!

In each case, order the three shapes by weight

Imbalance 1 Imbalance 2 Imbalance 3
Imbalance 4 Imbalance 5 Imbalance 6
Imbalance 7 Imbalance 8 Imbalance 9
Imbalance 10 Imbalance 11 Imbalance 12

Fun, right?  As I’ve said, I’m offering a prize for great imbalance puzzle-writing.  My favorite two puzzlists will receive a print of their choosing from the Stars of the Mind’s Sky series, up to 12″x12″.  Just post your problem(s) in the comments or email

entwined imbalanceSo what makes a good puzzle?  It’s a matter of taste (like a lot of mathematics actually), but I tend to like my puzzles pretty simple.  A big, messy, just plain hard puzzle is just a hassle, but something compact and tricky to untangle, now that’s what I like.  I love when a puzzle requires me to think in a new way or exploit some clever little detail I hadn’t considered.  Nathan Chow sent me a really clever puzzle design that implements “entangled imbalances,” which I completely love.  Doesn’t it inspire you to write your own?  I could have cropped it so it didn’t look like an iPhone app, but I love art that reveals the creative process.

In case you’re wanting tips for writing these puzzles, I’ll tell you about my process.  I usually start with a single idea or part of the picture.  The key is thinking about what information it gives the solver, and what other information they’ll need to finish the problem.  After that it’s just a matter of cleverly revealing that information and piecing them together.  Maybe solving the problems above in order will give you a sense of the new ideas I had and was able to wrinkle in.

I hope you’re loving these as much as I am, and I’m dying to see your creations.  Mostly because I want some to solve!!!


22 responses to “More Imbalance Problems

  1. Paul, that is pretty awesome! I haven’t seen this before, but it seems a great resource for both problem solving and the kind of problem finding David Perkins talks about. Thanks for sharing!

  2. Pingback: Harvard physics problems of the week | scenic-science + thematic-mathematics | same

  3. Your blog post inspired us to put up a related problem about mail bags:

  4. Pingback: Monday Fun | Kitten's Purring

  5. Pingback: Logic Puzzle: Imbalance Problems | Let's Play Math!

  6. Pingback: Algebra Explorations Before Algebra | CAS Musings

  7. Pingback: Still imbalanced | CAS Musings

  8. Hey, I tried out the Imbalance Problems and I’d like to compare my answers with you but without making it public so I don’t ruin it for others. How can I do that with you?


    • You could send me an email, or better yet, write your answers up in a google doc and make it viewable to the public. You could post the link here. As of right now, I don’t have an answer key, so that would actually be helpful. Ill go through and verify.

      • Hey, I’ve written a program that computes the solution to simple inbalance problems. I’ve included the output of a test run on the 12 problems above and the 3 problems from the next post (my program can’t solve #13, though, because it uses equality). If you’re interested in the algorithm: My program simply translates the imbalance problem to a system of linear inequalities, which can be solved with a standard linear programming library. So, without further ado, here’s my code:

        A solver for imbalance problems. Inspired by
        This file uses linear programming to search for solutions for the weights of
        the object. Since it uses a library for LP, you have to
        `cabal install hmatrix-glpk`.
        module Main where
        import Data.List (nub, sortBy)
        import Data.Function (on)
        import Numeric.LinearProgramming
        A mobile with objects of type a
        data Imbalance a = Node (Imbalance a) (Imbalance a) lopsided to the left
        | Single a (Imbalance a)
        | End
        deriving (Eq, Show, Read)
        fromList :: [a] -> Imbalance a
        fromList = foldr Single End
        (/:), (\:) :: Imbalance a -> Imbalance a -> Imbalance a
        (/:) = Node
        (\:) = flip Node
        Lists all objects in an imbalance.
        objects :: Imbalance a -> [a]
        objects End = []
        objects (Single a r) = a : objects r
        objects (Node l r) = objects l ++ objects r
        Given an imbalance and an ordering of the objects in the imbalance, produce
        a list of linear inequalities that the objects must satisfy.
        constraints :: Eq a => [a] -> Imbalance a -> [Bound [Double]]
        constraints _ End = []
        constraints labels (Single _ i) = constraints labels i
        constraints labels (Node l r) = [bound] ++ constraints labels l ++ constraints labels r
        bound = balance :=>: 1
        balance = map fromIntegral (zipWith (-) (aggregate l) (aggregate r))
        aggregate imb = map (length . flip filter (objects imb) . (==)) labels
        Solve an imbalance using linear programming
        solve :: Eq a => Imbalance a -> Maybe [(a, Double)]
        solve imb = case simplex opt constr [] of
        Feasible (_, s) -> Just $ zip labels s
        Optimal (_, s) -> Just $ zip labels s
        labels = nub $ objects imb
        opt = Minimize $ map (const 1) labels
        constr = Dense $ constraints labels imb
        data Shape = Square | Triangle | Circle | Diamond deriving (Eq, Read)
        instance Show Shape where
        show Square = ""
        show Triangle = ""
        show Circle = ""
        show Diamond = ""
        The problems from the website above
        problems :: [Imbalance Shape]
        problems =
        [ (triangleE \: squareE) /: (circleE \: squareE)
        , (circle triangleE \: square triangleE) /: (triangle circleE \: triangle triangleE)
        , (circle (triangle squareE) /: square (circle squareE)) \: (circle (square circleE) /: square (square circleE))
        , (squareE /: circle circleE) \: (triangleE /: circleE)
        , circle (triangle squareE) /: (3 `n` Circle \: square squareE)
        , triangle (3 `n` Circle /: square circleE) \: square (triangle squareE /: square (circle circleE))
        , (2 `n` Square /: circle (circle squareE)) \: (circle (triangle squareE) /: circle (triangle triangleE))
        , triangle (circleE \: square triangleE) /: circle (circle triangleE \: squareE)
        , circle (triangle triangleE) \: (circleE /: triangle squareE)
        , circle (circleE \: triangleE) /: triangle (square triangleE)
        , (square squareE \: circle triangleE) /: (triangle triangleE \: square circleE)
        , (circle circleE /: squareE) \: square (squareE /: triangleE)
        , squareE can't encode problem 13 because it uses a balance
        , triangle (square (3 `n` Circle) \: (3 `n` Triangle)) /: circle (circle (circle (triangle triangleE)) \: (3 `n` Square))
        , (square (triangle (square triangleE)) \: (3 `n` Circle)) /: (circle (triangle (circle triangleE)) \: (3 `n` Square))
        square = Single Square
        triangle = Single Triangle
        circle = Single Circle
        squareE = square End
        triangleE = triangle End
        circleE = circle End
        c `n` w = fromList (replicate c w)
        main :: IO ()
        main = do
        putStrLn "The objects from lightest to heaviest:\n"
        sequence_ $ zipWith solveProblem [1..] problems
        solveProblem i imb = putStrLn $ show i ++ ". " ++ maybe errMsg showSolution (solve imb)
        errMsg = "Problem couldn't be solved!"
        showSolution = show . map fst . sortBy (compare `on` snd)

        The objects from lightest to heaviest:
        1. [●,▲,■]
        2. [●,▲,■]
        3. [■,▲,●]
        4. [●,■,▲]
        5. [●,■,▲]
        6. [●,■,▲]
        7. [●,▲,■]
        8. [●,▲,■]
        9. [▲,■,●]
        10. [■,●,▲]
        11. [▲,■,●]
        12. [▲,●,■]
        13. [■]
        14. [●,■,▲]
        15. [▲,■,●]

        view raw


        hosted with ❤ by GitHub

      • That’s really cool, Tim. You’re right though, 13 has some real problems, and not just because it uses equality. I’m going to replace it at some point.

        Thanks for commenting!

  9. Pingback: Marvelous #Math Monday 04-01-13 | Joy of Education

  10. Pingback: Stars of the Mind’s Sky with Diagrams | The Math Less Traveled

  11. Pingback: Day 119: Imbalance Problem Vivant | Lanier Post-a-Lot

  12. I think the basic thinking is considering what data it gives the solver, and what other data they’ll have to complete the issue. After that its simply a matter of keenly uncovering that data and sorting them out. Maybe tackling the issues above in place will provide for you a feeling of the new thoughts I had and could wrinkle in.

  13. Pingback: Monday Fun | Kitten's Purring

  14. Any chance you will be at NCTM one D.C. this year? I’ve been issuing these puzzles for years now.

  15. Rereading “Playing with Math” by Sue VanHattum. (You’re in there.) 🙂

What do you think?

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s