どうもAtsu1209です。
今回は前回記事の「叫び声でプログラミングできるようにした」
に出てくるAaaLang
とBrainF*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.bf
をAaaLang
のコードの参照先code.aaaa
に変換・出力を
行うようにしました。
文字をBrainF*ck変換するサイトやbfコード
を改行してわかりやすく書いたときに
変換したAaaLang
がなんか動かないので空白を無視するコードを追加しています。
コンパイル
g++ -o change.exe change.cpp
実際に変換する
今回変換したワード
5000TYO!
"5000兆円 欲しい!"風です。
main.bf
++++++[>+++++++++<-]>-.
>++++++[>++++++++<-]>.
>++++++[>++++++++<-]>.
>++++++[>++++++++<-]>.
>+++++++++[>+++++++++<-]>+++.
>+++++++++[>+++++++++<-]>++++++++.
>++++++++[>+++++++++<-]>+++++++.
>+++[>+++++++++++<-]>.
変換
./change.exe
変換結果
AaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaaaAAAAAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAAAAAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAAAAAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaAAaAAaAaAAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaAAaAAaAAaAAaAAaAAaAAaAaAAAAAAaAAaAAaAAaAAaAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAAaAAaAAaAAaAAaAAaAAaAaAAAAAAaAAaAAaAaaAAAAAaAAaAAaAAaAAaAAaAAaAAaAAaAAaAAaAAAaAaaaaaAAAaAA
実行
./aaa.exe
実行結果
5000TYO!
最後に
今度JS
でも変換ツール作ります。