0~100までの数値を2つランダムに選択し小さな値と大きな値を表示する
お題「0~100までの数値を2つランダムに選択し小さな値と大きな値を表示する」を mofmof.js でコード化するとこんな感じになります。
0..to(100).shuffle(2).nsort().f("small = @@, big = @@"); // -> "small = 2, big = 43"
素の JavaScript で同様の処理を書き下すと、こんな感じになるでしょうか。
真ん中らへんのソートはもうちょっと端折れる感じですかね。
(function() { var ary = [], i = 0, j, k; for (; i < 100; ++i) { ary.push(i); } // Fisher-Yates while (--i) { j = (Math.random() * (i + 1)) | 0; if (i !== j) { k = ary[i]; ary[i] = ary[j]; ary[j] = k; } } ary.length = 2; ary.sort(function(a, b) { return a - b; }); return "small = " + ary[0] + ", big = " + ary[1]; })();
要約すると、これ(↓)で十分なんですけどね。
(function() { var a = 0, b = 0; while (a === b) { a = Math.random() * 100 | 0; b = Math.random() * 100 | 0; } return "small = " + Math.min(a, b) + ", big = " + Math.max(a, b); })();
FizzBuzz もこんな感じに書けます
// FizzBuzz 100..times(function(n) { ++n; return n % 15 === 0 ? "FizzBuzz" : n % 3 === 0 ? "Fizz" : n % 5 === 0 ? "Buzz" : n; });
[1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "FizzBuzz", 16, 17, "Fizz", 19, "Buzz", "Fizz", 22, 23, "Fizz", "Buzz", 26, "Fizz", 28, 29, "FizzBuzz", 31, 32, "Fizz", 34, "Buzz", "Fizz", 37, 38, "Fizz", "Buzz", 41, "Fizz", 43, 44, "FizzBuzz", 46, 47, "Fizz", 49, "Buzz", "Fizz", 52, 53, "Fizz", "Buzz", 56, "Fizz", 58, 59, "FizzBuzz", 61, 62, "Fizz", 64, "Buzz", "Fizz", 67, 68, "Fizz", "Buzz", 71, "Fizz", 73, 74, "FizzBuzz", 76, 77, "Fizz", 79, "Buzz", "Fizz", 82, 83, "Fizz", "Buzz", 86, "Fizz", 88, 89, "FizzBuzz", 91, 92, "Fizz", 94, "Buzz", "Fizz", 97, 98, "Fizz", "Buzz"]