シンプルで難解なプログラミング言語に触れてみた

2024-12-23

はじめに

jackのみなさん日々のプログラミング,お疲れ様です!今回記事を書きました,ピスラです. 今年からプログラミングを学び始めた1年生は複雑な命令の数々に四苦八苦した時期もあったでしょう. そんな中で私は皆さんにシンプルな言語をおすすめしようということで今回はA=Bというゲームを通して1つのプログラミング言語をご紹介します.このゲームは独自のプログラミング言語を使って問題を解いていくゲームです.

これが実際のゲーム画面です....色が乏しい?頭の中で虹色にでも着色しましょう. このゲームに出てくるプログラミング言語はその名の通り,A=B.基本的なルールは以下の通り.

命令
string1=string2
# 文字列の中で一番左の string1 を見つけて、それを string2 に置き換える。
string1=(return)string2
# string1 にマッチした場合、プログラムを直ちに終了し、string2 を出力文字列として使用する。

実行フロー
1   入力文字列の読み込み
2   実行可能な最初の命令を上から下に向かって探していく
3.1 実行可能な命令がある場合、現在の文字列を置き換え 2 に戻る 
3.2 実行可能な命令がない場合、実行を終了して現在の文字列を出力する

なんてシンプル!すぐに覚えられそうですね (^ ^ ) ...ゲームが進むともうちょっとルールは増えていきますが... ここからはゲーム中の問題をいくつか見てみましょう.

問題例 1 AをBに

入力:
a,b,c,からなる文字列
出力:
すべてのaをbに置き換えた文字列
入出力例:
Input:  abc
Output: bbc
Input:  aabb
Output: bbbb

最初の問題はa,b,cからなる文字列のaをbに置き換えるだけですね. 例えば abc なら bbc に書き換えて, aabb なら bbbb に書き換えます. 普段,難しいプログラミング言語を扱っている方なら朝飯前ですね.

解答

a = b

A=Bはわざわざループ文を書く必要がないので答えはこの1文でよさそうですね.

全てのテストケースで受理されました.やったね. ネタバレは控えたいのであと2問は解答 (略)でいきましょう.せっかくなのでご自身で考えてみてください.

問題例 2 AAA

入力
a,b,c,からなる文字列
出力
入力にaが3つ以上含まれていれば「true」を出力する.そうでなければ「false」を出力する
入出力例:
Input:  aaa
Output: true
Input:  aaaa
Output: true
Input:  abcabc
Output: false
Input:  acabac
Output: true

1問目から難易度をグッと上がりましたね.まぁゲーム中の問題をいくつか飛ばしているのでね... aaaやaaabといった入力ならaaa=(return)trueで解決しそうですね.acabacといった入力の場合にはどうすればよいのでしょうか?ヒントはソートです.

解答(略)

問題例 3 ただひとつ

入力
a,b,c,からなる文字列
出力
両隣の文字と異なる文字が1文字だけの場合に「true」を出力する。そうでなけれは「false」を出力する。例えば、「babbcc」では、最初の a と最初の b が両隣の文字と異なるので「false」を出力する。
入出力例:
Input:  aabcc
Output: true
Input:  abbcc
Output: true
Input:  babbcc
Output: false

個人的な序盤の壁.出力に書かれた通りにコードを書いたら数十分,数十行かかりました... ネットで調べるとわずか数行のエレガントな解答例があって悔しかったです.みなさんもぜひエレガントな解法を考えてみてください. 解答 (略)

終わりに

このゲームを解いていくと「普段の言語ならこれくらいすぐなのにな...」と思ってしまう場面が多々あり,普段の言語のありがたみがよくわかります. 現代の自然言語の多くは,より単純な過去の言語形態から進化してきました.この複雑化の背景には新しい概念を表現するための語彙の増加だけでなく,より効率的なコミュニケーションへの要求があったと考えられています.言語構造を複雑化することで,より少ない言葉でより多くの情報を伝達できるようになったのです. この『情報の圧縮と伝達の効率化』という進化の方向性は,実は自然言語とプログラミング言語に共通する特徴かもしれません. その点でいえば,プログラミング言語も自然言語も変わらないのかもしれませんね.

ということでゲーム紹介という軽い内容では代表に怒られると思ったので,怒られないように少し真面目な話をしてみました.ゆるしてね♪ 代表♪ …代表のお許しがきっと出たことですし今回の記事をここらへんで終わりにしたいと思います.

ちなみにゲームを進めていくと理系ホイホイな気になる記述を目にすることができます.

作中にはチューリングの完全性の証明も載っていますがそれを解説しようと思うとクリスマスが来てしまうので今回は割愛します.決して解説が面倒くさいとかソンナンジャナイヨ...

「ほんとにチューリング完全なの?」「A=Bってほんまにプログラミング言語なん?」と思った人はぜひ,本作をサンタさんにお願いしましょう.

それではみなさん良いクリスマスを!

おすすめ記事