開発環境
- 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 コメント:
コメントを投稿