TopCoder Marathon Match 34 用の起動関数

ちょっと前にTopCoder(http://www.topcoder.com/) に登録して、SRMの過去問題を解いたりしてたのですが、Marathon Match が始まったので参加してみました。問題はこちら http://www.topcoder.com/longcontest/?module=ViewProblemStatement&compid=7695&rd=12200 。ただ、ログインしていないと見れないようなので、興味があればregistしてみてください。簡単に言うと、昔あった土管を繋いで左側から右側へ水を流すゲームみたいな感じですが、既に配置されたパイプを回転させて繋いでいきます。動かす回数をいかに少なくうまく繋ぐかを競うようです。

前置きはそれくらいで、この問題用に動作結果をVisualで見れるToolが http://www.topcoder.com/contest/problem/CircuitConstruction/vis.html にて公開されています。使い方にそって動かせば、便利にテストができます。テスト時は、標準エラーに出力するとメッセージウィンドウで見れるのでそこを活用できます。
しかし、これを使うためにコンテストと関係ないコードが必要になります。その必要になる部分だけここで公開しちゃいます。Javaで参加される方は、良かったら使ってください。これって問題ないですよね???

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class CircuitConstruction {
	private int w_;
	private int h_;

	int init(int W, int H, String C) {
		w_ = W;
		h_ = H;
		return 0;
	}

	int[] rotateSquare(int[] board) {
		// 適当実装
		Random random = new Random();
		return new int[] {random.nextInt(h_), random.nextInt(w_), random.nextBoolean()? 1: -1};
	}



	private static int nextInt() throws IOException {
		return Integer.parseInt(readToken());
	}
	private static String nextString() throws IOException {
		return readToken();
	}
	private static String readToken() throws IOException {
		StringBuilder builder = new StringBuilder();
		while (true) {
			int i = System.in.read();
			if (i < 0) throw new IllegalStateException();
			char c = (char) i;
			if (c <= ' ') {
				if (builder.length() == 0) continue;
				break;
			}
			builder.append(c);
		}
		return builder.toString();
	}

	public static void main(String[] args) {
		// for visualization tool
		try {
			CircuitConstruction cc = new CircuitConstruction();
			int W = nextInt();
			int H = nextInt();
			String C = nextString();
			cc.init(W, H, C);
			while (true) {
				int[] board = new int[W * H];
				for (int i = 0; i < W * H; i++) {
					board[i] = nextInt();
				}
				int[] ret = cc.rotateSquare(board);
				System.out.println(ret[0] + " " + ret[1] + " " + ret[2]);
				System.out.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}