【JavaScript】既知のアルゴリズムからメッセージを復号して元の文字列を求める方法
問題概要
JavaScriptの関数を作成し、処理済みのメッセージを受け取って、その元となるソースメッセージを返すことを目標とします。
ここで手がかりとして分かっているのは、メッセージの変換に使われたアルゴリズムだけです。そのアルゴリズムは次の通りです −
- メッセージ文字列を逆順に並べ替える。
- すべての英字を、シングルクォートで囲んだASCIIコードに置き換える(Aは '65'、hは '104' など)。
- 数字とスペースはそのまま挿入する。
サンプルコード
以下が実際のコードです −
const str = '12 hello world 30';
const decryptString = (str = '') => {
const alpha = 'abcdefghijklmnopqrstuvwxyz';
let res = '';
for(let i = str.length - 1; i >= 0; i--){
const el = str[i];
if(alpha.includes(el.toLowerCase())){
res += `'${el.charCodeAt(0)}'`;
}else{
res += el;
};
};
return res;
};
console.log(decryptString(str));
出力結果
コンソールへの出力は以下の通りです −
03 '100''108''114''111''119' '111''108''108''101''104' 21
コードの解説
この関数では、文字列の末尾から先頭に向かって1文字ずつループ処理を行っています。各文字に対して、alpha.includes() を使い英字(a〜z、大文字小文字を問わない)かどうかを判定します。
英字の場合は、charCodeAt(0) で取得したASCIIコードをシングルクォートで囲んで結果の文字列に追加します。一方、数字やスペースなど英字以外の文字は、そのまま結果に追加されます。
この一連の処理により、元の文字列は「反転 + ASCIIコード化」というルールに従って変換され、最終的な文字列としてコンソールに出力されます。アルゴリズムが既知であれば、この変換規則を逆にたどることで、元のメッセージを復元することも可能です。
-
JavaScriptのsourceプロパティとは?正規表現パターンテキストを取得する方法を解説
JavaScriptのsourceプロパティは、RegExp(正規表現)オブジェクトに設定されたパターン文字列そのものを返すプロパティです。g(グローバルマッチ)やi(大文字・小文字を区別しない)などのフラグは結果に含まれず、マッチング対象となる純粋な正規表現テキストのみを取得できます。 動的に正規表現を組み立てたい場合や、デバッグ時に実際に適用されているパターンを確認したい場合などに活用できる便利なプロパティです。 基本構文 const regex = /pattern/flags; console.log(regex.source); // パターン文字列のみが返される サンプルコード
-
JavaScriptでindex.htmlページから非同期コードを呼び出す方法
HTMLページの読み込み時に非同期処理を実行したい場合は、<body>タグのonLoad属性と組み合わせて、asyncとawaitを使用します。これにより、ページとそのリソースが完全に読み込まれたタイミングで、非同期関数を安全に呼び出すことができます。 以下に、実際に動作するサンプルコードを示します。 サンプルコード index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name=&q