カテゴリー
fun

Folders.py – ディレクトリ構成(だけ)で書く変態プログラミング言語 Folders の Python 実装

Folders.py は、難解(esoteric)プログラミング言語と言われる変わったプログラミング言語のひとつ Folders の Python による実装です。

オリジナルの Folders 処理系は 2015年に C# で書かれたということです。

  • プログラムはディレクトリの階層構造として記述される
  • フォルダ内のファイルはすべて無視される
  • 文や式はフォルダ内にあるサブフォルダの個数によって定義される

コマンドの定義はこんな感じ。

コマンド サブフォルダの数 詳細(引数など)
if 0 folders Second sub-folder holds expression, third holds list of commands
while 1 folder Second sub-folder holds expression, third holds list of commands
declare 2 folders Second sub-folder holds type, third holds var name (in number of folders, ex. zero folders becomes “var_0”)
let 3 folders Second sub-folder hold variable name (in number of folders), third holds an expression
print 4 folders Second sub-folder holds expression
input 5 folders Second sub-folder holds variable name

Expression, Type も同じような表で、サブフォルダの個数と改装で定義されます。

サンプルの加算プログラムを読んでみる

サンプルディレクトリ(プログラム)が6種類ついてきているので少し眺めますが、こんな感じなのでパッと見ても何がなにやら。以下は一番短そうな AddTwoNumbersOrStringsです。

実行結果はこんな。2 と 5 を入力すると 7 が返ってきます。

PS > Folders .\AddTwoNumbersOrStrings\
2
5
7
PS >

この二つの値を足す Folders プログラムはこちら。

フォルダはソート順に読まれます。

まず、1つ目のサブフォルダ(1 – Input)の1番目のサブフォルダ(1 – init)の中にフォルダが5つあることから、ユーザー入力を受け取る Input コマンドだとわかります。2番目のサブフォルダ(2-name)はフォルダが0個なので変数0に値が格納されます。

2つ目のサブフォルダ(2 – Input 2)は、同じく1番目のサブフォルダ中のフォルダが5個なので Input コマンド。2番目のサブフォルダ(2-name)中のフォルダが1個なので変数1に値が格納されます。

最後、3つ目のサブフォルダ(3 – Print)は、1番目のサブフォルダ(1 – init)中のフォルダ数が4個なので Print コマンド。Print コマンドは2つ目のサブフォルダに式(2 – expression)を取ります。

式の1番目のサブフォルダ(1 – init)内のサブフォルダは1個であることから、この式は Add 式。2番目のフォルダ(2 – expression 1)の式を加算し、3番目のフォルダ(3 – expression 2)の式を返します。

2番目の式はサブフォルダから変数0、3番目の式は変数1を指すため、初回の Input と2回目の Input でそれぞれ格納した値が加算され、結果がコンソールに出力されます。

…と、いう解釈で合ってると思うのですが。試しに、加算式のところのフォルダ

AddTwoNumbersOrStrings / 3 - Print / 2 - expression / 1 - init

内にもう2つフォルダを作って動かしてみると、

PS > Folders .\AddTwoNumbersOrStrings\
2
5
10
PS >

と、2つの数の乗算になりました。

フォルダ名もファイルも関係ない

サンプルプログラムでは、フォルダに連番の数字やコマンド名などがわかりやすく入っていて、一見するとこのフォルダ名を見て動いてるのではと思うかもしれませんが、これはわかりやすさのためにつけてくれている名前なだけで、普通のプログラミング言語でいえばコメントにあたるようです。

サブフォルダの順番に意味がある場合があるので、ソート順でフォルダ名をつける必要があります。

実際、適当にフォルダ名を変えても問題なく動きました。

そして、GitHub で公開されていることから全フォルダに .gitkeep が置いてありますが、フォルダの中のファイルは何でも構いません。空でもいいし、好きなだけファイルを置いても動作に影響はありません。

Folders 言語の利点

ドキュメントにも書かれていますが、Windows ではディレクトリをいくつもっても、ディスク上のサイズが増えることはありません。先ほどの AddTwoNumbersOrStrings プログラムのフォルダのプロパティを表示しても、サイズは0と表示されます。

