Google DevQuiz 2011 解答例「スライドパズル」編

前回の「一人ゲーム」編に続き、今回のDevQuizの最難関であり、先週末の日本の消費電力量を数パーセント上げたと言われる(?)「スライドパズル」の解答を公開します。

「スライドパズル」のルールは、

  • 幅3~6、高さ3~6マスのボードが与えられる
  • ボードの各マスは、パネル、壁、空白のいずれか
  • パネルは1-9およびA-Z、壁は=、空白は0で示される
  • 空白は上下左右のパネルと入れ替えられるが、壁とは入れ替えられない
  • 空白を上下左右のパネルと入れ替えることをそれぞれ”U”,”D”,”L”,”R”で示す
  • 与えられた初期配置をゴール配置まで導く解を”U”,”D”,”L”,”R”の文字列で解答する
  • ゴール配置は、左上から右下に向かって1→Zのパネルが順番に並び、右下隅が0となる
  • 問題数は5000問で、一問解く毎に0.01点が与えられる
  • 解答に使える”U”,”D”,”L”,”R”それぞれの総数には上限がある

というものです。つまり、様々なサイズの15パズルに”壁”というルールを加えたもの。
Continue reading →

Google DevQuiz 2011 解答例「一人ゲーム」編

IT業界人、特にプログラマーにとっては恒例のイベントとなりつつある、GoogleのDevQuiz。9月12日の午前10時で解答の送信が締め切られ、有志による解答例の公開(いわゆる”晒し”)が始まっています。

ということで、私も自分の解答を”晒し”てみることにします。まずは、分野別クイズの「一人ゲーム」から。
Continue reading →

CIFilterでアニメーション

前回に引き続きMac OS Xの話です。

Mac OS X v10.4で導入された画像処理テクノロジー「Core Image」を使うと、画像に様々なエフェクトを簡単にかけることができます。
前回話に出たアプリケーションでは、「歪みエフェクトフィルタ(Distortion Effect Filter)」の「バンプ(凹凸)歪み」フィルタを使って画像にエフェクトをかけています。
このフィルタの実行をCore Animationを使って、次のようにアニメーション化しています。
Continue reading →

setWantsLayer:YESの後レイヤーのframeが変わる

Mac OS X のCore Animationを使ったアプリケーションを作成したときにつまずいたところをメモしておきます。

CIFilterを使って画像の一部分にフィルタをかけるアニメーションを実行したいのですが、フィルタをかける位置がずれてしまうのです。
Continue reading →

Javaのprotectedの意味

Javaのアクセス修飾子protectedで少しハマったので、調べた内容をメモしておきます。

通常、protectedと指定されたフィールドやメソッドは「同一package内と、そのクラスを継承したサブクラス内からアクセスできる」と説明されます。私自身も同様の理解だったのですが、次のようなケースで予想外の挙動となりました。

クラスBaseとChildが別のpackageに属する場合、

package base;

public class Base {
	
	protected void baseMethod() {
		System.out.println("Base method.");
	}
	
}
package child;

import base.Base;

public class Child extends Base {

	public void childMethod(Base base) {
		base.baseMethod();	// NG
	}
	
}

Childクラスの中でBaseクラスの引数を受け取ってbaseMethod()を呼び出そうとすると、”The method baseMethod() from the type Base is not visible”と怒られてしまうのです。
Continue reading →