Home > Dots & Lines > 真鍋 大度

1. Hello, world!

May 27, 2009
Daito Manabe
Rhizoatiks取締役、4nchor5la6メンバーの真鍋大度による連載第1回目

まずはこちらを見て下さい。

一見空白の様に見えると思いますが、こちらには半角スペースとタブ、改行が書かれています。
(マウスで選択、もしくは空白文字を表示出来るエディタにコピーして頂けるとプログラムが一応確認出来るかと思います。)
確認出来たらStartからendまでコピーして下のボックスにコピーをして、
こちらのサイトで実行するか、
http://ehl.jp/whitespacer/
〔左側のテキストボックスへ貼り付け、[evaluate]をクリック〕
(javascript、2bit君作成)

アプリケーションをダウンロードして実行してみてください。
http://www.rhizomatiks.com/samples/whitespace/whitespace.zip
(java、Rhizomatiks中浜大輔 作成)

実行するとHello Worldと表示されたかと思います。実はこの上の空白は半角スペースとタブ、改行だけで書かれたwhitespaceというプログラミング言語で書かれたプログラムです。
(プログラミングという言葉が聞き慣れない方はこちらをどうぞ → )

さらにこちらを見て下さい。

同じくコピーして以下のサイトで実行してみて下さい。
http://lab.moyo.biz/garage/brainfuck/

同じくHello Worldと表示されたかと思います。 こちらはBrainfuckという8つの命令からなる非常にシンプルなプログラミング言語です。 ここでは突っ込んだ話はしませんが、こちらは難解プログラミング言語と呼ばれるもので、実用性はゼロに近いのですがハッカーの間で楽しまれています。
※Brainfuck、whitespaceについてもっと知りたい方はこちらをどうぞ ↓
Brainfuck ■Whiespace

こちらのページでは難解プログラミング言語のリストを見る事が出来ます。
http://www.esolangs.org/wiki/Main_Page

Hello Worldと表示するための
"+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+."
という、記号の羅列を格好良いと思えるかどうかは個人の趣向の問題ですが、一見デタラメに見えるのにそこには必然性があると言うところは、アルゴリズムやプロセスが非常に複雑だけれど見た目はほぼノイズ(デタラメ)になってしまっているグラフィックや、見栄えだけを重視したグラフィックよりも魅力的な部分もあるかと思います。 ジェネレート系の映像や音楽がProce55ingOpenFrameWorksMaxMSPの御陰で簡単に作れる様になって作品(らしきもの)が世の中に氾濫してしまったので、そろそろ新しいアプローチを探さなくてはならないわけですが、もしかするとこの辺にヒントがあるかもしれません。
(グラフィック的に格好良いと思われるHello Worldを幾つかピックアップしてみたので、難解プログラミング言語に疎い方は是非チェックしてみて下さい。 →Hello World)

ただし、幾つかの難解プログラミング言語は、視覚的に格好良くなる様にデザインされているため、同じコンセプトでやっても面白くないし、グラフィック的に本当に面白いものが出来るかどうかは疑問です。また、画面表示だけだと喜びを共有出来る人が数学科時代の友達や一部のギークのみになる可能性大です。(それはそれで大変光栄な事なのですが。)
そんなこんなで、自分で作るのは躊躇していましたが、これから石橋素氏と行う2つのプロジェクトでオリジナルプログラミング言語に近いものを開発することになりそうなのでそちらを紹介します。


Command Line Wave

まずは映像を観て下さい

Command line wave ver 2.(Daito Manabe + Motoi Ishibashi)


こちらはキューブの光のパターンを変化させる命令を、スピーカーから出力される音を使って行うというものです。音の命令はキューブに内蔵されたマイクで受信し、マイコン上で解析しています。こちらは2008年に石橋素氏と制作した作品です。

こちらのコマンド音を聴いて下さい。
CommandSound.aiff

0が4186hzのサイン波(低いピッ) 1が6271.92676hzのサイン波(高いピッ) というルールを作っており、この音を0 1で書くと 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 という並びになっています。

このコマンドの内容は

  1. 0 0 0 0 0 ヘッダ
  2. 0音量をどのようにして使うか (1の場合は音が鳴っていない時は真っ白で、音が鳴ると暗くなる)
  3. 0 0 光のパターン(音に反応、点滅、フワフワ光る等)
  4. 0 0 0 低音で反応する色
  5. 0 0 1 中音で反応する色
  6. 0 1 0 高音で反応する色
と6つのパートから成り立っており、この16個の0と1の並びでLEDの光り方をコントロールする音のコマンドを作っています。

こちらのサイトでコマンドを作る事が出来るので是非試しに作ってみて下さい。
(BOWの吉川君がMaxMSPで作ったものをFlashで作り直してくれました!)
http://b-o-w.jp/events/dtlive/archives/command_line_wave/

キューブが実際に手元にあれば、スピーカーから出る音をキューブに聴かせる事で光り方を指定したパターンに変化させることが出来ます。 この作品では通信プロトコルの設計(コマンドのパターン作成)を行う事が音楽を作るルールになればと考えてスタートしたものですが、次のアップデートではコマンドではなくプログラムを音で送る事が出来ればと考えています。以下はそのラフアイディアです。


