STORY (skippable)

Every Who down in Whoville enjoys Christmas Day

But you are the Grinch!  And whatever they say

You HATE Christmas Day, with those terrible lights

(They shine into your eyes, and they shine much too bright)

You HATE Christmas Day, with those huge awful trees

(You think you're allergic...they're making you sneeze)

But you HATE most of all all those Christmasy toys

That bring Christmas morning that Christmasy noise

(Oh god, all the noise!  All the noise, noise, NOISE, NOISE!)

(If there's one thing you hate, it's the noise, noise, NOISE, NOISE!!!!!!)

And tomorrow you know all those noises will start

As the presents bring joy to each Who child's heart

And they'll show all this joy (as Who children do)

By making loud noises and bothering you!

But as you are leaving earplugs by your bed

And preparing the pillows to cover your head

You realize there might be a thing you can do!

You can't steal the presents (they'd know it was you)

But for fifty-three years you've been hearing this riot

And sometimes it's louder!  And sometimes more quiet!

For the more a Who child enjoys all their toys

The more they will make all that terrible noise

But what if - you think - they were feeling less glee?

Yes, that is the way, it's so clear now you see!

For it's long been tradition (among all the Whos)

That when you give presents, each child must get two

And it's also tradition there (don't ask me why)

To distribute them randomly, closing your eyes

So at night, when the Whos sleep and dream of their joy

You'll creep in and rearrange all of those toys

And the very next morn, when the Who children wake,

They'll run down the stairs and their presents they'll take

But then, why, instead of the gifts that they're hoping

You'll give each one gifts that will make them start moping!

A doll for the Who who thinks dolls are for babies!

Puppies for the Whos who think they carry rabies!

And then, why at last, why on Christmas this year

You'll sleep soothed by the sound of those Who children's tears!

But the whisper, so soft, from your treacherous heart:

You could bring them more joy, and no more stand apart...


  • Each Who child has been given two presents.  Based on long Who tradition, you believe these presents have historically been allocated among the children randomly.
  • You must allocate two presents to each child, and may not assign any child two of the same present, but other than that you may distribute the gifts however you wish.
  • Your goal is to minimize the amount of noise produced (by all children combined).  You have a dataset of past presents received and noise made to help with this.
  • (You could instead/also submit a solution where you invert the goal and try to maximize the noise.  But why would you want to do that?)

The ten current Who children are:

Andy Sue Who12M
Betty Drew Who11F
Sally Sue Who11F
Phoebe Drew Who9F
Freddie Lou Who8M
Eddie Sue Who8M
Cindy Drew Who6F
Mary Lou Who6F
Ollie Lou Who5M
Johnny Drew Who4M

