2017年4月10日月曜日

開発環境

The Art of Computer Programming Volume 1 Fundamental Algorithms Third Edition 日本語版(Donald E. Knuth (著)、青木 孝 (著)、筧 一彦 (著)、鈴木 健一 (著)、長尾 高弘 (著)、有澤 誠 (その他)、和田 英一 (その他)、ドワンゴ)の第1章(基礎概念)、1.1(アルゴリズム)、演習問題3、4を取り組んでみる。

コード(Emacs)

HTML5

m = <input id="m0" type="number" min="1" step="1" value="2166">
n = <input id="n0" type="number" min="1" step="1" value="6099">
times = <input id="times0" type="number" min="1" step="1" value="1000000">
<br>
<button id="run0">run</button>
<button id="clear0">clear</button>
<pre id="output0"></pre>

<script src="sample3.js"></script>

JavaScript

let input0 = document.querySelector('#m0'),
    input1 = document.querySelector('#n0'),
    input2 = document.querySelector('#times0'),
    btn0 = document.querySelector('#run0'),
    btn1 = document.querySelector('#clear0'),
    pre0 = document.querySelector('#output0'),
    time = (fn) => {    
        return (n, ...args) => {
            let start = new Date();
            let result;
            for (let i = 0; i < n; i += 1) {
                result = fn(...args);
            }
            let end = new Date();
            pre0.textContent += `${result}\n${end.getTime() - start.getTime()} msec\n`;
        };
    };

let e = (m, n) => {
    let iter = (m, n) => {
        // e1.
        let r = m % n;

        // e2.
        if (r === 0) {
            return n;
        }
        // e3.
        m = n;
        n = r;
        return iter(m, n);
    };
    // e0.
    if (m < n) {
        return iter(n, m);
    }
    return iter(m, n);
};
let f = (m, n) => {
    // f1.
    m = m % n;
    // f2.
    if (m === 0) {
        return n;
    }
    // f3.
    n = n % m;
    // f4.
    if (n === 0) {
        return m;
    }
    return f(m, n);
};
let output = () => {
    let m = parseInt(input0.value, 10),
        n = parseInt(input1.value, 10),
        t = parseInt(input2.value, 10);
    
    let e0 = time(e),
        f0 = time(f);

    pre0.textContent += 'e\n';
    e0(t, m, n);
    pre0.textContent += 'f\n';
    f0(t, m, n);
};
    

btn0.onclick = output;
btn1.onclick = () => {
    pre0.textContent = '';
};

output();
m = n = times =













						

0 コメント:

コメントを投稿