弊社では毎朝「朝会」という、 1. 今日やること 2. 困っていること 3. 俺トピ
という3つのお題に関したトピックを一人づつなんかいい感じに喋ってそれぞれの情報共有や困っている部分に知見があればアドバイスしたりする雑談的コミュニケーションを行なっています。3の俺トピというのは今気になっていたり、個人的なハマっていること、昨日何食べたかとかなんでもいいのですが、その時にある有志が見つけてきやがりましたよ。。ゴリラ言語ってやつを。
弊社では普段昼休みなどにゲームやボードゲームを行うことが多いのですが、自分はよくドンキーコングを使うことが非常に多く、社内ではゴリラを担当しています。その縁もあってか、ゴリラ言語を学ぶことにしました。
また、余談なのですが最近購入した「ゴリラ人狼」というボドゲがあり、このゲームの特徴として「ウホッ」しか喋れない、ただ、ターンが進むごとに追放されたゴリラが三文字以内の言葉を2つ残すことができる、それらを用いて密猟者(人狼)を見つけ出し、追放するというゲームになっています。 ゴリラ言語の話を聞いた時私は思いました。
「このゲームには必勝法がある」
ゴリラ言語を完全に理解できればウホウホ言ってる他のゴリラが何いってるかわかるじゃないですか。ワンターンキルして無双できるのでは?これは完全にモチベーションが上がってきましたね。
といっても、元記事のゴリラ言語作成者様が非常にわかりやすくゴリラ言語の解説をしてくれているので、ぶっちゃけ元記事見るだけで 完 全 理 解 ではあるのですが、ウとホがゲシュタルト崩壊した頭ゴリラな方のために色々噛み砕いて解説していきます。
TL;DR
- ゴリラ言語の紹介
- 前提知識を学習します
- 読解します
- ウホウホいいます
ゴリラ言語の紹介
何はともあれ始める前に元記事をこちらに奉っておきます。 ゴリラ言語の読み方 - Qiita
前提知識
ゴリラ言語を理解する前に、前提としてこちらの知識を仕入れておきましょう。 元記事にはもっと詳細に触れているので気になったらそちらを見てみてください。
Whitespace
Whitespace(ホワイトスペース)は、プログラミング言語のひとつであり、またそれを動作させるインタプリタを指している。WhitespaceはGPLにより配布されている。実用言語ではない難解プログラミング言語のひとつ。 本来 "whitespace" とは「空白」や「余白」を意味する英単語である。多くの一般的なプログラミング言語では空白に相当する文字(スペース、タブ、言語によっては改行も)は他の言語要素間の区切りとして使われている。しかし、言語 Whitespace においてはプログラムは空白文字だけで構成される(それ以外の文字列はコメント扱いで無視される)。そのため、一見するとプログラムであることすらわからないという珍しい言語である。
ゴリラ言語も原理は同じです。空白を「ウ」、タブ文字を「ホ」に見立てることによって、動作するEslang(難解プログラミング言語)です。空白とタブ文字の組み合わせ、パターンによって制御するプログラムをウとホに置き換えたものと考えてもらって大丈夫です。
操作方法も元記事を見れば完全理解です
IMP [ウ] スタック操作 [ホ][ウ] 演算 [ホ][ホ] ヒープアクセス [LF] フロー制御 [ホ][LF] I/O STACK OPERATION [ウ] 数値:数値をスタックに積む [LF][ウ]:スタックの一番上を複製する [ホ][ウ] 数値:スタックのn番目をコピーして一番上に積む [LF][ホ]:スタックの1番目と2番目を交換する [LF][LF]:スタックの一番上の物を捨てる CALCULATE [ウ][ウ]:加算 [ウ][ホ]:引き算 [ウ][LF]:かけ算 [ホ][ウ]:割り算 [ホ][ホ]:剰余
これ以上でもこれ以下でもないので書くことはあまりないのですが、まだウホッっている方のためにもう少し具体的に。
ウッウウ ウウウホウホウ ウウウッホッウウウウホ ウウウッホホウウウウッホホウッウウウッホホ ウウウホホウウウッウホホウホッホウホホ ウウウッホッホウウウウッホウホウウホホウ ウウホウウウッウーウウウウウホウッウウホウウーホウウ ウ ウ ホウッホホホウホウウウッホウホウウ ホ ウウ ウ ホウウウッウウウウウウッホウウーウホウウホウウ ウウホホホウホウウウホッウホウウ ウ
元記事で紹介されている上記コードをもう少し詳しく説明していきたいと思います。まず、前提知識として説明した通り、「ウ」「ホ」の2つの文字と改行コードで構成されるため、コードの中にブラフがいくつかあります。 「ッ」と「ー」ですね。わかりやすくするためにこいつらを取り除いてあげましょう。取り除いたものは以下。
ウウウ ウウウホウホウ ウウウホホホホホホホホウウウウウウウホ ウウウホホウウウウホホウウウウホホ ウウウホホウウウウホホウホホウホホ ウウウホホウウウウホウホウウホホウ ウウホウウウウウウウウウホウウウホウウホウウ ウ ウ ホウホホホウホウウウホウホウウ ホ ウウ ウ ホウウウウウウウウウホウウウホウウホウウ ウウホホホウホウウウホウホウウ ウ
大分スッキリしてきましたね。さらに、これはデータ部と制御部に分けることができます。データ部は上部のここ。
ウウウ ウウウホウホウ ウウウホホホホホホホホウウウウウウウホ ウウウホホウウウウホホウウウウホホ ウウウホホウウウウホホウホホウホホ ウウウホホウウウウホウホウウホホウ
ではここを一字づつ解読していきます。 まず最初の「ウウウ」ですが、まず最初のウはスタック操作をするというIMPになります。続いてSTACK OPERATIONとしての「ウ」、つまり、数値をスタックに積みます。積むデータは「ウ」なので、0が積まれます。
もう一ついってみましょう。「ウウウホウホウ」はスタック操作のウ、積む操作のウを除いた「ウホウホウ」を積むということになります。ウホウホウは、0と1に直すと01010になりますね。01010ってどこかでみたことありませんか?
そうです、2進数ですね。 2進数のおさらいですが、
01010 = 0 x 2⁴ + 1 x 2 ³ + 0 x 2² + 1 x 2¹ + 0 x 2⁰ = 0 + 8 + 0 + 2 + 0 = 10
こんな感じになります。 また、これはコンピューターの話なのですが、コンピューターは二進数で表現を行うので、文字データも2進数として表現されています。文字を表現する二進数のことを一般的には文字コードと呼びます。 では、文字コードで10はなんでしょうか?調べてみると 改行(LF)であることがわかります。続けてやってみましょう。 もうお分かりですね?
ウ => 0 ウホウホウ => 10 ウホホホホホホホホウウウウウウウホ => 65281 ウホホウウウウホホウウウウホホ => 12483 ウホホウウウウホホウホホウホホ => 12507 ウホホウウウウホウホウウホホウ => 12454
となります。
ウウ ウ ウウ ウホウホウ ウウ ウホホホホホホホホウウウウウウウホ ウウ ウホホウウウウホホウウウウホホ ウウ ウホホウウウウホホウホホウホホ ウウ ウホホウウウウホウホウウホホウ
身も蓋もない言い方をすれば、この右側に文字コードを二進数にして0を「ウ」、1を「ホ」にしてしまえばゴリラ言語で会話できるというわけですね。また、一点だけ留意したいのが、スタックなので出力は逆順になっているということです。なので上記の言語はそのまま読むと
null LF => 改行記号 ! ッ ホ ウ
こういうことになります。
システム部については元記事の説明が完璧なので本当に書くことはないです。読むのがめんどくさい脳死ゴリラだった場合はもし0、つまりウウウだった場合、ラベルに飛んで繰り返しから抜けることができますので、終了時にはウウウとすると考えておいてもらえれば良いです。 読んでもらえばわかりますが、
ウッウウ ウウウホウホウ ウウウ ウウウッホッウウウウホ ウウウ ウウウッホホウウウウッホホウッウウウッホホ ウウウ ウウウホホウウウッウホホウホッホウホホ ウウウ ウウウッホッホウウウウッホウホウウホホウ
このようにウウウと改行で分けてしまっても出力結果はウホッ!になります。
これで明日からあなたもバイリンガルですね! ちなみに、ゴリラ言語では「ウ」と「ホ」以外は基本的に無視されますので合間に「ッ」を仕込んだり、「バナナ」という文字を仕込んだりして個性を出していくのがおすすめです。 では最後に学習した言語で何か記述してみましょう
ウウウ ウウウホウホウ ウウウホホホッホホホホホウウウウウウウホ ウウウホウウホウウウッウホホホウホウウウ ウウウホウウウホウウウウホウホウウホホ ウウウウッホホウウウホウホウウウウウウウ ウウウウホホッウウホホウ ウウウホホウホホホホッ ウウウウホホウホホウホッ ウウウウホッホウウッホホウ ウウウホホウホホホホ ウウウウホホウホホウホ ウウホウウウウウウウウウホウウウホウウホウウ ウ ウ ホウホホホウホウウウホウホウウ ホ ウウ ウ ホウウウウウウウウウホウウウホウウホウウ ウウホホホウホウウウホウホウウ ウ
なんといっているかもうわかりましたね?これであなたも今日からゴリラ人狼でマウント取れます。 自分も元記事様には感謝のLooks Gorilla To Meをしました。
今回は喋るということに重点を置いて紹介しましたが歴としたプログラミング言語なので演算とCALCULATEを使えばもちろん計算もできるよ!Lets貨幣経済!!
ゴリラ人狼のURLも貼っておきます。
おまけ
whitespaceはスペースとタブ文字、改行の三種類の組み合わせなので
昇拳昇昇 昇昇昇竜昇竜昇 昇昇昇 昇昇昇拳竜拳昇昇昇昇竜 昇昇昇 昇昇昇拳竜竜昇昇昇昇拳竜竜昇拳昇昇昇拳竜竜 昇昇竜昇昇昇拳昇ー昇昇昇昇昇竜昇拳昇昇竜昇昇ー竜昇昇 昇 昇 竜昇拳竜竜竜昇竜昇昇昇拳竜昇竜昇昇 竜 昇昇 昇 竜昇昇昇拳昇昇昇昇昇昇拳竜昇昇ー昇竜昇昇竜昇昇 昇昇竜竜竜昇竜昇昇昇竜拳昇竜昇昇 昇
こんな感じで昇竜拳言語とかも作れたりします。