ひろゆき語録で「頭の悪い人が使うプログラミング言語」を作ってみました

![サムネイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986059/9a74279e-6ffd-481c-9037-7ab5b064f947.png)
# 概要
ひろゆき語録で「頭の悪い人が使うプログラミング言語」を作ってみました。
ベースにしたプログラミング言語はBrainfuckです。
名前の由来はBrainfuckと西村ひろゆき氏の口癖です。
実用性は全くありません。
ジョークとして作った難解プログラミング言語です。
確認してませんがチューリング完全です。多分。

# プログラムの書き方

Brainfuckの8命令を以下の表のひろゆき語録に置き換えただけです。
ひろゆき語録と処理内容の関連に深い意味はありません。適当です。正確にはあいうえお順です。
仕様はBrainfuckのもとにしてるので、そちらを参考にしてください。ここで説明する気は全くないです。
語録になって長くなった分だけ本家Brainfuckより、かなり面倒くさい実装になります。
その名の通り頭の悪いプログラムです。

| ひろゆき語録 | 処理内容 |
|:-|:-|
|うそはうそであると見抜ける人でないと（掲示板を使うのは）難しい|ポインタをインクリメント |
|うんこでも食っとけばいいじゃないすか|ポインタをデクリメント|
|それって、あなたの感想ですよね？|ポインタの値をインクリメント|
|なんかそういうデータあるんですか？|ポインタの値をデクリメント|
|なんだろう、ウソつくのやめてもらっていいですか？|コンソールにポインタの値を出力|
|不快感を覚えた自分に驚いたんだよね|コンソールから入力した値をポインタに代入|
|彼女というか嫁というか奥さんというか細君というか妻|ポインタの値が0の場合、次の語録の「死んだ魚の目をした太ったおっさん」まで進む|
|死んだ魚の目をした太ったおっさん|ポインタの値が0でない場合、前の語録の「彼女というか嫁というか奥さんというか細君というか妻」まで戻る|

```:「ABC」を出力
それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しい)それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？
```

```:「Hello World!」を出力
それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？彼女というか嫁というか奥さんというか細君というか妻うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？うんこでも食っとけばいいじゃないすかうんこでも食っとけばいいじゃないすかうんこでも食っとけばいいじゃないすかうんこでも食っとけばいいじゃないすかなんかそういうデータあるんですか？死んだ魚の目をした太ったおっさんうそはうそであると見抜ける人でないと（掲示板を使うのは）難しいなんだろう、ウソつくのやめてもらっていいですか？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？なんだろう、ウソつくのやめてもらっていいですか？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？うんこでも食っとけばいいじゃないすかうんこでも食っとけばいいじゃないすかそれって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいなんだろう、ウソつくのやめてもらっていいですか？それって、あなたの感想ですよね？それって、あなたの感想ですよね？それって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんだろう、ウソつくのやめてもらっていいですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんかそういうデータあるんですか？なんだろう、ウソつくのやめてもらっていいですか？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？うそはうそであると見抜ける人でないと（掲示板を使うのは）難しいそれって、あなたの感想ですよね？なんだろう、ウソつくのやめてもらっていいですか？
```

語録にない文字列は無視されます。
改行を入れたり、コメント入れたりして整理できます。
これを使って違和感ない文章も作れるかも？

```:他の文字列は無視
うんこでも食っとけばいいじゃないすか
カレーでも食っとけばいいじゃないすか　←これは無視される
彼女というか嫁というか奥さんというか細君というか妻
彼女というか嫁というか奥さんというか細君というか削ジェンヌ　←これも無視される
```

# 実行方法
コマンドライン引数に実行するプログラムのファイルを指定して下さい。
文字コードはutf-8になります。

```
atamawarui.exe hiroyuki.txt⏎
Hello World!
```

# 「頭の悪い人が使うプログラミング言語」のソース
C# 10での実装になります。適当にビルドして使って下さい。
エントリMainなしのソースです。
Brainfuckで1文字で判定していたところが、ひろゆき語録になったので文字列の判定になってます。
面倒な文字列比較は正規表現でやってます。
エラーチェックとかしてません。バグがあっても知りません( ﾟσωﾟ) 
自己責任でお願いします。おじさんは無責任です。
「こんなのひろゆきの語録じゃねぇ！」と思う方はどうぞご勝手に修正して下さい。

```C#:atamawarui.cs
using System.Text.RegularExpressions;

var pointer = 0;
var variable = new int[2048];

MatchCollection matches = new Regex(
    "(?<uso>うそはうそであると見抜ける人でないと（掲示板を使うのは）難しい)|" +
    "(?<unko>うんこでも食っとけばいいじゃないすか)|" +
    "(?<sore>それって、あなたの感想ですよね？)|" +
    "(?<nanka>なんかそういうデータあるんですか？)|" +
    "(?<nandaro>なんだろう、ウソつくのやめてもらっていいですか？)|" +
    "(?<hukai>不快感を覚えた自分に驚いたんだよね)|" +
    "(?<kanojo>彼女というか嫁というか奥さんというか細君というか妻)|" +
    "(?<shinda>死んだ魚の目をした太ったおっさん)",
    RegexOptions.Compiled).Matches(File.ReadAllText(args[0]));

for (var i = 0; i < matches.Count; i++)
{
    if (!string.IsNullOrEmpty(matches[i].Groups["uso"].Value))
    {
        pointer++;
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["unko"].Value))
    {
        pointer--;
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["sore"].Value))
    {
        variable[pointer]++;
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["nanka"].Value))
    {
        variable[pointer]--;
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["nandaro"].Value))
    {
        Console.Write((char)variable[pointer]);
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["hukai"].Value))
    {
        variable[pointer] = Console.Read();
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["kanojo"].Value))
    {
        if (variable[pointer] == 0)
        {
            var stack = 1;
            while (stack > 0)
            {
                i++;
                if (!string.IsNullOrEmpty(matches[i].Groups["kanojo"].Value)) stack++;
                if (!string.IsNullOrEmpty(matches[i].Groups["shinda"].Value)) stack--;
            }
        }
    }
    else if (!string.IsNullOrEmpty(matches[i].Groups["shinda"].Value))
    {
        if (variable[pointer] != 0)
        {
            var stack = 1;
            while (stack > 0)
            {
                i--;
                if (!string.IsNullOrEmpty(matches[i].Groups["shinda"].Value)) stack++;
                if (!string.IsNullOrEmpty(matches[i].Groups["kanojo"].Value)) stack--;
            }
        }
    }
}
```