開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- JavaScript Library
- Safari(Web browser)
- 参考書籍
- JavaScript 第6版 (David Flanagan(著)、村上 列(翻訳)、オライリージャパン)
- JavaScriptリファレンス 第6版(David Flanagan(著)、木下 哲也(翻訳)、オライリージャパン)
アルゴリズムパズル(Anany Levitin (著)、Maria Levitin (著)、黒川 洋 (翻訳)、松崎 公紀 (翻訳)、オライリージャパン)の中級パズル、63.(プラスとマイナス(Pluses and Minuses))をJavaScriptで。
63.(プラスとマイナス(Pluses and Minuses))
コード(Emacs)
HTML5
<label for="0">n = </label> <input id="n0" type="number" min="1" step="1" value="100"> <div id="output0"></div> <script src="sample63.js"></script>
JavaScript
{ 'use strict'; Array.range = function (start, end, step) { var nums = [], i; if (step === 0) { throw { name: 'ValueError', message: 'range() arg 3 must not be zero', }; } if (step === undefined) { step = 1; } if (end === undefined) { end = start; start = 0; } if (step > 0) { for (i = start; i < end; i += step) { nums.push(i); } } else { for (i = start; i > end; i += step) { nums.push(i); } } return nums; }; let div_output = document.querySelector('#output0'), input_n = document.querySelector('#n0'); let nums2str = (nums) => { return nums.map((n) => { if (n >= 0) { return `+${n}`; } return n.toString(); }).join(''); }; let sum = (nums) => { return nums.reduce((x, y) => x + y, 0); }; let output = () => { let n = parseInt(input_n.value, 10), nums = Array.range(1, n + 1), output = '', r = n % 4; if (r === 0) { nums = nums.map((n) => { let r = n % 4; if (r === 0 || r === 1) { return n; } return -n; }); output = `${nums2str(nums)} = ${sum(nums)}`; } else if (r === 3) { nums = nums.map((n) => { if (n === 1 || n === 2) { return n; } if (n === 3) { return -n; } let r = n % 4; if (r === 0 || r === 3) { return n } return -n; }); output = `${nums2str(nums)} = ${sum(nums)}`; } else { output = '解は存在しない。'; } div_output.innerText = output; }; input_n.onchange = output; output(); }
0 コメント:
コメントを投稿