言語のオリジナル作者も、352,449 フォルダを含むフォルダを作ってもサイズは0だった、と報告しています。ディスク資源を消費することのない、夢のプログラミング言語ですね!

…というのは冗談ですが、ソースコードの短さを競うコードゴルフにおいて、出題者のルール決めに不備が有った場合にはこの Folders が最強のコードゴルフ言語となるでしょう。

via Hacker News

カテゴリー
ネットの事件

ランダムなアルファベット4文字x2で、Google画像検索が謎の抽象画を返してくる

グーグル画像検索を乗っ取るサイト?

reddit/whatisthisthing(これは何?)で質問されて話題になった謎の現象がこれ。

グーグル画像検索で”jwsr ljxb”のように、アルファベットで単語になってなさそうなものを2個入れると、出てくる候補が謎の図形画像だらけになります。

どんな4文字でも出るわけではありません。まず辞書にあるような4文字はダメです。その単語に関する画像が出てきます。略語として成立してるものもだめ。子音ばかりを読めないような並びで並べると出やすいように思います。

画像のサイトを開いてみると、どの画像も c0d3.attorney というドメイン上のページにあることがわかります。その内容はというと、

謎の画像二つに、ごく短いプロジェクト紹介、そしてその後ろには長々と、デタラメにも見える読めないテキストが続いています。

難解プログラミング言語 Malbolge を使ったプロジェクト

プロジェクト紹介の内容はこちら

c0d3.attorney は Malbolge, 1998年にベン・オルムステッド氏が作成したパブリックドメインな難解言語, で書かれたプログラムを表示することに特化したプロジェクトです。言語は使うことがほぼできないように設計されています。(しかし)設計上の弱点がこれまでに発見され、使えるプログラムを書くことが可能となりました。これを共有できることは喜ばしいことです

とても短い紹介文で、これ以外には情報がありません。

ページのほとんどを占めるデタラメ風テキストが、そうすると Malbolge 言語のコードだということなのでしょう。

画像もコードも、URLに与えたパラメータに応じて変化しますが、あるページで数えてみると、約5万語、61万文字ありました。

オンラインの Malbolge実行環境(あるんだ…) に最初の一行を食わせてみましたが、エラーとなってしまいました。1行だけ入れても動かないのかもしれません。

ちなみに、サイトにサンプルとしてある Hello, World はこれ

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=

うん。まったくわからん。

Google は「知らん」と

TheNextWeb が Google にこの現象に関して問い合わせしてくれていますが、これは Google のイースターエッグではないし、同社は c0d3.attorney とは何の関係も無い、という回答が来たそうです。

「一般的な話」として、画像のあるページにある文字で検索したら出るよ、ともコメントにあったということで、ごくごく当たり前のつまらない結論になってしまうのですが、この自動生成っぽい Malbolge 言語のコードの中にアルファベット4文字のセットが大量にでき、その中の2組の4文字をウェブの他のサイトで2つ同時に使ってる他のサイトがほとんど無いために、検索で出てきてしまう、ということでしょうね。

今の時点でも、この謎のサイトを作ったのは誰か、などは判明していません。

純粋なプロジェクトか、意図のあるSEOスパムか?

ドメインの世界では、 .com 以下は、ランダムだろうと意味がなかろうと 4文字のドメイン名はすべて誰かに取得されていることが2013年には報告されています。打ち間違いでもなんでも、4文字.com を入れた人を待ち構えて、広告を見せたりドメインを売りつけたりという商売をしてる人たちがどこかに存在するわけです。

となると、今回のサイトもそういう「迷い込んできた人」を捕まえるために作られた可能性も消し去ることはできません。とはいえ、今のところサイトに来ても、広告があるわけでもなし。単に人が来たからといって得になることなんてあるのかなとも思います。

いろいろな文字列でGoogleから推薦される、と聞くと人によってはたいへん魅力的に感じるかもしれませんが、そのデタラメな文字で迷い込んでくる人が分量としてどれほどのものか、という話もあります。総量としては見つけてやってくる人はそれほど多くないかもしれません。

ですが、今回の件で興味を持った人は、単語になってない日本語の文字の組み合わせを大量に配置するサイトでも作れば、同様の結果を得られたりするかもしれませんね。

via reddit and TheNextWeb