(仮)Program Wave

BrainfuckやWhitespaceの様に限られた命令のセットでLEDのパターンを制御するためのプログラムを開発することが出来れば音に変換する事が出来るのではないかと思いついたわけですが、BrainfuckやWhitespaceの様な言語とは幾つかの点で異なります。
  • 最終的な出力は画面(標準出力)ではなくLED(RGBカラー)
  • プログラムは音に変換してスピーカーから送信 > キューブ上のマイクで受信してマイコン上のインタプリタで実行
  • グラフィックの見栄えではなく、音に変換した際の聞き栄えを重視
難解プログラミング言語とは少し違いますが、brainfu*kやwhitespaceから学ぶところは非常に多そうです。

ちなみに、プログラムを音に変換すると言うのも新しい事ではありません。
1980年代頃のパーソナルコンピューターでは、オーディオカセットテープを保存のメディアとして使っていたためプログラムやデータを音として聴く事が出来ます。テープだけではなく、PIOという雑誌ではソノシートと呼ばれるペラペラのレコードにゲームのプログラムを保存していました。
manabe01.jpg

ソノシートに刻まれた音はこんな感じです。
http://www.rhizomatiks.com/daito/pasokondj.mp3

変調を使って0、1を表しているので、Faxの音に非常に近いものがあるかと思います。ソノシートはノイズも乗りやすく、プログラムを読み込むのは至難の業だったと思います。
PIOの付録ソノシートをロードした貴重な資料を発見したのでリンクを書いておきます。感動ものです。
http://p6-kei.hp.infoseek.co.jp/151_Pio/PiO.html

『難解プログラミング言語風-音言語』はまだ思いついて2日しか経過していないので、今回はここまでにしておきますが、今後、石橋氏と実験・制作していく過程を紹介出来ればと思います。

こちらの音のコマンドはiPhoneでも使えそうです。
通常、iPhoneに接続されたLEDの色を制御しようと考えたら、シリアル通信で行うのが常套手段かと思います。しかし、今回の様にLEDの色のパターンを制御するための音のコマンドを作成して、LED側に音を解析する仕組みを作れば、iPhoneの音声出力を利用してLEDの色をコントロールする事も出来ます。音声でデータを送る場合、シリアル通信に比べるとbpsは低いですがオーディオケーブルを繋ぐだけでデバイスと通信出来てしまうと言うのは面白いところですね。

音の違った使い方を考えるのは以前のblogを参考にどうぞ。
http://www.daito.ws/weblog/2008/05/page/3

キューブの詳しい説明はこちら
http://www.daito.ws/works/commandlinewave.html

(仮)Pattern(工業用ミシンハックプロジェクト)

こちらも石橋氏とのプロジェクトで当初の目標はミシンをハックしてTシャツを作ると言うシンプルなところから始まっています。
(7月からBeamsのB-Galleryで行われる展示で発表予定!!)

現在使用を想定している工業用ミシンは以下の様なものです。

こちらは以下の様な仕組みで動いています。

  1. 専用アプリでjpg等の画像を読み込む
  2. 専用アプリ上で読み込んだ画像から自動的に刺繍のパターンを生成(実際は職人さんがこのパターンを手作業で良い感じに修正)
  3. 作成したパターンをミシンが読み込めるデータとして保存。
  4. ミシンにデータをコピーして、刺繍スタート

駒込にある刺繍工場にリサーチをしに行ったところ、希望の光である9ピンDSUBコネクタを発見したので、シリアルでリアルタイム制御出来ると予想していろいろと夢が膨らみました。
声やセンサーで制御、画像解析、twitter、等いろいろとアイディアを出していたのですが、難解プログラミング言語の事を思い出して
「センサーやマイクからの入力でミシンを動かすのではなく、刺繍のためのスクリプト(プログラム言語)を作って、それ自体もTシャツのデザインになるという方向はどうですかね。」
と石橋氏に提案したところすぐに目標をシェア出来たのでそれを達成すべく準備しています。

工業用ミシンの仕様
ミシンのハッキングをするために、名古屋のミシン製造メーカーtajima様にもアポを取り相談をしに行きました。プロジェクトの概要を説明した後に、
「制御の仕様を公開してください」
とお願いしたのですが、オープンには出来ないとの事。
1秒間に1200回も縫う事が出来ると言うのは恐ろしい程のノウハウの蓄積なので、僕らが数ヶ月で外部から制御しようとしても、針がポッキンと折れたり、最悪ミシンが壊れて弁償 ->赤字という無念の結果に陥るだけです。

よって、プログラムでミシンに読み込ませる刺繍データを生成するのが正解かと思い、
「刺繍データのフォーマットをおしえて下さい」
とお願いする訳ですが、こちらもオープンには出来ないとの事。
実はこちらは予想外だったのですが、ファームウェアのアップデートが頻繁にあり対応が出来ない点や社内での稟議を通すために時間がかかるという点からの判断との事でした。

よって、現状では大きく分けて

  • 刺繍のパターン作成のための環境(プログラミング言語)を作る
  • 刺繍データのファイルフォーマットを解読
という作業が発生しています。

