はじめに
おめシスはいいぞ。
ということで、Brainf*ck派生言語、「Ω」です。
C++で実装しました。
説明
Ωは、Brainf*ckの8つの命令をそれぞれおめシスの台詞に置き換えただけのものです。
+ -> "おめシスはいいぞ。"
- -> "おめがってるー!?"
> -> "う、うん"
< -> "わかるぅ〜"
. -> "って言わないで"
, -> "うんちゃん"
[ -> "えーんえーん"
] -> "おめ合体"
実装
Omega.cpp
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>
int main(int argc, char* argv[]) {
using Byte = unsigned char;
Byte buf[30000] = {};
Byte* ptr = buf;
std::string s;
int count = 0;
bool flag = false;
if(argc == 1) {
std::cout << "Please specify an OMGS file." << std::endl;
return 1;
}
std::string file = argv[1];
int i = file.rfind(".", file.size());
if(file.find("omgs", i) != (i + 1)) {
std::cout << "Please specfy an OMGS file." << std::endl;
return 1;
}
std::ifstream ifs(file);
while(getline(ifs, s)){
for(i = 0; i != s.size();) {
if(s.find("う、うん", i) == i) {
++ptr;
i += 12;
if(flag) count += 12;
}
else if(s.find("わかるぅ〜", i) == i) {
--ptr;
i += 15;
if(flag) count += 15;
}
else if(s.find("おめシスはいいぞ。", i) == i) {
++*ptr;
i += 27;
if(flag) count += 27;
}
else if(s.find("おめがってるー!?", i) == i) {
--*ptr;
i += 27;
if(flag) count += 27;
}
else if(s.find("って言わないで", i) == i) {
putchar(*ptr);
i += 21;
if(flag) count += 21;
}
else if(s.find("うんちゃん", i) == i) {
*ptr = getchar();
i += 9;
if(flag) count += 9;
}
else if(s.find("えーんえーん", i) == i) {
i += 18;
if(*ptr == 0) {
while(s.find("おめ合体", i) != i)
i += 3;
}
else {
flag = true;
count += 18;
}
}
else if(s.find("おめ合体", i) == i) {
if(*ptr != 0) i -= count;
else {
flag = false;
i += 12;
}
count = 0;
}
else i += 3;
}
}
return 0;
}
Ωのソースコード例
"Omega sisters"と出力するコードです。omgsという拡張子を使います。
Omega_sisters.omgs
おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。わかるぅ〜わかるぅ〜おめがってるー!?おめ合体う、うんう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでおめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?って言わないでおめシスはいいぞ。おめシスはいいぞ。って言わないでおめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?って言わないでわかるぅ〜って言わないでう、うんう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでおめシスはいいぞ。って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。って言わないでおめシスはいいぞ。って言わないで
実行
以下のようにcppファイルをコンパイルし、Omegaという実行ファイルを作成。
$ g++ Omega Omega.cpp
そしたら、次のように実行。
$ ./Omega Omega_sisters.omgs
そうすると、以下のように出力されます。
Omega sisters
まとめ
この台詞入れて!とか、ここはこうしたらいいんじゃない?などというご意見がありましたら是非コメントをください。