超次元プログラミング言語Befungeで縦横無尽にズンドコキヨシを書いた

# 概要
[Befunge](https://github.com/catseye/Befunge-93)のご機嫌な[オンラインプレイグラウンド](https://www.bedroomlan.org/tools/befunge-playground/#prog=hello,mode=edit)を見つけたので、ズンドコキヨシを書いた。(3年前)

**参考:** [ズンドコキヨシまとめ](https://qiita.com/shunsugai@github/items/971a15461de29563bf90)

**ズンドコキヨシとは**
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">March 9, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# Befunge
[Befunge](https://github.com/catseye/Befunge-93)は1993年登場の難解言語の一種であり、プログラムのコードの読み取り方向を前後左右に自由に切り替えられる。Befunge 93の仕様では、 コードサイズに**80桁25行**という制限がある。あとあと、その制限が取っ払われた仕様が出て、あれよあれよと現在の最新仕様はBefunge 98らしい。二次元よりも高次元なプログラムがしたければ、Befunge 98のインタープリターを作るとよかろう。

ただし、私は思考の次元が低すぎてそんな3次元や4次元プログラム書けません。超次元の思索のためにもっと瞳が必要な。今回の例ではBefunge 93からBefunge 97の間の仕様で、ズンドコキヨシを書く。

<font color="#bbb">*Grant us eyes,grant us eyes.*</font>
 
Befungeってどんな言語？と知りたければ、以下の2ページが参考になる。

* [Esolang(難解言語WIKI)](https://esolangs.org/wiki/Befunge)
* [日本語版Wikipedia](https://ja.wikipedia.org/wiki/Befunge)

あるいは、[aminylarginyl](https://www.youtube.com/channel/UCmInVQ7jXKcv-eH7hCpdtfQ)氏による[こちらの動画](https://www.youtube.com/watch?v=mdde_NekjSc0が)大変参考になる。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">難解プログラミング言語 Befunge 実行の様子 <a href="https://t.co/b9VcbyRTWf">https://t.co/b9VcbyRTWf</a> <a href="https://twitter.com/YouTube?ref_src=twsrc%5Etfw">@YouTube</a>さんから</p>&mdash; マンハッタン・クラム・チャウダー (@NanimonoKashira) <a href="https://twitter.com/NanimonoKashira/status/1149574775301259265?ref_src=twsrc%5Etfw">2019年7月12日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<font color="#bbb">*Qiitaは直にYouTube埋め込めんの？*</font>


# どうやって実行すればいいの？

大変よくできた[オンラインプレイグラウンド](https://www.bedroomlan.org/tools/befunge-playground/#prog=hello,mode=edit)があり、Befungeの実行や、ステップバイステップの実行ができる。

<img width="1144" alt="スクリーンショット 2019-07-12 13.56.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/b9930a70-b709-a145-5118-d884967f3ac9.png">


ここのインタープリターは、Befunge 93からBefunge 97の間の仕様であり、以下の機能と制限がある。

> * The program space is the Befunge 93 80×25 torus. There's no Lahey space at the moment.
> * Only a single PC (thread) is supported.
> * Befunge 97 literals are supported: 0–9 and a–f.
> * Character quoting (').
> * No flying PCs.
> * No handprints or fingerprints.
> * Just a single stack.

# ズンドコキヨシ

## 1つめ：すごく単純なズンドコキヨシ

「ズン→ズン→ズン→ズン→ドコ」と出力してから「キヨシ」を出力すれば良い。つまり、道を違えれば、1からやり直しにすれば良い。

Befungeではループをしたければ、閉路のコードを書けばいいのだ。

```
>|<<<<<<<<<<<<
>?>"こど",,52*,^
>v^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>>"んず",,52*,_?>"んず",,52*,_?"んず",,52*,_?>"んず",,52*,_?>"こど",,52*,"!シ・ヨ・キ">:#,_@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

`52*,`は、`5かける2`で`10`を得て、`10`を文字として出力する。つまり改行を出すためのコード。


###実行結果

日本語は等幅ではなく、そのまま実行した場合矢印の向きが変に見えるので、例の中では「ズンドコ」を「zndk」と表している。

![captured-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/242172ae-ce4d-94d6-fc30-44e4ddb62463.gif)


## 2つめ：頑張ったズンドコキヨシ

47文字でズンドコ！

```
0v#"キ・ヨ・シ！"<@,,,,,,$
>?>"んず",,1+
^>"こど",,3`#^_0
```

![captured (1)-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/4c92695e-aaca-a938-56ab-f1f4a72eab73.gif)

# まとめ
* Befungeは上位者の言語