ジョボヌーレーボー(自作言語で)


5 @ ary
"ボ" 0 @s ary
"ジョ" 1 @s ary
"レ" 2 @s ary
"ヌ" 3 @s ary
"ボ" 4 @s ary

4 $ i {
    { 5 '' $ r r @g ary _ 0 = ( ` } )
    0 r @s ary i ! ( [ ) i 1 - $ i
} ]

.s .s .s "ー" .s .s "ー" .s .s "ー" .s

最後怒涛の.sがなんかかわいいですね。

一応解説

一番重要なのは他言語で言うshuffleだと思います。shuffleは配列の中身をごちゃまぜにする関数なのですが、そんなものがnouzenにあるわけがないので、そこらへんの実装に時間を使いました。

4 $ i {                                 # 4が0になるまで(つまり5回ループ)
    {                                   #  内部ループ上端
        5 '' $ r                        #   5未満の乱数を生成し変数rに代入
        r @g ary                        #   変数rを配列aryの添え字としてアクセス
        _ 0 =                           #   その文字列アドレスが空(すでに取得済み)だったら
    ( ` } )                             #  内部ループ上端へジャンプ
    0 r @s ary                          #  aryのrを空にする
    i ! ( [ ) i 1 - $ i                 # ループカウンタを進める
} ]

上を見てもピンと来るかどうか自信が無いので簡潔に申し上げますと、乱数で文字列から取得しスタックへpush、一度取得したものは0で埋めてアクセスしたことを示すマーカーとして扱う、もし乱数で取得したものが0、つまり取得済みだった時にはもう一度乱数を生成して取得をし直す、それを5回ループすることでスタック上にばらけた文字アドレスが格納される、という感じです。

元ネタ

@mattn 様のヌジョレーボーボー です。
コメントまで楽しい記事なので是非ご一読ください。

nouzenってなんだよ

という方は私の過去の記事 スタック指向なgoto言語 nouzen を作ってみた をどうぞ