藤井四冠誕生

 久しぶりに将棋です。藤井三冠が4連勝で竜王を奪取し、史上最年少の四冠王となりました。
 今後の将棋界の流れを決める大一番ということで、今日は一日何もせずAbemaの中継を眺めておりました;-o-)難解な中盤を抜け出した藤井三冠がいつものように押し切るかと思ったところ、8七飛車成りと寄せに行ったあたりで豊島竜王にチャンスが生じたらしく、AIの判断も6:4で竜王寄りとなりました。しかし竜王がその後の反撃を誤り、3五桂が敗着となってあとはあっという間に藤井三冠の勝ちとなりました。
 この辺りは少し驚きましたが、豊島竜王が手にした有利というのは「指せる局面」といったものではなく「完璧に指せないと即終わり」というものだったのでしょう。厳密にいえば藤井三冠に誤算があった、しかし豊島竜王にとっては永遠に続く綱渡りのような局面でしかないため、現実的にどうしようもない…といったところです。こういう展開は朝日杯などで何度も見てきたところですので、今日も結局は藤井三冠が勝つだろうな~と思って見ていました。
 繰り返しになりますが藤井三冠は四冠を達成し、現行タイトルの半数を制するに至りました。思えば棋聖奪取などと喜んでいたのはわずか1年余り前のことです。夢の棋界完全制覇は思ったより早く訪れるような気がしてきました。

ついにPS4/Switchにゼクセクスが移植されるようです

 PS4とSwitchのシューティングゲームの移植ラインアップが、まさに目を見張る内容になっています。
 プラスアルファとかP-47とか、サンダードラゴンあたりを突いてくるあたりが実に素晴らしいのです。さらにアームドFなんかもこたえられません。あの6面の昭和サスペンス歌謡的なBGMこそ至高のゲームサウンドといえるでしょう;-o-)
 あとアケアカではないですがタイガーヘリもいいですね。よく雷電シリーズの戦車がスナイプ戦車などと揶揄されますが、あれをはるかに上回る戦車の鬼畜ぶりを多くの人に味わってもらいたいと思います……というのはともかく、実際のところ10分かそこらで決着がつく展開の早さがいいですし、パターンを覚えるほどにじっくり上達できるスルメゲーなので、時間の足りない現代のゲーマーにこそおススメしたいです。
 そんな中でゼクセクスの移植のお知らせです。ソースは孫引きになりますがこちら。

www.simplelove.co

 そういえば何年か前にスターブレードの記事を書きましたけども、ゼクセクスを初めて見たのも同じ日でした。とにかくビジュアルを前面に押し出した印象を受けたものの、ゲーム性はまあ……といった感じでした。この辺りは誰もが同じように思ったはずです。あと、当日はギャラリーが多すぎるのが気になって1回もプレイせずに帰った記憶があります(最終的には数年後に1コイン1周クリアまでやりました)。
 しかし改めて見直せば、作品としての力の入りようは間違いなく当時の一流です。やや統一感を欠いたとはいえグラフィックは最先端のレベルですし、サウンドに関しても完成度は高いです。完全に私の趣味ですが、リズムにカッチリ合わせたスラップベースのフレーズ、ボスとかカニのBGM、そして一転して爽やかなスタッフロールのあたりは実に最高なのです。おみくじのところもゲームとしてみれば全く謎ですが、よく違和感のないサウンドに仕上げたと思います。
 そして拷問とさえ思えたステージ間デモも、今なら子供の学芸会を見ているような余裕を持って接することができるのです。やはりアケシューたるもの沙羅曼蛇2のように小さくまとまってしまうのではなく(あれも嫌いではないですが)、常にこのぐらい攻めているものであってほしいのです;-o-)
 ここで全く余談ですけども、3面のBGMはマグマックスの地上BGM1のアレンジに違いないのです。なんか一瞬同じように聞こえるだけ、と思われるかもしれませんが、少なくともマグマックスの90年代的解釈に違いないと私は信じています。まあ実際のところは作曲者に伺うしかありませんが;-o-)
 というわけで、ここ数年PC以外に1万円以上の買い物をしてこなかった私ですが、あまりの衝撃にここでついに本体購入に踏み切るかもしれません。その際は改めてご報告したいと思います。

AOJのGRL_1_Aを解く(C)

 どう転んでも例の10万円が我が家には来ないらしいことがわかりました。
 つまり耐乏生活は続くのです。休日といえどもお金のかかる娯楽はもってのほか。昼はCGCの安売りパスタでお腹を膨らませ、午後はお金のかからない趣味……そうプログラミングです。やりましょう、プログラミングやりましょう。

 というわけで、お題は2年ぶりぐらいに訪れましたAOJのGRL_1_A/Single Source Shortest Pathです。
 最短経路探索の基本問題とか紹介されてたんですが、問題文を読んでも全く訳が分かりません;-o-)仕方なくWikipediaのダイクストラ法の項に記されていた疑似コードとやらを翻訳していきます。言語はCです。たまたまCの本が部屋に転がっていたからですけども、何回やってもscanfの&を付け忘れるのでたぶん私には向いてません。
 (苦節2時間経過)ついにそれっぽいコードができました。提示されていた入力例に対し正しい答えが得られましたので勇んで提出してみたものの、残念なことにタイムアウト;-o-)どうもWikipediaの疑似コードにおける集合Q(解が未確定である頂点……たぶん)の管理がアホみたいに重すぎるのが原因のようです。もうこれ以上はわからないので仕方なく他所様が提出されたコードからヒントを探します。
 (さらに10分経過)なんとなくわかりました。面倒なQの管理をバッサリ省いて提出したところ、ついにACが得られました。
 コードがこちら。

#include <stdio.h>

int main(void) {

    int V,E,r,s[500000],t[500000],d[500000];
    int ans[100000];
    int i,flg;

    scanf("%d %d %d", &V, &E, &r);

    for (i=0;i<E;i++) {
        scanf("%d %d %d", &s[i], &t[i], &d[i]);
    }

    for (i=0;i<V;i++) {
        ans[i]=1e9;
    }

    ans[r]=0;

    while (1) {
 
        flg=0;
        for (i=0;i<E;i++) {
            if (ans[s[i]]+d[i]<ans[t[i]]) {
                ans[t[i]]=ans[s[i]]+d[i];
                flg=1;
            }
        }

        if (flg==0) break;
    }

    for (i=0;i<V;i++) {
        if (ans[i]==1e9) {
            puts("INF");
        } else {
            printf("%d\n", ans[i]);
        }
    }

    return 0;
}

 重要なのはWhile文の内部だけで、その前は初期化、その後は回答の表示に過ぎません。
 そのWhile文の要点はこうです。

  1.  すべての辺の情報を読み出し、解(配列ans=各頂点に至る最小コスト)を更新できる頂点については更新する
  2.  1.により解が更新される頂点が1つでも存在していたなら1.に戻る。なかったなら最終解に達しているので終了(回答の表示に移る)

 回答の桁数がintで足りているのかよくわからなかったり気になるところはありますが、ACになったのでもう考える気力が起きません。釣った魚にエサはやらないスタイル;-o-)