Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package adventofcode;
- import adventofcode.utils.Utils;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- public class Day8 {
- private static final int WIDTH = 25;
- private static final int HEIGHT = 6;
- public static void solve() {
- String input = Utils.getInput(8).get(0);
- int imageSize = WIDTH * HEIGHT;
- int layers = input.length() / imageSize;
- List<char[]> data = new ArrayList<>(layers);
- for(int c = 0 ; c < input.length() ; c += imageSize) {
- data.add(input.substring(c, c + imageSize).toCharArray());
- }
- System.out.println(part1(data));
- System.out.println(part2(data, imageSize, layers));
- }
- private static long part1(List<char[]> data) {
- char[] leastZeroes = data.stream()
- .min(Comparator.comparingInt(e -> frequency(e, '0'))).get();
- return frequency(leastZeroes, '1') * frequency(leastZeroes, '2');
- }
- private static String part2(List<char[]> data, int imageSize, int layers) {
- StringBuilder finalImage = new StringBuilder();
- for(int i = 0 ; i < imageSize ; i++) {
- for(int layer = 0 ; layer < layers ; layer++) {
- int colour = data.get(layer)[i];
- if(colour == '2') {
- continue;
- }
- finalImage.append(colour == '0' ? " " : "X");
- break;
- }
- if(i % WIDTH == WIDTH - 1) {
- finalImage.append("\n");
- }
- }
- return finalImage.toString();
- }
- private static int frequency(char[] array, char number) {
- int n = 0;
- for(char c : array) {
- if(c == number) {
- n++;
- }
- }
- return n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement