Eyes, JAPAN Blog > brainfuck系の言語を触ってみた

brainfuck系の言語を触ってみた

mizuno

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

こんにちは。 アルバイトの水野です。
今の季節のあいづちほーは雪が積もっていて寒いです。

今回は難解プログラム言語の一種であるbrainfuck系言語”kemono”を使ってみました。

brainfuckとは

8つほどの命令で構成されている言語です。
例として今回はkemonoを使ってみます。

たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!すっごーい!なにこれなにこれ!

kemonoは上記のようにとても優しい雰囲気の言語です。
これを実行すると”E”が出力されます。

これをc言語に書き直すとこんな感じです。

#include <stdio.h>

int main()
{
    char buf[30000] = {0};
    char *ptr = buf;

    ptr++;      /*たのしー!*/
    (*ptr)++;    /*たーのしー!*/
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;
    (*ptr)++;

    while(*ptr){  /*うわー!*/
        ptr--;    /*すごーい!*/
        (*ptr)++;
        (*ptr)++;
        (*ptr)++;
        (*ptr)++;
        (*ptr)++;
        (*ptr)++;
        (*ptr)++;
        ptr++;
        (*ptr)--;  /*すっごーい!*/
    }         /*わーい!*/
    ptr--;
    (*ptr)--;
    putchar(*ptr); /*なにこれなにこれ!*/

    return 0;
}

kemonoを使ってみました

“Eyes, JAPAN”と表記してみました。

たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!なにこれなにこれ!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!うわー!すっごーい!わーい!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!なにこれなにこれ!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!なにこれなにこれ!うわー!すっごーい!わーい!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!うわー!すっごーい!わーい!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!すっごーい!すっごーい!すっごーい!すっごーい!すっごーい!すっごーい!すっごーい!すっごーい!すっごーい!なにこれなにこれ!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!すっごーい!すっごーい!すっごーい!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!なにこれなにこれ!

非常にコードが長いのでまとめています。

実行結果は
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2017-02-14-15-44-49

感想

brainfuckは命令の数が少なく単純に見えますが、かなり奥が深そうです。可読性は低いですがちゃんと動くという点で驚きました。
頑張ればもっとコードが短くなりそうです。
今回自分は文字を表示することしかできなかったので他のものは作っていません。分岐や再帰などもできるみたいなので、時間があるときに挑戦してみようと思います。

間違いなどがあれば指摘をお願いします。

Comments are closed.