その二つが終わって、やっと本題(Tシャツのデザイン)に入れる環境が整うわけですが、展示としては僕らが作ったTシャツを見せると言うよりは、来場者の方にこちらで用意した環境を使ってデザインしてもらい、工業用マシンがセクシーに動く姿と音を楽しんでもらって、Tシャツを持って帰って頂く形になります。

Lo floor、High ceiling、Wide wall
こちらは、石橋氏に教えてもらったのですが、ScratchやMind Stormを開発したMITのMitchel Resnickの言葉でMITプログラミング言語を作る時のスローガンだそうです。入り口の敷居は低く、奥が深く、領域横断的。 最終的な言語仕様を決めるのはまだ先になりますが、刺繍のパターン作成のためのプログラミング言語もこの辺を参考にして検討すると、目指すところは以下の様になります。
  • プログラミングに疎い人でも分かる直感的な部分を持ち合わせる
  • プログラム経験者はアルゴリズムを駆使して複雑な模様を生成出来る
    • 工業用ミシン制御専用なので非領域横断的でもOK
  • プログラム自体がグラフィックデザインとしても面白い
実際に手を動かすところまで後一歩のところまで来ているので、次回は実際にどういった作業をしているのか具体的に書く事が出来ればと思います。
(注)諸々の交渉が決裂した場合には、全然違う企画をやっている可能性もあるので、その辺はご了承下さいm(_ _)m


最後に、今回プログラミング言語を開発するにあたって参考にしている図書と、一番のきっかけとなったイベントを紹介させてください。

Lightweight Language Future

http://ll.jus.or.jp/2008/
参加者達の笑うツボがギーク過ぎてショックを受けました。遊びに来ていた友人は何が面白いのかさっぱり分からなかったそうです。
ライトニングトークのアーカイブは必見です!僕のお気に入りは"なぜ私はNarioを作ったか"と"LLにLLを埋め込んでみた"です。
http://ll.jus.or.jp/2008/info/video2

Rubyで作る奇妙なプログラミング言語

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
原 悠
毎日コミュニケーションズ
売り上げランキング: 73996

Brainfu*kやwhitespaceのインタプリタの実装方法、自分言語の設計から実装方法まで説明されています。著者の原悠さんは上のイベントにも出演していたのですが、その時に本の告知があって発売を楽しみにしていました。




それではまた。
真鍋大度

Information

その1
7月にB GALLERYで石橋素氏と展示をします!
詳細はこちら。
http://www.beams.co.jp/b-gallery/
http://www.daito.ws/works/hackingsawingmachine.html
http://www.motoi.ws/lang/ja/2009/03/hackingsawingmachine

その2
8月にシステムデザイン、プログラミング、サウンドで関わったダンスパフォーマンス作品”true”の公演があります。
詳細はこちら。
http://www.true.gr.jp
過去のアーカイブはこちらをどうぞ。
http://www.daito.ws/works/true.html

その3
Zachary Lieberman(OpenFrameWorksの開発者)、Damian Stewart (iPhoneアプリ”rjdj”の開発メンバー), Joel Gethin Lewis (元UVAでMassive AttackのLEDの演出を手がけた事で有名なCoder、Designer)と年末年始にLinzで3日間引き蘢って制作した作品がアップされました!是非チェックしてみてください。僕は音部分を担当しました。

lights on from thesystemis on Vimeo.

補足

プログラミング

コンピューターに指示を出して処理をさせることをプログラミングと言い、その指示をプログラムと呼びます。プログラミング言語というのは、プログラムを記述するための言語の総称です。
日本語、英語、スペイン語が自然発生的に生まれた言語に対して、プログラミング言語は人為的に創作された(人工)言語になるため、様々なものがあります。
"Hello, world!"と画面上に表示するプログラムを書いて各プログラミング言語の違いを確認するのが常となっています。
以下はその一覧ですが、最初のBASICとC++の二つ以外は見た目的に格好良いものを僕が恣意的に選んでいます。
ので、「UnlambdaとかLazyKとかが無いっすよ!関数型にもっと注目を!」等と言うクレームは受け付けないのであしからず。。

Hello, world!

BASIC

PRINT "Hello, world!"

C++
# include <iostream>

int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}

ACRONYM

{{>>{~~~~{-<}~~~~~~~~~{-<-<}}<<}

</(<<<){[<]}:>:{>>{~~~~~~~~{<}~{>}}<<}\
~>{{~{v}}>>>v{~}^<<<}/(<<<){[<<]}:>:{>>{~~~~~~~~{<<}~{>>}}<<}\
~{>>{vvvvvvvv~~~~~~~~~~~~~~~}<<}~{>>{vvvv~~~~~~~~~~~~~}<<}~
{>>{^^^^^^^^^^~}<<}~{>>{v~~~~~~~{{<<}~}v{~}vvvvvvv{~{>>}}^^^^^^~~~
{{<<}~}vvvv{~{>>}}v~~~}<<}~<{{^^^}}~
{>>{vvvvvv~{{<<}~{>>}}^^^^^^^~~~~~~~~~~~{{<<}~{v>}}^^^^^^}}
/{{()}}{[<<<<]}:>:{{~v}}\}

Befunge

"!dlrow olleH">v
               :
               ,
              ^_@