You have the following 20 toys to allocate among them (remember, exactly two toys to each child, and no child may get two of the same toy, or you'll give yourself away!):

  • Four Blum-Bloopers
  • Four Fum-Foozlers
  • Two Gah-Ginkas
  • Three Sloo-Slonkers
  • Three Trum-Troopas
  • Four Who-Whonkers

An answer key and leaderboard will be posted on Monday the 10th (my holiday schedule permitting).  

As usual, working together is allowed and encouraged, but for the sake of those who wish to work alone please spoiler-tag (type '>!' at the start of a line) any comments with information on the dataset.

Thank you to abstractapplic for feedback on a draft of this!  (For clarification, abstractapplic has no inside information on the dataset and can still play the scenario).

New Comment
10 comments, sorted by Click to highlight new comments since: Today at 7:04 AM

blum: 6
fum: 8(F), 4(M)
gah: 11-age/2
sloo: 5+age/2
trum: 5
who: 5(F), 9(M)

Everyone has one non-trum toy that produces double-noise, for them, regardless of age.
trum produces double-noise if someone else in your family also received a trum this year.

Give sloo to young, gah to old, who to female, fum to male, and trum to separate families. Do not give doublers.

e.g. [doubler | give them these]
Andy Sue Who 12 M 1550 sloo | gah fum
Betty Drew Who 11 F 1551 fum | gah who
Sally Sue Who 11 F 1552 fum | who trum 
Phoebe Drew Who 9 F 1553 sloo | who blum
Freddie Lou Who 8 M 1554 sloo | fum trum
Eddie Sue Who 8 M 1555 who | fum blum
Cindy Drew Who 6 F 1556 who | trum blum
Mary Lou Who 6 F 1557 gah | sloo who
Ollie Lou Who 5 M 1558 fum | sloo blum
Johnny Drew Who 4 M 1559 blum | sloo fum 

Revised model:

Noise is generated per-present, and combined additively for each child. Under ordinary circumstances:

  • Blum-Bloopers produce 6 Noise.
  • Fum-Foozlers produce 8 Noise for girls, 4 for boys.
  • Who-Whonkers produce 5 Noise for girls, 9 for boys.
  • Sloo-Slonkers produce 5 Noise, plus 1 extra unit for every two years since birth.
  • Gah-Ginkas produce 5 Noise, plus 1 extra unit for every two years until teenagerhood.
  • Trum-Troopas usually produce 10 Noise, but occasionally only produce 5. (Figuring out what if anything predicts a halving here is the main unsolved problem in my analysis.)

Each child has exactly one gift type which produces twice as much Noise as it would by default. This remains consistent over a child’s life (or at least until adolescence), so we can use past preferences to predict how they’ll react this year.

Allocations for minimizing Noise:

(I haven’t confirmed this is literally optimal given my model but I bet it’s pretty close)

Andy: F + G

Betty: W + G

Sally: W + T

Phoebe: W + T

Freddie: F + B 

Eddie: F + B

Cindy: B + T

Mary: W + S

Ollie: S + B

Johnny: F + S

Allocations for maximizing Noise:

Andy: S + B

Betty: F + B

Sally: F + S

Phoebe: G + B

Freddie: S + T

Eddie: W + T

Cindy: W + T

Mary: G + F

Ollie: F + W

Johnny: B + W

The weird hipstery approach I’m actually going with, after way too much overthinking about the “presents are allocated randomly” rule:

I suspect the convention the Whos think is best,

Is a lesson, a puzzle, a trick and a test.

I doubt that they’re stupid, or that they don’t care:

It’s how they teach children to trade and to share.

As a rule, the traditions your ancestors used,

Should not be ignored. But they can be improved!

The dice may choose poorly. I know that I won’t.

So, each child gets gifts: one they like, one they don’t.

That way, I make sure that no Who is left out,

Of the joy or the dealing this day is about.


Andy: F + B

Betty: S + B

Sally: G + S

Phoebe: F + B

Freddie: W + T

Eddie: S + T

Cindy: G + T

Mary: W + F

Ollie: B + W

Johnny: F + W


And as for myself, well, it’s hard to believe

That I missed this solution: I’ll simply just . . . leave!

Flee south for the winter! Head back when it’s done!

Let them have all their joys, all their noise, all their fun!

(If I so disapprove of how Whos spend this day,

I shouldn’t own property here anyway!)

My current analysis and results:

I noticed that the B/F/W combinations tended to be consistent when given to the same child multiple times, so looked at these first.

Assuming that noise is a summed contribution from both toys, then it looks like B usually contributes 6, with some discrepancies consistent with it sometimes contributing 12 instead.

F meanwhile always contributes 4, 8 or 16.

amd W contributes 5(only if F is 8 or 16), 9 (only if F is 4 or 8), 10 (only if F is 8), or 18 (seen with F=4).

Note: it is always possible to make such an attribution with 3 variables, regardless if it really is a sum, but it seems to have worked out in view of subsequent results.

Next, I looked at T, combinations with which seem to be inconsistent but not so as to suggest an age relationship. It looks like T is for some whos 5 or 10 (inconsistently) and for other 10 or 20 (inconsistently).

G and S vary usually from about 5-11 (Note - I wrote this before finding the numbers for the latest Whos!), with G dropping by 1 every 2nd year, and S rising by one every second year for any particular Who.

Comparing to actual recent results we can fill in expectations for how much noise our current Whos will make next year with different toys:

Who | B | F | G | S | T | W

1550 Andy Sue | 6 | 4 | 5 | 18 22 | 5 or 10 | 9

1551 Betty Drew | 6 | 16 | 11 | 10 |5 or 10 | 5

1552 Sally Sue |  6 | 16 |  6 |  10 |  ? 5 or 10 | 5

1553 Phoebe Drew | 6 | 8 | 7 | 18 | ? 5 or 10 | 5

1554 Freddie Lou | ? 6 |  4 |  7 |  17 |  5 or 10 | 9

1555 Eddie Sue | 6 | 4 |  7 | 9 | ? | ?  9 or 18

1556 Cindy Drew | 6 | 8 | 8 |  8 | ? 5 or 10 | 10

1557 Mary Lou |  ? 6 | 8 | 19 16 | 8 | 5 or 10 | ? 5

1558 Ollie Lou | ? |  8 |  8 or 9 | 7 | ? | 9

1559 Johnny Drew | 12 | 4 | ? |  7 | ? 5 or 10 | 9

And whoops, looks like something's wrong since Andy Sue  had a huge jump in noise from toy combos including Sloo-Slonkers between the ages of 3 and 4, looking like he enjoys S to the tune of 14 noise at age 4 and 16 at 7. Something's also up with Phoebe Drew. But, I continued to project forwards in both cases to 18 at the current year anyway as if nothing is wrong.

Also something wrong with Mary Lou and Gah-Ginkas, again I press forward assuming it's all OK.

While we have seen combos with Sally Sue, Phoebe Drew, Eddie Sue, Cindy Drew, Ollie Lou and johnny Drew involving Trum-Troopas, they've all had a 10 contribution from T, so we don't know if they get 5/10 or 10/20 from them.

Now for the solutions:

we have 4B, 4F, 2G, 3S, 3T and 4W to distribute.

In order to try to maximize noise, I'll distribute as follows:

1550 Andy Sue  S + W 

1551 Betty Drew  F + G

1552 Sally Sue  F + T

1553 Phoebe Drew   F + S + T

1554 Freddie Lou B + S   

1555 Eddie Sue F + T + W

1556 Cindy Drew F+ W 

1557 Mary Lou B+ G

1558 Ollie Lou B+ W T

1559 Johnny Drew B+ W

In order to try to minimize noise, I'll distribute as follows:

1550 Andy Sue  F + G T

1551 Betty Drew  B + W 

1552 Sally Sue  B + W

1553 Phoebe Drew B + W

1554 Freddie Lou  F + T

1555 Eddie Sue F + G 

1556 Cindy Drew B + S

1557 Mary Lou T + W 

1558 Ollie Lou  G + S + T 

1559 Johnny Drew  F + S

edit: in view of abstractapplic's observations, we can fill in some of the ?'s in the chart, added in above. The information that a doubling is involved with the anomalies also changes how we project forward the high Gs or Ss. This also led me to reinterpret some results above, also I noticed I had accidentally projected upwards instead of down for G for Mary Lou. Whoops. Since we don't know what Ollie Lou has doubled, I've now avoided giving him T when minimizing noise, even at the expense of a less optimal G allocation. Also fishing for more upside when maximizing noise.

Min noise in 9 max is 32, with an average of 16.
Everyone with > 28 noise had a Trum-Troopa. All the really low instances of noise which involved Trum-Troops were wither with a boy paired with a Fum-Foozler or a girl pared with a Who-Whonker.

Girls tend to make much more noise with Fum-Foozler than boys.

There seems to be a slight bias to younger children producing less noise with Sloo-Slonker.

If a child likes/dislikes a Gah-Ginka one year it looks like it will also like/dislike it another year.

Blum-Blooper appears to be consistently unpopular with Fum-Foozler and normally unpopular with Who-Whonker

Which suggests.

Blum-Blooper: Ideally goes with Fum-Foozler but possibly also Who-Wonker.
Fum-Foozler: Only goes to boys
Gah-Ginka: Goes to children that haven't liked it in previous years.
Sloo-Slonker: Give to younger children
Trun-Troops: Go to either boys with a Fum-Foozler or girls with a Who-Whonker
Who-Whonker: From others

   Four Blum-Bloopers
   Four Fum-Foozlers
   Two Gah-Ginkas
   Three Sloo-Slonkers
   Three Trum-Troopas
   Four Who-Whonkers

Andy Sue Who 12 M  Gah-Ginka, Blum-Blooper
Betty Drew Who 11 F Trun-Troops, Who-Whonker
Sally Sue Who 11 F Trun-Troops, Who-Whonker
Phoebe Drew Who 9 F Trun-Troops, Who-Whonker
Freddie Lou Who 8 M Fum-Foozler, Blum-Blooper
Eddie Sue Who 8 M Gah-Ginka, Fum-Foozler
Cindy Drew Who 6 F Blum-Blooper, Who-Whonker
Mary Lou Who 6 F Sloo-Slonker, Blum-Blooper
Ollie Lou Who 5 M Fum-Foozler, Sloo-Slonker
Johnny Drew Who 4 M Fum-Foozler, Sloo-Slonker

I haven't finished my analysis yet, let alone decided a strategy based on it, but I have made some progress.

Findings thus far:

Girls with a Blum-Blooper make 6 Noise.

Girls with a Who-Whonker make 5 or 10 Noise.

Girls with a Fum-Foozler make 8 or 16 Noise.

Boys with a Blum-Blooper make 6 or 12 Noise.

Boys with a Who-Whonker make 9 or 18 Noise.

Boys with a Fum-Foozler make 4 or 8 Noise.

Sloo-Sloonkers make 4+ceiling((1+Age)/2) Noise, except sometimes you give them to boys and they make more.

Gah-Ginkas make 4+ceiling((14-Age)/2) Noise, except sometimes you give them to girls and they make more.

Trum-Troopas are hard to predict but there are a lot of 5s and 10s in that distribution and the average is pretty high.

And most importantly:

Though I haven't quite confirmed this yet, it looks like children who react unusually to a given present one Christmas (doubled Who-Whonker Noise, bonus Sloo-Slonker Noise, etc) tend to react the same way on subsequent Christmases. If that's true, it means my next step should be researching the noise history of the individual Whos I'm targeting.


I split the problem into two parts: first, modeling how much noise will be produced by a given Who child with given presents, and second, how to optimize that value.

I declined to use the names of the Who children, since my intuition said that those shouldn't be predictive of anything.  Also, there were Who children with the same name and same ID who lived years apart, which seemed like a bug.

I tried several models (random forest, gradient boosted forest) but got the best cross-validation accuracy when I used a ridge regression with product features. I ended up using the following features:

['Age', 'BlumBlooper__Age', 'BlumBlooper', 'FumFoozler__Age',  'FumFoozler__BlumBlooper', 'FumFoozler', 'GahGinka__Age', 'GahGinka__BlumBlooper', 'GahGinka__FumFoozler', 'GahGinka', 'SlooSlonker__Age', 'SlooSlonker__BlumBlooper', 'SlooSlonker__FumFoozler', 'SlooSlonker__GahGinka', 'SlooSlonker', 'SlooSlonker__GenderDummy_F', 'SlooSlonker__GenderDummy_M', 'TrumTroopa__Age', 'TrumTroopa__BlumBlooper', 'TrumTroopa__FumFoozler', 'TrumTroopa__GahGinka', 'TrumTroopa__SlooSlonker', 'TrumTroopa', 'TrumTroopa__GenderDummy_F', 'TrumTroopa__GenderDummy_M', 'WhoWhonker__Age', 'WhoWhonker__BlumBlooper', 'WhoWhonker__FumFoozler', 'WhoWhonker__GahGinka', 'WhoWhonker__SlooSlonker', 'WhoWhonker__TrumTroopa', 'WhoWhonker', 'WhoWhonker__GenderDummy_F', 'WhoWhonker__GenderDummy_M', 'GenderDummy_F__Age', 'GenderDummy_F__BlumBlooper', 'GenderDummy_F__FumFoozler', 'GenderDummy_F__GahGinka', 'GenderDummy_F', 'GenderDummy_M__Age', 'GenderDummy_M__BlumBlooper', 'GenderDummy_M__FumFoozler', 'GenderDummy_M__GahGinka', 'GenderDummy_M__GenderDummy_F', 'GenderDummy_M']

To optimize the noise, I assigned the presents randomly, checking that each was unique. Then I did a Markov chain optimization procedure where I swapped presents if it improved the score or made it worse by less than a random threshold. This procedure could probably be improved. I'm thinking about applying a quadratic programming library to the optimization procedure, but that seems kind of difficult.

Maximum noise proposal

Estimated noise: 195.72749659660874

Andy Sue Who WhoWhonker SlooSlonker

Betty Drew Who FumFoozler SlooSlonker

Sally Sue Who FumFoozler SlooSlonker

Phoebe Drew Who BlumBlooper FumFoozler

Freddie Lou Who TrumTroopa WhoWhonker

Eddie Sue Who TrumTroopa WhoWhonker

Cindy Drew Who GahGinka FumFoozler

Mary Lou Who BlumBlooper GahGinka

Ollie Lou Who BlumBlooper WhoWhonker

Johnny Drew Who TrumTroopa BlumBlooper


Minimum noise proposal

Estimated noise: 129.9544674398252

Andy Sue Who TrumTroopa GahGinka

Betty Drew Who BlumBlooper WhoWhonker

Sally Sue Who BlumBlooper WhoWhonker

Phoebe Drew Who BlumBlooper WhoWhonker

Freddie Lou Who FumFoozler GahGinka

Eddie Sue Who FumFoozler TrumTroopa

Cindy Drew Who SlooSlonker WhoWhonker

Mary Lou Who BlumBlooper SlooSlonker

Ollie Lou Who FumFoozler TrumTroopa

Johnny Drew Who FumFoozler SlooSlonker

Also, there were Who children with the same name and same ID who lived years apart, which seemed like a bug.

The same Who Child can appear in several rows while they are growing up (for instance, Who Child 1530, Eddie Lou Who, appears in the dataset 12 times, from 1 year old in year 19 to 12 years old in year 30). This is not a bug, children do in fact have more than one Christmas while growing up.  

I don't think there are any cases where the same ID shows up many years apart - if there were that would indeed be a bug.  Do you have an example of that you can point me at?

Ah, I got confused by Phoebe Drew Who, who shows up with ids 1533 and 1553.

After I posted my first post, but before reading the other answers, it occurred to me that I was probably leaving noise on the table by not modeling the individual Who children. Reading the other answers, it seems like doing that is key.

Revised results below when taking individual idosyncrasies into account in the ridge regression:



Andy Sue Who TrumTroopa FumFoozler

Betty Drew Who WhoWhonker BlumBlooper

Sally Sue Who BlumBlooper WhoWhonker

Phoebe Drew Who WhoWhonker BlumBlooper

Freddie Lou Who TrumTroopa GahGinka

Eddie Sue Who GahGinka FumFoozler

Cindy Drew Who SlooSlonker BlumBlooper

Mary Lou Who SlooSlonker WhoWhonker

Ollie Lou Who SlooSlonker FumFoozler

Johnny Drew Who TrumTroopa FumFoozler



Andy Sue Who SlooSlonker WhoWhonker

Betty Drew Who SlooSlonker FumFoozler

Sally Sue Who TrumTroopa FumFoozler

Phoebe Drew Who SlooSlonker FumFoozler

Freddie Lou Who WhoWhonker BlumBlooper

Eddie Sue Who BlumBlooper WhoWhonker

Cindy Drew Who GahGinka FumFoozler

Mary Lou Who TrumTroopa GahGinka

Ollie Lou Who WhoWhonker BlumBlooper

Johnny Drew Who BlumBlooper TrumTroopa

But why would you want to do that?

If you go on a vacation to the beach, somewhere far away, and those gift givers are given a chance in turn, to hear far, far too much noise, perhaps next year, they'll get quieter gifts.

Or they'll decide they love noise and decide to have a christmas parade next year!

Do you dare try your hand at the dice?