Skip to content

Instantly share code, notes, and snippets.

@desrtfx
Last active December 12, 2015 14:00
Show Gist options
  • Save desrtfx/604b781ddc9cfcf8afe0 to your computer and use it in GitHub Desktop.
Save desrtfx/604b781ddc9cfcf8afe0 to your computer and use it in GitHub Desktop.
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import com.google.gson.Gson;
public class Day12 {
static final Pattern DIGITS = Pattern.compile("[\\[\\{\\]\\}:\\\"a-zA-Z,\\s]"); // original ("-?\\d+");
static final String FILENAME = "D:\\_JavaProjects\\AdventOfCodeDay12\\InputDay12.txt";
public static void main(String[] args) {
test1();
test2();
test3();
test4();
test5();
test6();
solve1();
solve2();
}
private static void test1() {
String input = "[1,2,3]";
int sum = sumNumbers(input);
output(12,-1,String.valueOf(sum));
}
private static void test2() {
String input = "{\"a\":2,\"b\":4}";
int sum = sumNumbers(input);
output(12,-2,String.valueOf(sum));
}
private static void test3() {
String input = "[[[3]]]";
int sum = sumNumbers(input);
output(12,-3,String.valueOf(sum));
}
private static void test4() {
String input = "{\"a\":{\"b\":4},\"c\":-1}";
int sum = sumNumbers(input);
output(12,-4,String.valueOf(sum));
}
private static void test5() {
String input = "{\"a\":[-1,1]}";
int sum = sumNumbers(input);
output(12,-5,String.valueOf(sum));
}
private static void test6() {
String input = "[-1,{\"a\":1}]";
int sum = sumNumbers(input);
output(12,-6,String.valueOf(sum));
}
private static void solve1() {
String input = FileIO.getFileAsString(FILENAME);
int sum = sumNumbers(input);
output(12,1,String.valueOf(sum));
}
private static void solve2() {
String input = FileIO.getFileAsString(FILENAME);
Object data = getJsonObject(input);
List filtered = filter(data);
String filteredJson = formJson(filtered);
int sum = sumNumbers(filteredJson);
output(12,2,String.valueOf(sum));
}
private static int sumNumbers(String input) {
return DIGITS.splitAsStream(input)
.filter(s -> !s.isEmpty())
.mapToInt(s -> (int)Double.parseDouble(s))
.sum();
}
private static void output(int day, int part, String result) {
System.out.printf("Day %d:\tPart: %d\tResult: %s\n",day,part,result);
}
private static Object getJsonObject(String input) {
return new Gson().fromJson(input, Object.class);
}
private static String formJson(List data) {
Gson gson = new Gson();
StringBuilder sb = new StringBuilder();
gson.toJson(data, sb);
return sb.toString();
}
private static List filter(Object data) {
List<Object> tmp = new ArrayList<>();
if (data instanceof Map) {
Collection values = ((Map)data).values();
if (values.contains("red")) {
// ignore object
} else {
for(Object o : values) {
tmp.addAll(filter(o)); // add all elements recursively
}
}
} else if (data instanceof List) {
for(Object o: (List)data) {
tmp.add(filter(o));
}
} else {
tmp.add(data);
}
return tmp;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment