純粋なsedのチェス

Linuxおよび他の多くのシステムには、コマンドラインユーティリティsed (「sed」)があります。これは、単純なコマンドを使用して入力するテキストを変換する単純なエディターです。



主に、 bashスクリプトのあらゆる種類の小さなニーズに使用されます。ある行を別の行に置き換えたり、何かを削除したりするためです。 より馴染みのある言語に関しては、2つの文字列変数が「灰色」で利用可能です。1つは、最初のラベル、ラベル遷移コマンド、およびコマンドのグループ化からのデータの交換、チェック、置換、さらにあまり有用でないディレクティブ。



ここで、この不名誉の上に、コンピューターで遊ぶことができるように、チェスを書くことにしました。



一般に、これは「灰色」の最初のゲームではありません。たとえば、 テトリスアルカノイドがありますが、私のゲームはサイズと知性においてそれらを上回っているようです。



私は長い間「sed」をもっとよく知りたいと思っていましたが、どういうわけか理由がなかったので、スクリプトをある行から別の行に置き換えるよりも重要なことを書くことにしました。 残念ながら、「グレー」に関する既存のすべてのゲームの欠点は、不快な機能が1つあるため、かなりのスクリプティング(アイデアの純度を損なう)が必要なことです。「グレー」は、何もする前にEnterキーが押されるのを待ちます。



したがって、何を書くかを考えたとき、チェスを選択しました。チェスは、各チームが入力を確認する必要があるターンベースのゲームです。 正直なところ、自分が何をする運命にあるのか想像もしていませんでした。 その結果(そして、私はゲームを2週間ほど書きましたが、大きな休憩がありました)、私はこのレッスンを数回やめようとしました。



最も難しかったのは数字です。「グレー」に算術がない場合、どのように減算、加算、比較するのですか? たとえば、「111 :: 11」は302(数は単位の数でエンコードされ、数十はコロンで区切られます)を意味します。これらの数に関するすべての数学は、一連の正規表現とそれらの間の遷移を使用して行われます。



減算ロジックのスライスを次に示します(関数全体で59行かかります)。







すぐに、プリミティブをある種の高レベルのコマンドに結合し、そのようなコマンドのスタックをデータの隣に保存することを思いつきました(他に行くところはありません)。 途中で調べたところ、コミットを見ると、後でコード全体に広がったいくつかの発見を見ることができます。



私はすぐに警告する必要があります-ゲームは著しく遅いです、私のMacBook Pro(2.9 GHz、Intel Ay7)では、e2 e4への復帰移動は6.3秒と計算されます。 しかし、チェスは忍耐を教えているので、これが邪魔になるべきではありません。



# ,           printf "\ne2 e4\nq\n" | time sed -f chess.sed
      
      





自分のために設定した制限のうち、 GNU sed拡張機能と拡張正規表現を使用しないでください。



それで何が起こったのですか?



ボード上のピースの存在の位置評価と評価はプログラムされています(評価アルゴリズムは、Evgeny Nikolayevich Kornilov著「プログラミングチェスおよびその他の論理ゲーム」から取得されました)クイーンに変換。



行き詰まりの検出はなく(手は届きませんが、難しいことではありません)、実際、ゲームは14世紀のルールに従って行われます-キャスリングと通路の取り込みはなく、シャーからの出発は原始的です。 また、私は人の進歩の正確さを制御しなかったので、無防備な機械を犠牲にして自分自身を主張したい場合は、すぐに王を切り倒すことができます。



Githubプロジェクトからゲームをダウンロードできます。プレイ方法についての簡単な説明もあります。 バグについては、それらが存在する場合、コメントまたはPMで書き込みますが、それらを修正するとき、私は知りません、灰色の1000行半後、休憩が必要です。



All Articles