質問やフィードバックがありましたら、フォームからお願いします
本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください
もうすぐ10日目に突入します!少し休憩して、プログラミングやコンピュータに関連するいくつかのゲームを紹介します。今日ご紹介するゲームは A=B
というもので、Steam で購入可能で、Windows と Mac の両方でダウンロードして遊べます。
A=B
は、ゲームの主人公が設計したプログラミング言語で、唯一の文法が A=B です。この限られた文法を使って、さまざまな謎を解いていきます。問題を解くごとに、文法もどんどん豊かになっていきます。
まずは、Steam のレビューを見てみましょう。
ゲーム内容
ゲームの中では、さまざまな謎に直面しますが、すべて文字列処理に関連しています。その中で A=B
の文法は、文字列 A を B に置き換えることができます。たとえば、プログラムが aaa=bbb
で、文字列が aaabbb
の場合、結果は bbbbbb
になります(aaa を bbb に置き換えます)。ゲーム内の文法に関する説明は非常に簡潔で、PDF のリンクが直接提供され、ストーリーが進むにつれて文法も増えていきます。
ここで、ゲームのいくつかの問題を紹介します:
1. ソート abc
与えられた文字列は、abc の3つの文字だけから成り、最大長は7です。a=b
の文法のみを使って、どう書けば良いでしょうか?
この問題の答えは非常に簡単で、3つの変化を列挙すれば良いのです:
ba=ab
ca=ac
cb=bc
もし入力が bcba
の場合:
ba
にマッチし、ba
をab
に置き換え、文字列はbcab
になります。ca
にマッチし、ca
をac
に置き換え、文字列はbacb
になります。ba
にマッチし、ba
をab
に置き換え、文字列はabcb
になります。cb
にマッチし、cb
をbc
に置き換え、文字列はabbc
になります。
プログラミング言語の観点から見ると、通常は単純に for ループを書いたり関数を呼び出したりすれば解決できる問題ですが、今は少し想像力を働かせる必要があります。
2. 回文
この章では、いくつかの新しい文法が使用できます:
y=(return)false
y
にマッチした場合、false
を返します。
(start)a=(end)b
最初の文字列 a
にマッチした場合、最後の文字を b
に置き換えます。この接頭辞が接尾辞の特性を変えるのは直感的ではないように見えますが、このゲームのデザインは自然にこの文法を使えるようにしてくれます。
問題は、文字列が回文かどうかを判断することで、入力も同じく abc の3つの文字だけから成ります。
axAy=
bxBy=
cxCy=
(start)a=(end)xAy
(start)b=(end)xBy
(start)c=(end)xCy
yx=(return)false
=(return)true
一見すると難解に見えますが、少しコードを見れば核心的な概念を理解できるでしょう。
まず、a, b, c で始まる文字列にマッチした場合、末尾を xAy の形式に変換します。この辺りの xy を他の文字列に変えても良く、既に処理済みであることを示します。もし入力文字列が abba であれば、第一段階の処理後、文字列は bbaxAy になります。
この時点で axAy= を実行すれば、一組の回文を消去できます。理想的な状況ではすべての回文が消去され、残った場合は yx という状況になり、マッチしなかった文字列が存在することを示します。
感想
このゲームを遊ぶのに、特にプログラミング言語を知っている必要はありませんが、基本的な問題解決の概念がなければ、直接遊ぶのは難しいかもしれません。ソフトウェアエンジニアにとって、このゲームをプレイすることは、文法が貧弱な言語で問題を解決するようなものです。
しかし、これは良いことだと思います。私たちはすでにプログラミング言語の概念に慣れており、ループや関数を書くことに慣れているので、時々異なる視点で考えることで、より多くの楽しみを得ることができます。
上記の2つの例では、プログラミング言語での問題解決は数分で済むものですが、A=B の文法を使う場合は、考える時間が必要で、全く異なる思考を展開して目的を達成することになります。
この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨
☕Buy me a coffee