nodejs で百本ノックを受けてみる 第1章

たまたま 見かけた 言語処理100本ノック2015。せっかくなので 勉強中のnodejsで試してみる

環境は Win[7|10] Pro x64 と node.js の 8.x系

コードがクズなのは、JSも勉強中だから ということで

まずは第1章: 準備運動から

00. 文字列の逆順

文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

Array.reverse() はあるけど String.reverse() はなさげなので 思いついたのは

let str = 'stressed';
for (let i = 0 ; i < str.length; i++) {
    console.log(str[str.length -1 - i]);
}

なんだけど他のことで検索かけてたら、以下を見つけたんだけど、見た瞬間 声が出ちゃった(笑

console.log(str.split('').reverse().join(''));

文字列はそのまま配列として扱えるけど、reverseが効かない位には違うのね?

01. 「パタトクカシーー」

「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.

let str1 = 'パタトクカシーー';
console.log(str1[0]);
console.log(str1[2]);
console.log(str1[4]);
console.log(str1[6]);

まぁ、まとめて出力すれば良いのだが


03. 円周率

"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

,と.は抜くんだよね?

let str3 = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.';
let str4 = str3.replace( /\,|\./g, '' );
let str5 = str4.split(' ');
for (let i = 0 ; i < str5.length; i++) {
    console.log(str5[i] + ' ' + str5[i].length);
}

08. 暗号文

与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ.

・英小文字ならば(219 - 文字コード)の文字に置換

・その他の文字はそのまま出力

この関数を用い,英語のメッセージを暗号化・復号化せよ.

let str = 'Magical girl lyrical Nanoha StrikerS';
function cipher(str0) {
    let str1 = '';
    for (let i = 0 ; i < str0.length; i++) {
        if (str0[i] >= 'A' && str0[i] <= 'Z') {
           str1 = str1 + str[i];
        } else {
            str1 = str1 +  String.fromCharCode(219 - str0[i].charCodeAt(0));
       }
    }
    return  str1;
}
let str2 = cipher(str);
let str3 = cipher(str2);
console.log(str2);
console.log(str3);

Promise版 これで良いのか??

function cipherPromise(str0) {
    return new Promise(function(resolv) {
        let str1 = '';
        for (let i = 0 ; i < str0.length; i++) {
            if (str0[i] >= 'A' && str0[i] <= 'Z') {
               str1 = str1 + str[i];
            } else {
                str1 = str1 +  String.fromCharCode(219 - str0[i].charCodeAt(0));
           }
        }
        resolv( str1);
    });
}

cipherPromise(str).then(function(value) {
    let str4 = value;
    cipherPromise(str4).then(function(value) {
        let str5 = value;
        console.log(str4);
        console.log(str5);
    });
});