Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.84 KB | None | 0 0
  1. package adventofcode;
  2.  
  3. import adventofcode.utils.Utils;
  4. import java.util.ArrayList;
  5. import java.util.Comparator;
  6. import java.util.List;
  7.  
  8. public class Day8 {
  9.     private static final int WIDTH = 25;
  10.     private static final int HEIGHT = 6;
  11.  
  12.     public static void solve() {
  13.         String input = Utils.getInput(8).get(0);
  14.  
  15.         int imageSize = WIDTH * HEIGHT;
  16.         int layers = input.length() / imageSize;
  17.  
  18.         List<char[]> data = new ArrayList<>(layers);
  19.  
  20.         for(int c = 0 ; c < input.length() ; c += imageSize) {
  21.             data.add(input.substring(c, c + imageSize).toCharArray());
  22.         }
  23.  
  24.         System.out.println(part1(data));
  25.         System.out.println(part2(data, imageSize, layers));
  26.     }
  27.  
  28.     private static long part1(List<char[]> data) {
  29.         char[] leastZeroes = data.stream()
  30.                 .min(Comparator.comparingInt(e -> frequency(e, '0'))).get();
  31.  
  32.         return frequency(leastZeroes, '1') * frequency(leastZeroes, '2');
  33.     }
  34.  
  35.     private static String part2(List<char[]> data, int imageSize, int layers) {
  36.         StringBuilder finalImage = new StringBuilder();
  37.  
  38.         for(int i = 0 ; i < imageSize ; i++) {
  39.             for(int layer = 0 ; layer < layers ; layer++) {
  40.                 int colour = data.get(layer)[i];
  41.                 if(colour == '2') {
  42.                     continue;
  43.                 }
  44.  
  45.                 finalImage.append(colour == '0' ? " " : "X");
  46.                 break;
  47.             }
  48.  
  49.             if(i % WIDTH == WIDTH - 1) {
  50.                 finalImage.append("\n");
  51.             }
  52.         }
  53.  
  54.         return finalImage.toString();
  55.     }
  56.  
  57.     private static int frequency(char[] array, char number) {
  58.         int n = 0;
  59.         for(char c : array) {
  60.             if(c == number) {
  61.                 n++;
  62.             }
  63.         }
  64.  
  65.         return n;
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement