開発環境
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Safari(Web browser)
- JavaScript 第6版 (David Flanagan(著)、村上 列(翻訳)、オライリージャパン)(参考書籍)
- JavaScriptリファレンス 第6版(David Flanagan(著)、木下 哲也(翻訳)、オライリージャパン)(参考書籍)
アルゴリズムパズル(Anany Levitin (著)、Maria Levitin (著)、黒川 洋 (翻訳)、松崎 公紀 (翻訳)、オライリージャパン)の初級パズル、48.(マックナゲット数(McNugget Numbers))をJavaScriptで。
コード(Emacs)
HTML5
<label for="num0">マックナゲット数: </label>
<input id="num0" type="number" min="1" step="1" value="10"
style="text-align: right">
<span id="output0"></span>
<script src="sample48.js"></script>
JavaScript
(function () {
'use strict';
var input_num = document.querySelector('#num0'),
span_output = document.querySelector('#output0'),
nums = [1, 2, 3, 5, 7, 11],
d,
calc,
output;
d = {
4: [1, 0, 0],
6: [0, 1, 0],
8: [2, 0, 0],
9: [0, 0, 1],
10: [1, 1, 0],
12: [0, 2, 0],
13: [1, 0, 1],
14: [2, 1, 0],
15: [0, 1, 1]
};
calc = function (n) {
var iter;
if (nums.indexOf(n) !== -1) {
return null;
}
iter = function (n, result) {
var d0;
if (n < 16) {
d0 = d[n];
result[0] += d0[0];
result[1] += d0[1];
result[2] += d0[2];
return result;
}
result[0] += 1;
return iter(n - 4, result);
};
return iter(n, [0, 0, 0]);
};
output = function () {
var n = parseInt(input_num.value, 10),
result;
try {
result = calc(n);
} catch (e) {
span_output.innerText = e.message;
return;
}
if (result === null) {
span_output.innerText = 'マックナゲット数ではない。';
} else {
span_output.innerText =
' = 4 * ' + result[0] +
' + 6 * ' + result[1] +
' + 9 * ' + result[2];
}
};
input_num.onchange = output;
output();
}());
0 コメント:
コメントを投稿