山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

[N予備校]【2019年度】プログラミング入門 Webアプリ その8

【2019年度】プログラミング入門 Webアプリ

今回から第3章です。

今までは、2018年度のものを進めていましたが、2019年度に変更しました。

2018年度版の3章4節でのあるページがなかったのが変更の理由です。

第3章 サーバーサイドプログラミング

準備

PowerShell で以下のコマンドを入力して、Vagrant を起動する。

cd $env:userprofile\vagrant\ubuntu64_16
vagrant up

01. Node.js

Node.js のバージョンを管理するための nodebrew をインストールします。

02. アルゴリズムの改善

time node app.js

を使って実行時間を調べます。

フィボナッチ数列を求めるアルゴリズムでメモ化再帰を行いました。

トリボナッチ数列のメモ化

'use strict';
const memo = new Map();
memo.set(0, 0);
memo.set(1, 0);
memo.set(2, 1);
function trib(n) {
    if (memo.has(n)) {
        return memo.get(n);
    }
    const value = trib(n - 1) + trib(n - 2) + trib(n - 3);
    memo.set(n, value);
    return value;
}
const length = 40;
for (let i = 0; i <= length; i++) {
    console.log(trib(i));
}

また、出来上がったファイルを GitHub に上げます。以下のコマンドで全てのファイルを push します。

git add .
git commit -m "コメント"
git push origin master

03. 集計処理を行うライブラリ

csv ファイルの人口統計情報を元に人口の変化率のランキングの作成をします。

'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.ReadStream('./popu-pref.csv');
const rl = readline.createInterface({ 'input': rs, 'output': {} });

const prefectureDataMap = new Map(); // key: 都道府県 value: 集計データのオブジェクト
rl.on('line', (line) => {
    const columns = line.split(',');
    const year = columns[0];
    const prefecture = columns[2];
    const popu = columns[7];
    if (year === '2010' || year === '2015') {
        let value = prefectureDataMap.get(prefecture);
        if (!value) {
            value = {
                popu10: 0,
                popu15: 0,
                change: null
            };
        }
        if (year === '2010') {
            value.popu10 += parseInt(popu);
        }
        if (year === '2015') {
            value.popu15 += parseInt(popu);
        }
        prefectureDataMap.set(prefecture, value);
    }
});
rl.on('close', () => {
    for (let [key, value] of prefectureDataMap) {
        value.change = value.popu15 / value.popu10;
    }
    // 昇順に並び替える
    const rankingArray = Array.from(prefectureDataMap).sort((pair1, pair2) => {
        return -(pair2[1].change - pair1[1].change);
    });
    const rankingStrings = rankingArray.map(([key, value], i) => {
        return (i + 1) + '位 ' + key + ': ' + value.popu10 + '=>' + value.popu15 + ' 変化率:' + value.change;
    });
    console.log(rankingStrings);
});

04. ライブラリ

Yarn をインストールしました。

既存のライブラリに自分の作った関数を登録しました。

05. Slack のボット開発

Slack に参加しました。

感想

もう少しペースを上げていきたいですね。