開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Safari(Web browser)
- 参考書籍
- JavaScript 第6版 (David Flanagan(著)、村上 列(翻訳)、オライリージャパン)
- JavaScriptリファレンス 第6版(David Flanagan(著)、木下 哲也(翻訳)、オライリージャパン)
素数夜曲 (吉田 武 (著)、東海大学出版会)の付録D(女王陛下のLISP)、D.6(パスカルの三角形と剰余)、D.6.1(係数の相互関係)、剰余による分類を JavaScript で取り組んでみる。
コード(Emacs)
HTML5
<div id="output0"></div> <input id="row0" type="number" min="0" step="1" value="11"></input> <label for="row0">行目まで</label> <input id="mod0" type="number" min="1" step="1" value="3"></input> <label for="mod0">(剰余類)</label> <script src="pascal.js"></script>
JavaScript
{
'use strict';
let div_output = document.querySelector('#output0'),
input_row = document.querySelector('#row0'),
input_mod = document.querySelector('#mod0'),
inputs = [input_row, input_mod];
let itoa = (start, end) => {
let res = [];
for (let i = start; i <= end; i += 1) {
res.push(i);
}
return res;
};
let fact = (n) => {
let res = 1;
for (let i = n; i > 0; i -= 1) {
res *= i;
}
return res;
};
let bc = (n, r) => {
return fact(n) / (fact(r) * fact(n - r));
};
let row = (n) => {
return itoa(0, n).map((x) => bc(n, x));
};
let pascal = (n) => {
return itoa(0, n).map(row);
};
let rowMod = (n, m) => {
return row(n).map((x) => Math.round(x) % Math.round(m));
};
let pasMod = (n, m) => {
return itoa(0, n).map((x) => rowMod(x, m));
};
let output = () => {
let n = parseInt(input_row.value, 10) - 1,
m = parseInt(input_mod.value, 10);
div_output.innerHTML = '';
pasMod(n, m).forEach((x) => {
div_output.innerHTML += `${x.join(' ')}<br>`;
});
};
inputs.forEach((input) => input.onchange = output);
output();
}
0 コメント:
コメントを投稿