# 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

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 lostinrecursion@gmail.com. So 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. harveyjohnson

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!

• Paul Salomon

My pleasure, Harvey. Thanks for commenting, and thanks for your enthusiasm. If you write any of your own, please submit them to the contest. I’d love to see.

2. Five Triangles

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

http://fivetriangles.blogspot.com/2013/03/50-mail-bags.html

3. Pingback: Monday Fun | Kitten's Purring

4. Pingback: Still imbalanced | CAS Musings

5. NickB

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?

• Paul Salomon

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.

• Tim Baumann

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:

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.

 — 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 where 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 where 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)) ] where 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 where 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)

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.

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

view raw

output.txt

hosted with ❤ by GitHub

• Paul Salomon

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!

6. 6th Grade Math Practice

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.

• Paul Salomon

Hey thanks for the comment!

7. Pingback: Monday Fun | Kitten's Purring

8. Daniel Rocha

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

• Paul Salomon

Hey Daniel! That’s awesome you’ve found them so useful. I do t have plans to be at NCTM. Where are you from?

9. Anonymous

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

• Paul Salomon

Oh yeah! Awesome. Thanks for checking in!