Black

           # #  

                 #
       #         

              #


     #    #    # 
                
           #    
              7
              2
              N
              1
              0
              1
              N
              1
              0
              8
              N
              1
              0
              8
              N
              1
              1
              1
              N
              4
              4
              N
              3
              2
              N
              1
              1
              9
              N
              1
              1
              1
              N
              1
              1
              4
              N
              1
              0
              8
              N
              1
              0
              0
              N
              3
              3
              N
              1
              0
              N
              ##

Blub

blub. blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub! blub?
blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub? blub! blub!
blub? blub! blub? blub. blub! blub. blub. blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub.
blub! blub? blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub? blub! blub! blub? blub! blub? blub. blub. blub.
blub! blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub! blub. blub! blub. blub. blub.
blub. blub. blub. blub. blub! blub. blub. blub? blub. blub? blub. blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub.
blub. blub. blub. blub. blub. blub. blub! blub? blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub? blub! blub!
blub? blub! blub? blub. blub! blub. blub. blub? blub. blub? blub. blub? blub. blub. blub. blub. blub. blub. blub. blub. blub. blub.
blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub! blub? blub? blub. blub. blub. blub. blub. blub. blub. blub. blub.
blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub. blub? blub! blub! blub? blub! blub? blub. blub! blub! blub! blub!
blub! blub! blub! blub. blub? blub. blub? blub. blub? blub. blub? blub. blub! blub. blub. blub. blub. blub. blub. blub. blub! blub.
blub! blub! blub! blub! blub! blub! blub! blub! blub! blub! blub! blub! blub! blub. blub! blub! blub! blub! blub! blub! blub! blub!
blub! blub! blub! blub! blub! blub! blub! blub! blub! blub. blub. blub? blub. blub? blub. blub. blub! blub.

Brainloller (画像です)
http://www.esolangs.org/w/images/d/d0/Hello.png

Byter

