Hos' Xmas Contest 2010 B "Simple Parsing"

問題:http://judge.imoz.jp/page.php?page=view_problem&pid=62&cid=12

昼の部に参加.

いろいろとひどいコード.

import java.util.Scanner;

// B "Simple Parsing"
public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		for (String line; !(line = s.next()).equals("#");) {
			System.out.println(parse(line) == 0 ? "EVEN" : "ODD");
		}
	}

	static int parse(String line) {
		int r = 0, p = 0;
		char c = line.charAt(0);
		if (c == '-') {

		} else if (c == '(') {
			int cnt = 1;
			for (++p; cnt > 0; ++p) {
				char cc = line.charAt(p);
				if (cc == '(') {
					++cnt;
				} else if (cc == ')') {
					--cnt;
				}
			}
			r = parse(line.substring(1, p - 1));
		} else {
			while (p < line.length() && line.charAt(p) != '-'
					&& line.charAt(p) != '+') {
				++p;
			}
			r = (line.charAt(p - 1) - '0') % 2;
		}

		if (p < line.length()) {
			r += parse(line.substring(p + 1));
		}
		return r % 2 == 0 ? 0 : 1;
	}
}

※追記
解説見て書き直した.
数字だけ取り出して奇数の数の奇遇で判定.

import java.util.*;

// B "Simple Parsning"
public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		for (String line; !(line = s.next()).equals("#");) {
			boolean b = true;
			for (Scanner t = new Scanner(line).useDelimiter("\\D+"); t
					.hasNext();) {
				char[] i = t.next().toCharArray();
				if ((i[i.length - 1] - '0') % 2 > 0) {
					b = !b;
				}
			}
			System.out.println(b ? "EVEN" : "ODD");
		}
	}
}