2016年10月16日日曜日

開発環境

素数夜曲 (吉田 武 (著)、東海大学出版会)の付録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 コメント:

コメントを投稿