>>>>>>>>>V00V00V
0#00A00V<V00V0VV
-+>>A00VV<<0$0V>
V0AA<00V>V<<<<V0
>>V0V<<<-<000V<0
0AV0VV<<<0000V<0
0A>V+}>>>>>>}<V-
0A{>>>>-000000>V
00A0000>>>>>>>>A
V0A<<<<<<<<<<<<>

V000000000000000
V000000000000000
V000000000000000
V000000000000000
V000000000000000
>>>>>>>>>>>>V000

Choon(サウンドファイルです)
AGb-A#A#+A+%A#DF-AC#
http://www.stephensykes.com/choon/hello.wav

HQ9+

H

Malbolge

(=<`#9]~6ZY32Vw/.R,+Op(L,+k#Gh&}Cdz@aw=;zyKw%ut4Uqp0/mlejihtfrHcbaC2^W\>Z,XW)UTSL53\HGFjW

C-Intercal

DO ,1 <- #13
  PLEASE DO ,1 SUB #1 <- #234
  DO ,1 SUB #2 <- #112
  DO ,1 SUB #3 <- #112
  DO ,1 SUB #4 <- #0
  DO ,1 SUB #5 <- #64
  DO ,1 SUB #6 <- #194
  DO ,1 SUB #7 <- #48
  PLEASE DO ,1 SUB #8 <- #22
  DO ,1 SUB #9 <- #248
  DO ,1 SUB #10 <- #168
  DO ,1 SUB #11 <- #24
  DO ,1 SUB #12 <- #16
  DO ,1 SUB #13 <- #214
  PLEASE READ OUT ,1
  PLEASE GIVE UP

DNA#

   AT
  T--A
 A----T
 T-----A
 T-----A
 G----C
  T--A
   GC
   CG
  C--G
 A----T
 A-----T
 T-----A
 A----T
  A--T
   GC
   AT
  C--G
 T----A
 C-----G
 T-----A
 G----C
  C--G
   CG
   AT
  A--T
 T----A
 A-----T
 A-----T
 G----C
  A--T
   GC
   TA
  G--C
 T----A
 G-----C
 C-----G
 C----G
  A--T
   GC
   TA
  G--C
 A----T
 G-----C
 A-----T
 C----G
  A--T
   CG
   GC
  A--T
 A----T
 C-----G
 A-----T
 C----G
  A--T
   CG
   GC
  A--T
 T----A
 G-----C
 A-----T
 G----C
  A--T
   CG
   GC
  A--T
 G----C
 A-----T
 A-----T
 T----A
  A--T
   TA
   AT
  T--A
 G----C
 A-----T
 A-----T
 A----T
  G--C
   AT
   AT
  G--C
 T----A
 G-----C
 A-----T
 G----C
  G--C
   AT
   TA
  T--A
 A----T
 G-----C
 G-----C
 A----T
  A--T
   TA
   AT
  T--A
 A----T
 T-----A
 G-----C
 A----T
  T--A
   TA
   AT
  G--C
 A----T
 T-----A
 A-----T
 T----A
  G--C
   AT
   TA
  T--A
 A----T
 G-----C
 G-----C
 A----T
  A--T
   AT
   AT
  T--A
 G----C
 A-----T

dupdog(文字化けではありません)

H???????????????????????????????????????????????????????????????????????????????
??????????????????????????????????e?????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????l???????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????w???
o???????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????l???d?????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????CCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCC???????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
??????????????????r?????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????X?????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
??o?????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????l?????????????
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????

evil

  zaeeeaeeew
  zaeeaeeaeaw
  zaeaeeaeeaew
  zaeaeeaeeaew
  zuueeueew
  zaeeeeew
  zuueueueeeew
  zuueeueew
  zaeeaeeaeaeew
  zaeaeeaeeaew
  zaeeaeeaew
  zaeeeeeaw
  zaeeeeeaeawuuuw

Omgrofl

lol iz 72
rofl lol
lol iz 101
rofl lol
lol iz 108
rofl lol
rofl lol
lool iz 111
rofl lool
loool iz 44
rofl loool
loool iz 32
rofl loool
loool iz 87
rofl loool
rofl lool
lool iz 114
rofl lool
rofl lol
lol iz 100
rofl lol
lol iz 33
rofl lol

PATH

\/\   /\          /\  /\ 
+++   ++          ++  ++
+++   ++  /++++\  ++  ++  /++++\ 
++\++\++  +    +  ++  ++  +    +
++   +++  +/+++/  ++  ++  +    +
++   +++  ++      ++  ++  +    +
\/   \/\  /\+++   /\  /\  /++.+/  
                          \        \ 
/++++.+++++++++++++++++++++++++++  /  \ 
                          /\       -  -#
                          ++       .  -.
+      /  \++++\  /++++\  ++  /---\-  -+
+  /\  +  +    +  +    +  +.  -   .-  -}
+  +.  +  +    +  +       +-  -   +-  
.  +}  +  +    +  +       +-  -   +-  -.
\.+/\++/  \++++/  +       +\  /-.+/-  --
           \      /    \.{/   \    /  \/

Pieces

                                                                    #      #                                                             #                        #   +                                                +                     #      #                                                                            +                              #
###+++# #+++# #+++# #+++# #+++####+++###+ +###+ +###+ +###+ +###+ +## #+ +## #++###+ +###+ +###+ +###++++###+++# #+++# #+++# #++ +# #+++## #+++###+ +###+ +###+ +## #++ +###+ +###++ +###++###+++# #+++# #+++# #+++# #++ +# #+++# #+++# #+ +## #+ +## #+++##+++###+ +###+ +###+ +###+ +###+++####+++###+ +###+ +###+ +###+ +## #++ +# #+ +## #++ +####+++# #+ +## #+ +## #++ +## #++ +## #++++## #++ +## #++ +## #++ +## #++ +## #+++##+++####
####+++###+++###+++###+++###+++####+++###+++###+++###+++###+++##++++###+++####+++###+++###+++###+++###++++###+++###+++###++####+++###++++###++++###+++###+++###+++####++++###+++###++++##+++###+++###+++###+++###+++###++++##++####++####++####++++#####++###+++###+++###+++###+++###+++###+++####+++###+++###+++###+++###+++####+++###++++####++++####++###+++####++++####++++####++++####++++####++++####++++####++++####++++####++###+++####
###++####++####++####++####++####++++##++++##++++##++++##++++##+++####+++####+++##++++##++++##++++##++++####++####++####++###++++###++++###++++##++++##++++##++++####++++##++++##+++++##+++###++####++####++####++####++++####+++###+++###+++###++++###++###+++##++++##++++##++++##++++##+++####++++##++++##++++##++++##++++###++++###+++####++++####+++###+++####+++####++++####++++####++++####++++####++++####++++####++++#####++###++####
###+++###+++###+++###+++###+++# ##+++###+++###+++###+++###+++###+++# ##+++# ##++###+++###+++###+++###+ ++###+++###+++###+++###+ ++###+ +# ##+ +###+++###+++###+++# ##+ ++###+++###+ ++###++###+++###+++###+++###+++###+ ++###+++###+++###+++# ##+++# ##+++##+++###+++###+++###+++###+++###+++# ##+++###+++###+++###+++###+++####+ ++###+++####++++## #+++###+++# ##+++####++++####++++####+ ++####++++####++++####++++####++++# ##+++##+++# ##
                                #                                     #                                +                         +                                                                                      +                      #                                               #                                  +

Qdeql

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- h
---------- ---------- ---------- ---------- ----------
--*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- e
---------- ---------- ---------- ---------- ----------
-----*

-\=/-

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- l
---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- l
---------- ---------- ---------- ---------- ----**

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- o
---------- ---------- ---------- ---------- -----*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- space
---------- ---------- ---------- ---------- ----------
---------- ---------- ----*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- w
---------- ---------- ---------- -------*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- o
---------- ---------- ---------- ---------- -----*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- r
---------- ---------- ---------- ---------- --*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- l
---------- ---------- ---------- ---------- --------*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- d
---------- ---------- ---------- ---------- ----------
------*

---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ---------- newline
---------- ---------- ---------- ---------- ----------
---------- ---------- ---------- ---------- ------*

SNUSP

   /e+++++++++++++++++++++++++++++.\  
   ./\/\/\  /+++\!>.+++o.l.+++++++l/                  #/?\  
$H!\++++++\ +   \comma.------------ .<w++++++++.\ /?\<!\-/
   /++++++/ +/\                      /.--------o/ \-/!.++++++++++/?\n
 /=\++++++\ +\\!=++++++\             \r+++.l------.d--------.>+.!\-/
 \!\/\/\/\/ \++++++++++/

Spiral

e0v ***   *eXlv**   *lX      *2X       **oXi
v * * *   *     *   * 2      * o      **   v*
* * * *   * *****   * v      * v      * *iX *
* * * *   * *       * ^      v *      * * w *
* *** *   * *****   * v      * *      * * v *
*     *   *     ^   * ^      * *      * * * *
* *** *   * ****v   * v      * *      v * * *
* * * *   * *       * *      * *      ^ * * *
* * * *   * *****   * *****  * *****  * *** *
* * * *   *     *   *     *  *     *  **   **
*** ***   *******   *****v^  *******   *****


*wX ***    **3Xp    *rX4..   d5*      qd**  
* 3 * *   **   v^   *    ..  * *      *  ***
* v * ^   * #pX v   * ..  .  * *      *    **
* *** v   * # r #   * ..  .  * *      * !q* *
* * * *   * # v #   * 54 ..  * *      * * * *
* * * *   * # * #   *   @X   * *      * * * *
* * * *   * # * #   *   v    * *      * * * *
* * * *   * # * #   * * **   * *      * * * *
*  *  *   * # * #   * ** **  * *      * *** *
*  *  *   * #v* ^   * *** *  * *****  *    **
** * **   **   *v   * * * *  *     *  *  ***
 *****     *v^**    *** ***  *******  **** 

TheSquare

v#############@
+:DDDDDDDDDDD:[
+#;;;;;;;;;;;#
+              
+ ;;
+  >v      ;
+ JJ+      >v
+>^-+      J-
+/--+      --
v{>[<;;    --
/- +  >v;  --
+\ +;JJ+>v --
++ +>^++J- --
++ +J++++-;--
++ >^>^++->^-
++     ++-Jv<

>^     >^-+ ;
#      v-<+>[ ^
#      - ;+
#      >-[^

Tree

      ^
    ^^|^^ 
   ^^\|/^^
   H^ |/^^^
     \| e
      |/
   ol~|  
     \| 
  , 32|  W
   \/ | /      
    \ |/   
 l   \|  
 \  d |   o
  \/ !|r /   
   \/ |\/
    \ |/ 
     \|

Wierd

H          ************************             ******************                                                 **********
 e         *                      *            *                  *                                        *       *        *
  l        *      ***             *             **                 *                                      * *      *        *
!  o       *   ***   *          * *               *                 *                                     *  *     *        *
    ,      *  *       *        ** *               *                 *                                    *    *    *      * *
     W      * *        *      * * *               *                 *                                    *     *   *     ** *
      r      *          *    *  * *               *  ************   *                                   *       *  *    * * *
       d                 *  *   * *               * *          *    *                                  ******    *  *  *  * *
        *                 * *   * *               **         **     *                                        *    *  * *  * *
         *                 **   * *               *         *       *                                         *    *  ** *  *
          *                 *   * *                         *       *                   **  **                 *    *  * *  *
           *                    * *                        *        *                 **  ** *              **  *    *   *  *
            ********************  *                        *        *               **       *            **  ****    ***   *
                                   *              **      *         *             **         *          **                  *
                                    *           **  *     *        *            **           *        **                    *
                                     *        **     *  **        *       **  **             *      **                     *
                                      *****  *        **         *       *  **                **  **                      *
                                           **                   *        *                      **                       *
                                                               *          *                                             *
  *************************************************************           *                *****************************
 *                                                                       *                *
 *                                          ***                         *                *
*                   *                       *  *                       *                *
*                   **                       *  *                     *                *
 *                  * *                      *   **                  ******           *        *********************
 *                  * *                     *      *                       *          *       *                     *
  *                 *  *                    *      *                        *        *        *                      *
  *                 *  *                   *        **                       *       *         *                      *
   *                *   *                 *           **                      *       *        *                       *
   *                *   *                *****          **                     *      *       *                         *
    *               *    **                   *           **               **   *      *     *                           *
    *               *      **                  *            **           **  *****     *    *                            *
   *                *        **                 *             *        **               *   *                            *
  *                 *          **           **   *            *      **                 *    **                          *
  *                 *            *        **  *****            **  **                    *     **                        *
   *                *            *      **                       **                      *       *                       *
   *                *             **  **                                                  *       *                      *
    **              *               **                                                    *        **                    *
      *             *                                                                      *         *                   *
       *            *  *************************************************************       *         *                   *
        **          *   *                                                           *       *         *                  *
          **        *    *                                                        *  *      *         *                  *
            *      *      *                          *************************   **   *    *          *                  *
             *     *       *                        *                       *   * *    *   *          *                  *
              ***  *        *                       *      *               *   *  *     *   *         *  **************  *
                 * *         *                     *       **             *   *   *      *  *  **      **             *  *
                 * *          *                    *       * *  ***      *   *    *       *  **  **             *******  *
                  **           *                    *      *  **        *   *     *        *       **            *       *
                   *            *                   *      *           *   *      *         *        **           *      *
                                 *                   *     *          *   *       *          *         **          *     *
                                  *                  *     *         *   *        *           *          **        *     *
                                   *                  *    *        *   *  *      *            *           **      *     *
                                    *                 *    *        *  *   **     *             *            **    *     *
                                     *                 *   *        *  *  *  *    *              *             *   *     *
                                      *                *   *        *  * *   *    *               *            *   *     *
                                       *                *  *        *  **    *    *                *            *  *     *
                                        *               *  *        *  *     *    *                *             * *     *
                                         *             *   *        *        *    *                *              **    *
                                          *           *   *          *       *    *                *               *   *
                                           *         *   *            *     *     *                *                  *
                                            *       *   *              *****      *                *                 *
                                             *      *  *                          *                *                *
                                              *     * *                           *                *               *
                                               *    **                           *                 *              *
                                                *   *                           *                 *               *
                                                 *                             *                 *                *
                                                  *****************************                 *                  *
                                                                                               *                   *
***********************************************************************************************                     *
*                                                                                                                   *
*                                                                                                                    *
*                                     **                                                                             *
*                                   **  **                                                                          *
*                                 **      *                                                                        *
*                               **        *                                                                        *
*                             **          *                                                                         *
*                           **            *                                                                         *
*                         **              *  ******                                                                *
*     ****              **                * *    *                                               ******************
*    *    *       **  **                  **    *                                               *
*    *    *     **  **                    *   **                                                *
*   *     *    *                             *                                                  *
*  *      *    *                             *                                                 *
* *****    *  *                             *                                                  *
*     *     * *                             *                                                   *
*     *      **                            *                                                    *
*     *       *                            *                                                     *
*     *                                   *                                                      *
*******                                   *                                                       *
                                    **  **                                                        *
                                  **  **                                                           *    *
                        **      **                                                                 *    **
************************  **  **                                                                    *   * *
*                           **                                                                      *   *  *
*  *                                                                                               *   *    *
*  **                                                                                             *   *    *
*  * *                                                                                            *  *    *
*  *  *                                                                                           * *    *
* *   *                                                                                           **    *
* *    **                                                                                         *    *
* *      **                                                                                           *
* *        **                                                                                        *
 **          **                                                                                     *
  *            **                                                     ******************************
                 **                                             **  **
                   **                                         **  **
                     **  **                                 **
                       **  *                              **
                           *                            **
                            *                         **
                            *                       **
                           *              **  **  **
                           ***************  **  **

2L

 *+ 2L "Hello, World!" program by poiuy_qwert   +
+                                                   +
 *                                             +*
 *     +                                        *+
    + **                                     +    *
      +*                                           +
     *  +                                                               *+
     +                                        +                         *
   +******************************************* *************************
                                                 +                      +
                                                     +
                                                 *+
    +                                          *+*
      +                                        *+  *
     *                                          +  *+
     +                                           + *  +
   +********                                       *      +
                                                   + +*
    +                                             *   *+
      +                                           *+    *
     *                                             +    *+
     +                                              +   *    +
   +******                                              **+
                                                        +*
                                                        +  *
                                                           *+ +
    +                                                *   +        +
     ***+                                            *     * +*
   +                                                       *  *+
       *                                              +    +    *
    +  +                                                  *   *+ +
     ************************+                            * + * +
   +                                                          *     +
                            *                              +  + *+
                            +                                  +*
                                                              +   *
    +                                                        *  *  +
     *******************************************************+* +  *   +
   +                                                              *       +
                                                           *  +   +  +*
    +                                                      +     *    *+
      +                                                          *+     *
     *                                                            + *    +
     +                                                             + *  *
   +************                                                        *    +
     +                                                               *  +         +
    *                                                                 +      * +
    +                                                                  *+   +** 
  +******************************************************************* *
                                                                       +   +    *       +
                                                                             *   +         +
   +                                                                        +          +*
    ***+                                                              *         *       *+
  +                                                                             * 
                                                                      *         +   +    *    +
      *                                                                +              *   +        +
   +  +                                                                              +        *+
    *******+                                                                   *         *   +*
  +                                                                                      *
                                                                               *         +  +    *
          *                                                                     +             *   +
   +      +                                                                                  +
    *****************************+                                                     *         *
  +                                                                                              *
                                                                                       *         +
                                *                                                       +
                                +
  ************************************************************************+                    *
 +                                                                       *                     *
                                                                                                +
                                                                         +

 

等です。 多くのプログラミング言語は実用的なモノを目指していますが、連載で紹介しているものはそうでないものが多いです。
難解プログラミング系Hello World
http://www.esolangs.org/wiki/Hello_world_program_in_esoteric_languages


Brainfuck
Brainfuckは8つの命令、テープとポインタで構成されています。
テープは十分なサイズを持つ配列で各要素は1バイトの範囲の整数を持つ事が出来ます。
ポインタはテープのどこの位置か指すオブジェクトです。
初期状態では、テープの中身は全て0でポインタの位置は一番左の要素をさしています。
8つの命令は
  • > ポインタをインクリメントする。(左に1個移動する)
  • < ポインタをデクリメントする。(右に1個移動する)
  • + ポインタが指す値をインクリメントする。
  • - ポインタが指す値をデクリメントする。
  • . ポインタが指す値を出力する。
  • , 1バイトを入力してポインタが指す値に代入する。
  • [ ポインタが指す値が0なら、対応する ] の直後までジャンプする。
  • ] ポインタが指す値が0でないなら、対応する [ にジャンプする。
です。

例えば、一番簡単な方法でrzmと表示したい場合、ポインタの移動やジャンプを一切使用せず「+」「-」「.」のみを使って以下の様に書くことが出来ます。

++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++
.

++++++++
.

----------
---
.

こちらの処理の流れとしては以下の様になります。

  • 「+」を114個並べてポインタ位置の値をrのASCIIコード=114までインクリメント。
  • 「.」でASCIIコード114に対応する文字rを出力。
  • 「+」を8個並べてポインタ位置の値をzのASCIIコード=122までインクリメント。
  • 「.」でASCIIコード122に対応する文字zを出力。
  • 「-」を13個並べてポインタ位置の値をmのASCIIコード=109までデクリメント。
  • 「.」でASCIIコード109に対応する文字mを出力。

ところが、ポインタの移動と「 [ 」と「 ] 」で組み合わせたループ処理を行う事で上記のプログラムを短くする事が出来ます。

+++++++++++
[ > ++++++++++ < -] >
++++
.

上記のプログラムが文字「r」を表示するためのプログラムです。まずはこちらを手順を追って書いて行きます。

テープの初期状態(下線はポインタの位置)
| 0 | 0 | 0 | 0 | ...

「+」を11個ならべて11回インクリメント
++++++++++
| 11 | 0 | 0 | 0 | ...

「[」は0で無い時は何もしないので次の命令へ
| 11 | 0 | 0 | 0 | ...

「>」でポインタを移動
| 11 | 0 | 0 | 0 | ...

「+」で10回インクリメント
| 11 | 10 | 0 | 0 | ...

「<」でポインタを移動
| 11 | 10 | 0 | 0 | ...

「-」
| 10 | 10 | 0 | 0 | ...

「]」は0で無いので、対応する]までジャンプ
| 10 | 10 | 0 | 0 | ...

また「[」命令があるところから初めて

「[」は0で無い時は何もしないので次の命令へ
| 10 | 10 | 0 | 0 | ...

「>」でポインタを移動
| 10 | 10 | 0 | 0 | ...

「+」を10個ならべて10回インクリメント
| 10 | 20 | 0 | 0 | ...

「<」でポインタを移動
| 10 | 20 | 0 | 0 | ...

「-」でデクリメント
| 9 | 20 | 0 | 0 | ...

「]」は0で無いので、対応する]までジャンプ
| 9 | 20 | 0 | 0 | ...

という形で「[」と「]」命令の間をループ処理していくと

| 0 | 110 | 0 | 0 | ...
となり、

「[]は0の時「」」の直後の命令までジャンプ
| 0 | 110 | 0 | 0 | ...

「>」でポインタを移動
| 0 | 110 | 0 | 0 | ...

「+」を4個並べてで4回インクリメント
| 0 | 114 | 0 | 0 | ...

「.」でASCIIコード114に対応する文字r を出力。

ループ処理を使うことで

++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++
.



+++++++++++
[ > ++++++++++ < -] >
++++
.

の様に短くする事が出来た。

同じ要領でzとmを出力するためのプログラムを書くと、

「<」でポインタを移動して
| 0 | 114 | 0 | 0 | ...

同じ要領で、ループ処理で左から2番目の
テープの値を8回インクリメントして出力
+++
[>+++<-]
> -
.

| 0 | 122 | 0 | 0 | ...

.
「<」でポインタを移動して
| 0 | 122 | 0 | 0 | ...

ループ処理で左から2番目の
テープの値を13回インクリメントして出力

+++
[>---<-]
>----
.

以上をまとめると、rzmと出力するための
プログラムは
+++++++++++
[ > ++++++++++ < -] >
++++
.
<
+++
[>+++<-]
> -
.
<
+++
[>---<-]
>----
.

と書く事が出来ます。
スペースと改行は無視されるので、少し整理すると以下の様になります。

+++++++++++
[ > ++++++++++ < -] >
++++.<+++[>+++<-]
>-.<+++[>---<-]>----.

是非、実際に実行して結果を確認してみてください。

ちなみに、CやJava等、普通のプログラミング言語で解ける問題は Brainfuckでも解く事が出来る事が証明されています。
こちらはチューリング完全、チューリング機械という キーワードを調べてみると理解が深まると思います。


Whitespace
「無視されて来た空白との公平性のために、、、」
ということで、作られたプログラミング言語で半角スペース、タブ文字、改行で構成されます。
3種類の文字でどのようにプログラミングを行うかと言うと、
[Space][Space]:加算
[Space][Tab]:引き算
[Space][LF]:かけ算
[Tab][Space]:割り算
[Tab][Tab]:剰余
の様に組み合わせで命令を表現しています。
詳細は本家サイトとwikipediaに譲ります。
http://compsoc.dur.ac.uk/whitespace/
http://ja.wikipedia.org/wiki/Whitespace

Links




PAGETOP