Home

Awesome

BubbleSort言語

バブルソートに着想を得て作りました。いうまでもなくEsolangです。

処理

BrainF*ckをベースにしているので、それといった文法はありません。この言語においては、左右に伸びる仮想的なメモリと、そのメモリへのポインタ2つ(ポインタA,B)を扱うことが出来ます。 改行で区切られた正の整数の数列をソースコードとして用いることが出来ます。ソースコードを読み込ませて実行すると、数列をバブルソートに従って昇順になるようにソートしていきます。この際、入れ替えが発生すると、入れ替えの処理に続いて以下の処理が行われます。

入れ替えた二つの値の合計を50で割った余りにについて、
- 0のとき:ポインタAをインクリメントする
- 1のとき:ポインタBをインクリメントする
- 2のとき:ポインタAをデクリメントする
- 3のとき:ポインタBをデクリメントする
- 4のとき:ポインタAのさすメモリの値をインクリメントする
- 5のとき:ポインタBのさすメモリの値をインクリメントする
- 6のとき:ポインタAのさすメモリの値をデクリメントする
- 7のとき:ポインタBのさすメモリの値をデクリメントする
- 8のとき:ポインタAのさすメモリの値を出力する
- 9のとき:ポインタBのさすメモリの値を出力する
- 10のとき:入力から1バイト読んでポインタAのさすメモリに代入する
- 11のとき:入力から1バイト読んでポインタBのさすメモリに代入する
- 12のとき:入れ替えた二つの数のうち小さいほうの数が数列のn番目とするとき、(ポインタAのさす値 + n)番目の数にポインタBのさす値を足す
- 13のとき:入れ替えた二つの数のうち小さいほうの数が数列のn番目とするとき、(ポインタAのさす値 + n)番目の数にポインタBのさす値を引く
- 14のとき:ポインタAのさすメモリの値が0なら、ポインタBをインクリメントする
- 15のとき:ポインタAのさすメモリの値が0なら、ポインタBをデクリメントする
- 上記以外:何もしない

実行方法

ソースコードを実行ファイルと同じフォルダに置き、引数にソースコードのファイル名を与えてることで実行できます。 引数を指定しなかった場合は、直接ソースコードを書いて実行することもできます。

また、引数にソースコードを指定している場合に、-debugオプションを付けることによって、デバッグモードで実行することができます。 このモードでは、命令が実行されるごとにその詳細が表示されるようになります。

サンプルコード

サンプルコードとして、hello_world.bslとcat.bslを用意しました。プログラミングする際の参考にしてください。

おまけ:チューリング完全性

BrainF*ckからBubbleSortLanguageに変換するコンバータを作成しました。BFtoBSL内にあるBFtoBSL.exeに引数としてBrainF*ckのソースコードを読み込ませると、BubbleSortLanguageで実行可能なソースコードを生成します。ただし、生成するソースコードはかなり冗長なので、動作に時間がかかります。

このように、BrainF*ckで実行できるものはBubbleSortLanguageで実行できると分かったので、BubbleSortLanguageは間違いなくプログラミング言語ですね。