0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

原神のドラゴンスパインにいる遺跡守衛の暗号を解読するスクリプトを書いた

Last updated at Posted at 2022-10-29

※注意!原神の一部ネタバレを含みます。

やったこと

  • 攻略wikiの暗号解読方法をそのままTypeScriptで実装

スクリプト

import * as fs from 'fs';

// ファイル読み込み
const cipherText = readFile('cipherText.txt');
const lineArray = cipherText.split('\r\n');
for (const line of lineArray) {
    // 暗号文を3進数に変換
    const ternaryText = mapToTernary(line);
    const ternaryArray = ternaryText.split(' ');

    // 3進数を10進数に変換
    let numberArray: number[] = [];
    for (const ternary of ternaryArray) {
        if (parseInt(ternary, 3)) {
            numberArray.push(parseInt(ternary, 3));
        }
    }

    // 10進数を、13文字ずらしたアルファベットに変換
    let alphabets: string = '';
    for (const number of numberArray) {
        if (96 + number + 13 <= 96 + 26) {
            alphabets += String.fromCharCode(96 + number + 13);
        } else {
            alphabets += String.fromCharCode(96 + (96 + number + 13) % (96 + 26));
        }
    }
    console.log(alphabets);
}

/**
* ファイルを読み込む
* @param inputFile 読み込むファイルのパス
* @return 読み込まれたファイル内のテキスト
*/
function readFile(inputFile: string) {
    return fs.readFileSync(inputFile, 'utf8');
}

/**
* 暗号文を3進数に変換する
* @param cipherText 暗号文
* @return 変換後の3進数の配列
*/
function mapToTernary(cipherText: string): string {
    const map = new Map<string, string>([
        [".", "0"],
        ["-", " "],
        ["2", "1"],
        ["3", "2"],
    ]);
    let ternaryText: string = '';
    // 暗号文を1文字ずつ取り出し、mapに従って変換
    for (var i = 0; i < cipherText.length; i++) {
        if (map.get(cipherText.charAt(i))) {
            ternaryText += map.get(cipherText.charAt(i));
        } else {
            // mapにない文字は変換しない
            ternaryText += cipherText.charAt(i);
        }
    }

    return ternaryText;
}

使い方

  1. cipherText.txtに暗号文を書いて、スクリプトと同じディレクトリに置く
    3.2-..3-.23-.32-32.-3..-
    ..2-223-.32-322-..3-..2-
    
  2. スクリプトを実行すると解読結果が表示される
    forthe
    nation
    

なんでやったの

  • 仕事でTypeScript使うことになったので軽く予習するため
  • スメールにいる遺跡守衛の暗号解読結果がwikiに未記載で、同じやり方で解読できそうと思ったけど手でやるのが面倒なため
    ↑普通に別のwikiにあって草。しかも解読方法全然違う
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?