ピンティア問題の解決策——7-16 シーザー暗号

7-16 シーザー暗号

原題:

情報が他人に簡単に盗まれないようにするためには、メッセージの平文を暗号化して暗号文に変換する必要があります。復帰文字で終わる文字列 (80 文字未満) を入力し、整数のオフセットを入力して、シーザー暗号で暗号化して出力します。シーザー暗号は、単純な置換暗号化テクノロジです。平文のすべての文字は、アルファベットのオフセット ビットによってオフセットされた後、暗号文に置き換えられます。オフセットがゼロより大きい場合は、後方オフセットを意味し、オフセットがゼロより小さい場合は、後方オフセットを意味しますのときは前方にシフトすることを意味します。

入力形式:

入力の最初の行には、復帰で終了する空ではない文字列 (80 文字未満) が入力され、2 行目には整数のオフセットが入力されます。

出力フォーマット:

暗号化された結果文字列を出力します。

問題解決のアイデア:

  1. モジュールをインポートしreadlineてインターフェイス オブジェクトを作成します。まずreadlineモジュールを導入し、createInterfaceメソッドを使用してインターフェイス オブジェクトを作成しますrlこのオブジェクトは、入力ストリームを標準入力に設定します。
  2. 入力を読み取り、保存する:'line'イベントをリッスンすることにより、入力は配列に保存されますbuf
  3. 入力を解析します。buf配列の最初の要素を変数に割り当てstrbuf配列の 2 番目の要素を整数として解析して、変数に割り当てますoffset
  4. シーザー暗号暗号化を実行する: スプレッド演算子を使用してstr文字列を文字配列に変換し、各文字に対してマッピング変換を実行します。各文字について、まず ASCII コードを取得し、それが大文字 (65 ≤ コード ≤ 90) であるか小文字 (97 ≤ コード ≤ 122) であるかを判断します。大文字の場合、offsetCaesar 暗号アルゴリズムに従って文字の ASCII コードに文字オフセットが適用され、結果が文字に変換されます。小文字の場合は、文字オフセットも適用されてoffset文字に変換されます。それ以外の場合は、文字を変更しないでください。メソッドを使用して、マップされた文字配列をjoin文字列に連結し、それを変数に割り当てますres
  5. 暗号化結果の出力: 暗号化された文字列を出力しますres

JavaScript (ノード) コード:

const r = require("readline");
const rl = r.createInterface({
    
    
    input: process.stdin
});
let buf = [];
rl.on('line', (input) => buf.push(input));
rl.on('close', () => {
    
    
    let str = buf[0];
    let offset = parseInt(buf[1], 10);

    let res =[...str].map(i => {
    
    
            let code = i.charCodeAt(0);
            if (65 <= code && code <= 90) {
    
    
                return String.fromCharCode(((code - 65 + offset) % 26 + 26) % 26 + 65);
            } else if (97 <= code && code <= 122) {
    
    
                return String.fromCharCode(((code - 97 + offset) % 26 + 26) % 26 + 97);
            } else {
    
    
                return i;
            }
        }).join("");

    console.log(res);
	//测试点3尽力了,求大神题解
});

複雑さの分析:

時間計算量: O(n)
空間の複雑さ: O(n)

おすすめ

転載: blog.csdn.net/Mredust/article/details/133519431