プログラミングBlog

勉強会㉕

Hands-on and Lightning Talks

開催日時 2021年6月12日(土) 7:00-9:00
今週は非同期、同期のお勉強と後半はPaizaのアルゴリズム問題を解きました。

本日の内容

JavaScriptの非同期、同期の例外処理

非同期、同期の例外処理
やったことはtrycatchとコールバック関数でのエラーハンドリングを行い、非同期と同期で動きの変化をみながら、後半はpromiseを少し書いてみる。
ファイル読み込みを想定して、成功時と失敗時にどんな動きをするかを確かめながら行いました。
狙いとしては、現場でのjavascriptのESによって書き方が変わってくる(まだまだIEが現役)なためいきなりpromiseから入るのではなく基礎から学ぶ。
そうすることで、どんな書き方にでも対応できるようにする。
実際にコールバック地獄を体験したり、少しですがpromiseも書いてみました。
非同期処理はメールやチャットなどのリアルタイム処理に使われるそうなので、開発してみたいですね!

paizaのアルゴリズム問題

文字列の長さ
簡単なので、lengthなどの長さを返却するようなプロパティは使用しない縛りでやってみました。

JavaScript

文字列を文字の配列に変換。
文字配列の数だけ繰り返しcountUpを呼び出す。
クロージャを利用することで内部に定義したcountがインクリメントされます。
最後に文字の数だけ呼び出されたcountを表示させる。

execute01();

// 文字の数
// length,countは使ってはいけない縛り。
function execute01() {
    // 標準入力
    process.stdin.resume();
    process.stdin.setEncoding('utf8');

    var lines = [];
    var reader = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout
    });

    reader.on('line', (line) => {
        lines.push(line);
    });

    reader.on('close', () => {
        console.log(strLength(lines[0]));
    });
}

// 文字列の長さを調べる
function strLength(str) {
    str.split('').forEach(value => countUp());
    var count1 = countUp()
    return count1;
}

// 呼び出されるとインクリメント
function counter() {
    var count = 0;
    return function () {
        return count++;
    }
}

// クロージャ
var countUp = counter();

Python

文字列を文字の配列に変換する。
文字配列の最後の要素(文字の末尾)を取得した後に文字の末尾で文字の検索を行う。
値のインデックス番号 + 1が長さとなる。

input_line = input()
array = list(input_line)
print(input_line.rfind(array[-1]) + 1)

paizaの注意事項

レベルアップ問題集

なお、このコーナー内の問題については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。 授業や研修にもご利用いただけますので、ぜひ教材などにもお使いください。

コーディングスキルチェック受験での禁止行為