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?

Qiita全国学生対抗戦Advent Calendar 2024

Day 23

BrainF*ckを叫ばせる話 C++編

Last updated at Posted at 2024-11-25

どうもAtsu1209です。
今回は前回記事の「叫び声でプログラミングできるようにした」
に出てくるAaaLangBrainF*ckのお話です。

前回記事↓

変換したい

BrainF*ckをAaaLangに変換できるようにします。
本来はJSで変換サイトを作っても良かったんですがいちいちHTMLファイルを開くのが
面倒くさいのでC++でやります。

AaaLang

BrainF*ckの対応表を貼っておく

Brainfuck AAA
> AAA
< AAa
+ AaA
- Aaa
. aAA
, aAa
[ aaA
] aaa

C++コード

change.cpp
#include <bits/stdc++.h>
using namespace std;

// Brainfuckコードを変換し、空白を取り除く
string convertCode(const string& input) {
    string converted;
    unordered_map<char, string> conversionMap = {
        {'>', "AAA"},
        {'<', "AAa"},
        {'+', "AaA"},
        {'-', "Aaa"},
        {'.', "aAA"},
        {',', "aAa"},
        {'[', "aaA"},
        {']', "aaa"}
    };

    for (char ch : input) {
        if (isspace(ch)) continue; // 空白を無視
        if (conversionMap.find(ch) != conversionMap.end()) {
            converted += conversionMap[ch];
        } else {
            converted += ch;
        }
    }

    return converted;
}

int main() {
        // ファイルの読み込み
        ifstream inputFile("main.bf");
        if (!inputFile) {
            cerr << "main.bfファイルを開くことができませんでした。" << endl;
            return 1;
        }

        stringstream buffer;
        buffer << inputFile.rdbuf();
        string inputCode = buffer.str();
        inputFile.close();

        // コードの変換
        string outputCode = convertCode(inputCode);

        // 変換後のコードをcode.aaaaに出力
        ofstream outputFile("code.aaaa");
        if (!outputFile) {
            cerr << "code.aaaaファイルを開くことができませんでした。" << endl;
            return 1;
        }

        outputFile << outputCode;
        outputFile.close();
        cerr << "Success!" << endl;
    
    return 0;
}

BrainF*ckのmain.bfAaaLangのコードの参照先code.aaaaに変換・出力を
行うようにしました。

文字をBrainF*ck変換するサイトやbfコードを改行してわかりやすく書いたときに
変換したAaaLangがなんか動かないので空白を無視するコードを追加しています。

コンパイル
g++ -o change.exe change.cpp

実際に変換する

今回変換したワード
5000TYO! "5000兆円 欲しい!"風です。

main.bf
++++++[>+++++++++<-]>-.
>++++++[>++++++++<-]>.
>++++++[>++++++++<-]>.
>++++++[>++++++++<-]>.
>+++++++++[>+++++++++<-]>+++.
>+++++++++[>+++++++++<-]>++++++++.
>++++++++[>+++++++++<-]>+++++++.
>+++[>+++++++++++<-]>.
変換
./change.exe
変換結果
AaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaaaAAAAAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAAAAAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAAAAAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaAAaAAaAaAAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaAAaAAaAAaAAaAAaAAaAAaAaAAAAAAaAAaAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaAAaAAaAAaAAaAAaAAaAaAAAAAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAA
実行
./aaa.exe
実行結果
5000TYO!

最後に

今度JSでも変換ツール作ります。

0
0
1

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?