JavaScriptで陣取りゲーム

このまえ書いた結城さんの陣取りゲームの問題のトーラス版が全然分からないので、なんとなく JavaScript で作ってみました。

ちなみに Firefox 推奨です。 IEだとうまく動きません。
ところで Google Page Creator を初めて使ってみました。 JavaScript も使えるのですけど、自前のスタイルシートは使えないみたいですね。 JavaScript 使って何とかならないかな。

Firefoxのメニューをアイコン表示するユーザースタイルシート

これいいですね! こんなのが欲しかった。
メニューをコンパクトにするといえばCompact Menuですが、メニューを開くのに1クッション入ってしまうのが個人的にはマイナスです。 その代わりだいぶコンパクトになりますが。
他にはShortmenuっていうのもあります。 アイコンよりテキスト表示が良いって人はこちらかな。 ユーザースタイルで間隔を詰めればかなりコンパクトになる気がします。

追記 2006-10-12 11:30

友達に言われて気づいたのですが、デフォルトではメニューの横には何もないので、その状態でメニューをコンパクトにしても余りうれしくないですね。 私の場合、メニューの横にロケーションバーを置いているのでメニューが長いとURLが見づらくなってしまいます。 そういう人ならメニューを小さくする価値はあるのではないかと。 ちなみに私のFirefoxツールバーはこんな感じ。

スマートキーワードを使っているので検索窓は必要なしです。

結城浩の日記 - ルソー展と陣取りゲーム・クイズより

前提

将棋盤(9×9のマス目を持つ盤)を使って二人が陣取りゲームをする。 自分の番になったとき、 空いているマス目(自分の陣地でも相手の陣地でもないマス目)の中からいくつか選んで「自分陣地」にすることができる。 一度に自分の陣地にできるのは、 「1個」か「隣り合った2個」のいずれかである。 隣り合った2個は縦の2個でも横の2個でもよい。 パスはできない。 自分の番になったとき空いているマス目がひとつもなかったら負け。

問題

この陣取りゲームは、以下のうちどれか。

(A)先手必勝 (B)先手必敗 (C)いずれでもない

9×9の場合も一般のm×nの場合も、いわゆる「真似碁」みたく考えればすぐ分かるのですけど、トーラスの場合とか言われると…。 最初、トーラスの場合も同じじゃないかと思ったのですが、3×3とかでやってみるとその考え方じゃ出来ないっぽいです。
というわけでトーラスは置いといて(まあ、つまり逃げたわけです)、n次元のマス(セル?)の場合で一度に置けるのが1〜連続したk個までの場合を考えました。これも同じ考えで、真ん中になんか置ければ先手必勝なんじゃないかと。
つまり全体をa1×a2×...×anとして、bi={aiが奇数なら1,偶数なら2}とおくと、B=b1×b2×...×bnがB≤kなら先手必勝,B>kなら後手必勝。なんか激しく見落としてる気がしないでもないですが。よく考えたらやっぱり違います。
トーラスはあとで考えよう。その前に円柱の場合かな。メビウスの帯とかクラインの壷とか射影平面とかはどうなるかも気になります。

Stylishの更新機能

更新してなくて気づかなかったのですが、 Stylish のバージョンが 0.4 になってユーザースタイルの更新機能が付いたんですね。 ウェブサイト用のユーザースタイルって、そのサイトの構造が変わると途端に使えなくなったりするので、更新機能はありがたいです。 製作者が対応してくれれば、こっちは更新するだけで良いと。
そこらへんの事情は Greasemonkey も同じなので、こちらにも更新機能が付いて欲しいところです。 Stylish で出来るなら Greasemonkey でも出来そうなものですけど。
せっかくなので一昨日のを userstyles.org に登録してみました。

