Skip to content

Instantly share code, notes, and snippets.

@kentbrew
Created July 9, 2017 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kentbrew/3764697ed8d31152b2b96531080dfe01 to your computer and use it in GitHub Desktop.
Save kentbrew/3764697ed8d31152b2b96531080dfe01 to your computer and use it in GitHub Desktop.
Imagine a room full of 100 people with 100 dollars each. With every tick of the clock, every person with money gives a dollar to one randomly chosen other person. After some time progresses, how will the money be distributed?
// paste me into console to explore the counterintuitive problem found here:
// http://www.decisionsciencenews.com/2017/06/19/counterintuitive-problem-everyone-room-keeps-giving-dollars-random-others-youll-never-guess-happens-next/
// setup: tweak as needed
var rounds = 10, turns = 1000, max = 100, start = 100;
// play one round
var round = function () {
// setup
var a = [];
// everybody gets the same number of things to start
for (var i = 0; i < max; i = i + 1) {
a.push(start);
}
// everybody who has at least one thing: give one to somebody else
var turn = function () {
for (var i = 0; i < max; i = i + 1) {
if (a[i]) {
a[i] = a[i] - 1;
var r = Math.floor(Math.random() * max);
a[r]++;
}
}
};
// run some turns
for (var t = 0; t < turns; t = t + 1) {
turn();
}
// sort so it's easy to spot highs and lows
a.sort(function (a, b) {
return b - a;
});
//return results
return a;
};
// play some rounds and log them to console
for (var i = 0; i < rounds; i = i + 1) {
console.log(round());
}
@jones1618
Copy link

Nice. I copied this into a JSFiddle so people could play with it without opening a console.
https://jsfiddle.net/jones1618/n5w5nyo6/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment