Last active
December 12, 2015 14:00
-
-
Save desrtfx/604b781ddc9cfcf8afe0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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