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 →

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 →

jdbで実行したら”Invalid JNI signature character ‘;'”と怒られた

GUIのないサーバで、javaのプログラムをデバッグしていた時のおはなし。
Eclipseしか使ったことのない方には馴染みがないと思いますが、javaにはjdbというgdbみたいなデバッガがあります。
jdbは、画面のない環境でも(gdbを使い慣れた人なら)お手軽にデバッグできるツールなのですが、あるプログラムをデバッグしようとしたら

Exception in thread "JDI Internal Event Handler"
java.lang.IllegalArgumentException: Invalid JNI signature character ';'
        at com.sun.tools.jdi.JNITypeParser.nextTypeName(JNITypeParser.java:236)
        at com.sun.tools.jdi.JNITypeParser.typeNameList(JNITypeParser.java:140)

のようなExceptionが出てデバッグができませんでした。
jdbを使わなければ、普通に動きます。jdbでデバッグしようとするとこのようにExceptionが出ます。
ちなみに、Javaのバージョンは、1.6.0_18(OpenJDK)。OSは、Ubuntu 10.04です。
Continue reading →

iアプリでパズルゲーム(を解くプログラム)をつくりました

私は基本的にゲームはしないのですが、最近子供にせがまれて自分のケータイに入っているパズルゲームをしています。
子供はまだ小さいのでパズルを解くことはできないのですが、キャラクターの絵と音楽を楽しんでいるようです。一方、私はもっぱらパズルを解いています。
考えてもうまくすすまないので、プログラムを書いて解いてみました。(ついでに、ゲーム本体もまねっこしてみました。)
Continue reading →

Google DevFest Quizをやってみました。(パッチワーク問題の回答)

すでに旧聞に属するネタですが、話題のGoogle DevFestのQuizの私の回答(に使ったプログラム)を晒してみます。間違いなどのご指摘があればコメントをお願いします。
ちなみに、こちらには他の方の回答(プログラム)がまとめられています。
いろんな解き方がありますね。
Continue reading →