!636 !629 // standard functions main { psvm { String src = takeInput(args, null); List cnc = parseCNC(src); for (int i = 1; i+2 < cnc.size(); i += 2) { if (cnc.get(i).equals("class") && cnc.get(i+2).equals("main")) { int j = i; while (j < cnc.size() && !cnc.get(j).equals("{")) j += 2; int k = findEndOfBlock(cnc, j); printExcerpt(cnc, i, k); break; } } } static int findEndOfBlock(List cnc, int i) { int j = i+2, level = 1; while (j < cnc.size()) { if (cnc.get(j).equals("{")) ++level; else if (cnc.get(j).equals("}")) --level; if (level == 0) return j+1; } return cnc.size(); } static void printExcerpt(List cnc, int i, int j) { StringBuilder out = new StringBuilder(); for (; i < j; i++) out.append(cnc.get(i)); System.out.println(out.toString()); } static String takeInput(String[] args, String def) tex { return args.length != 0 ? loadSnippet(args[0]) : loadTextFile("input/input.txt", def); } static List parseCNC(String src) { List list = new ArrayList(); for (String s : toLines(src)) list.add(unquote(s)); return list; } }