開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Node.js, Safari(JavaScript エンジン)
- Learning JavaScript [邦訳](参考書籍)
Think Perl 6: How to Think Like a Computer Scientist (Laurent Rosenfeld(著)、Allen B. Downey(著)、Oreilly & Associates Inc)の Part 1(Starting with the basics)、Chapter 5(Fruitful Subroutines)の Exercises. を JavaScript で取り組んでみる。
Exercises.
コード(Emacs)
HTML5
<pre id="output0"></pre> <button id="run0">run</button> <button id="clear0">clear</button> <script src="sample1.js"></script>
JavaScript
let btn0 = document.querySelector('#run0'),
btn1 = document.querySelector('#clear0'),
pre0 = document.querySelector('#output0'),
p = (x) => pre0.textContent += x + '\n',
range = (start, end, step=1) => {
let result = [];
for (let i = start; i < end; i += step) {
result.push(i);
}
return result;
};
let ack = (m, n) => {
if (m === 0) {
return n + 1;
}
if (m > 0 && n === 0) {
return ack(m - 1, 1);
}
return ack(m - 1, ack(m, n - 1));
};
let firstL = (word) => word.substring(0, 1),
lastL = (word) => word.substring(word.length - 1),
middleL = (word) => word.substring(1, word.length - 1);
let isPalindrome = (word) =>
word.length <= 1 ? true :
firstL(word) === lastL(word) ? isPalindrome(middleL(word)) :
false;
let isPowerOf = (a, b) => a === 1 ? true :
a % b === 0 && isPowerOf(Math.floor(a / b), b);
let gcd = (a, b) =>
b === 0 ? a :
gcd(b, a % b);
let output = () => {
p('2.');
range(1, 4)
.forEach((m) =>
range(1, 5)
.forEach((n) => p(`ack(${m}, ${n}) => ${ack(m, n)}`)));
p('3-3');
p(isPalindrome(''));
p(isPalindrome('a'));
p(!isPalindrome('ab'));
p(isPalindrome('aba'));
p(!isPalindrome('abc'));
p(isPalindrome('abba'));
p(!isPalindrome('abca'));
p('4.');
range(1, 21)
.forEach((a) =>
range(2, 4)
.forEach((b) => {
if (isPowerOf(a, b)) {
p(`${a} is power of ${b}`);
} else {
p(`${a} is not power of ${b}`);
}
}));
p('5.');
range(2, 11)
.forEach((a) =>
range(2, 11)
.forEach((b) => p(`(${a}, ${b}) = ${gcd(a, b)}`)));
};
btn0.onclick = output;
btn1.onclick = () => pre0.textContent = '';
output();
0 コメント:
コメントを投稿