スタイル名が50文字までしか書けないっぽくて苦労しました(笑

Googleカレンダーの土日の色 その2

margin2006-10-06

なるほど! こっちのほうがスマートですね。
これに触発されて、CSS3 のセレクタを使えばもっと短く出来そうだと思ってやってみたら、かなり変態的なことになってしまいました(笑

@-moz-document url-prefix("http://www.google.com/calendar/"), 
               url-prefix("https://www.google.com/calendar/") {
  #decowner > [style*="left: 7"] > .dayOfMonth {
    color: #00F !important;
    background-color: #CCF !important;
  }
  #decowner > [style*="left: 7"] > .dayNotInMonth {
    color: #88F !important;
    background-color: #DDF !important;
  }
  #decowner > [style*="left: 7"] > .currentDay {
    background-color: #99F !important;
  }
  #decowner > [style*="left: 8"] > .dayOfMonth {  
    color: #F00 !important;
    background-color: #FCC !important;
  }
  #decowner > [style*="left: 8"] > .dayNotInMonth {
    color: #F88 !important;
    background-color: #FDD !important;
  }
  #decowner > [style*="left: 8"] > .currentDay {
    background-color: #F99 !important;
  }
  [id^="dp_0_day_"][id$="_5"] {
    color: #22F;
  }
  [id^="dp_0_day_"][id$="_6"] {
    color: #F22;
  }
}

当日の背景は濃く、その月以外の日の背景は薄くしてあります。 あと左の小さいカレンダーの土日の色も変えてあります。
短くなったのはいいのですが、こういう指定の仕方をすると Google Calendar 側で変更があったときに動かなくなったりするので注意です。
日曜始まり用のも書いておきます。

@-moz-document url-prefix("http://www.google.com/calendar/"), 
               url-prefix("https://www.google.com/calendar/") {
  #decowner > [style*="left: 8"] > .dayOfMonth {
    color: #00F !important;
    background-color: #CCF !important;
  }
  #decowner > [style*="left: 8"] > .dayNotInMonth {
    color: #88F !important;
    background-color: #DDF !important;
  }
  #decowner > [style*="left: 8"] > .currentDay {
    background-color: #99F !important;
  }
  #decowner > [style*="left: 0"] > .dayOfMonth {  
    color: #F00 !important;
    background-color: #FCC !important;
  }
  #decowner > [style*="left: 0"] > .dayNotInMonth {
    color: #F88 !important;
    background-color: #FDD !important;
  }
  #decowner > [style*="left: 0"] > .currentDay {
    background-color: #F99 !important;
  }
  [id^="dp_0_day_"][id$="_6"] {
    color: #22F;
  }
  [id^="dp_0_day_"][id$="_0"] {
    color: #F22;
  }
}

追記

当日が土日だと予定の所にも色が付いてしまっていたのを修正しました。

追記

当日の色を少し濃くしてみました。

追記

Stylish を使っている人は以下から簡単に導入できます。

Googleカレンダーの土・日の日付の背景色を変更してみました

[追記] Googleカレンダーの土日の色 その2 - Marginal Leaves に改良版がありますので、そちらを使ってください。


おお! これはすごい。 カレンダーが断然見やすくなります。 標準で設定できるようにならないかな。
これだとちょっと隙間が開いちゃうので、takayama さんのを参考に自分でもいじってみました。

@-moz-document url-prefix("https://www.google.com/calendar/") {
  #dh5,#dh12,#dh19,#dh26,#dh33,#dh40,#dh47,#dh54 {
    color: #00F;
    background-color: #CCF;
    display: block;
    padding: 0 0.4em 2px 0;
    margin-bottom: -2em;
  }
  .dayNotInMonth > #dh5, .dayNotInMonth > #dh12,
  .dayNotInMonth > #dh19, .dayNotInMonth > #dh26,
  .dayNotInMonth > #dh33, .dayNotInMonth > #dh40,
  .dayNotInMonth > #dh47, .dayNotInMonth > #dh54 {
    color: #88F;
    background-color: #DDF;
  }
  #dh6,#dh13,#dh20,#dh27,#dh34,#dh41,#dh48,#dh55 {
    color: #F00;
    background-color: #FCC;
    display: block;
    padding: 0 0.4em 2px 0;
    margin-bottom: -2em;
  }
  .dayNotInMonth > #dh6, .dayNotInMonth > #dh13,
  .dayNotInMonth > #dh20, .dayNotInMonth > #dh27,
  .dayNotInMonth > #dh34, .dayNotInMonth > #dh41,
  .dayNotInMonth > #dh48, .dayNotInMonth > #dh55 {
    color: #F88;
    background-color: #FDD;
  }
}

ついでにその月でない日は色を薄くしてみたり。
margin-bottom: -2em が気持ち悪いなぁ。

追記

上のは月曜始まり用のものです。 日曜始まり用のスタイルは kengo さんや qptaro さんが作ってくれています。

あと、SSL通信なしで使っている人は url-prefix のところを http:// で始めるように変えないと駄目かと思います。