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); }); });