微信公众号

即便起跑时完全一样,最终也还是会不同

2022-06-30链接

// 我一直想尝试把写作和写程序结合起来。//// 前阵子看到一篇文章。大致意思是即使人的天赋完全相同,背景完全相同,财// 富分配完全随机,最终也仍然会产生贫富差距。//// 已经有人用 R 语言对这个问题进行了模拟。但绝大部分人都没有执行 R 语言// 程序的条件,无法体验模拟的过程。所以我写了这个 JavaScript 程序。任何// 人只需要打开 Chrome 或 Edge 浏览器,然后同时按下 Ctrl + Shift + J 三// 个按键,把这个程序复制粘贴到出现的控制台中,再按下回车,就可以看到程// 序执行的结果。//// 好,现在让我们开始。 // 有一间屋子,屋里有 20 只猴。var apes = new Array(20); // 每只猴都有 20 根香蕉。for (var i=0; iapes.length; i++){ apes[i] = 20;} // 这间屋子里每天都会进行一次香蕉的重分配。在每次分配中,每只猴拿出一根// 香蕉给随机的另一只猴。如果某只猴已经没有香蕉了,就不必再给别的猴香蕉。// 这个慈悲的程序不会让猴负债,而且还允许穷光蛋猴有机会拿其它猴给的香蕉。// 我们先看看这样持续 20 年会怎么样。for (var i=0; i365*20; i++){ for (var j=0; japes.length; j++){ if (apes[j]!=0){ apes[j] -= 1; apes[god(0, apes.length-1, j)] += 1; } }}// 下面这个函数就是猴子屋的上帝,会决定每次把香蕉给谁。// (其实就是随机返回一个不小于 min、不大于 max 且不等于 exclude 的整数)function god(min, max, exclude) { var i; min = Math.ceil(min); max = Math.floor(max); do { i = Math.floor(Math.random() * (max - min + 1)) + min } while (i == exclude) return i;} // 好,现在 20 年已经过去了。我们按照目前香蕉的多少从低到高排个序。apes.sort((a, b) = a - b); // 然后看看现在每个猴子有多少香蕉。我们可以直接显示数字。// apes.forEach(money = console.log(money));// 但用柱状图会更直观一些。apes.forEach(money = console.log('-'.repeat(money), money)); // 因为分配是随机的,所以程序每次执行的结果都不同。但总趋势都是类似的。// 下面是我这里的一次执行结果:// -- 2// --- 3// ---- 4// ----- 5// ----- 5// ------ 6// ------- 7// ---------- 10// ---------- 10// ----------- 11// ------------- 13// ---------------- 16// ----------------- 17// -------------------- 20// ------------------------- 25// ------------------------------------- 37// -------------------------------------------- 44// ------------------------------------------------ 48// -------------------------------------------------------- 56// ------------------------------------------------------------- 61