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