Guest User

Untitled

a guest
Dec 6th, 2015
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.23 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.regex.Pattern;
  4. import java.util.stream.Stream;
  5.  
  6. /**
  7.  * @author /u/Philboyd_Studge on 12/5/2015.
  8.  */
  9. public class Advent6 {
  10.  
  11.     private static final String[] COMMANDS = {"toggle", "turn on", "turn off"};
  12.     private static boolean part1 = false; // true for part 1
  13.  
  14.     public static int count(int[][] grid) {
  15.         return Stream.of(grid)
  16.                 .flatMapToInt(Arrays::stream)
  17.                 .sum();
  18.     }
  19.  
  20.     public static void process(String in, int[][] grid) {
  21.  
  22.  
  23.         int cmd = 0;
  24.         for (int i = 0; i < COMMANDS.length; i++) {
  25.             if (in.startsWith(COMMANDS[i])) cmd = i;
  26.         }
  27.         // strip command from string
  28.         in = in.substring(COMMANDS[cmd].length()+1);
  29.  
  30.         // split spaces and commas
  31.         // and map integer location values to array
  32.         int[] loc = Pattern.compile("[\\s,]+")
  33.                 .splitAsStream(in)
  34.                 .filter(x -> x.length() < 4)
  35.                 .mapToInt(Integer::parseInt)
  36.                 .toArray();
  37.  
  38.         for (int i = loc[0]; i <= loc[2]; i++) {
  39.             for (int j = loc[1]; j <= loc[3]; j++) {
  40.                 switch (cmd) {
  41.                     case 0:
  42.                         if (part1) grid[i][j] ^= 1;
  43.                         else grid[i][j] += 2;
  44.                         break;
  45.                     case 1:
  46.                         if (part1) grid[i][j] = 1;
  47.                         else grid[i][j] += 1;
  48.                         break;
  49.                     case 2:
  50.                         if (part1) {
  51.                             grid[i][j] = 0;
  52.                         } else {
  53.                             grid[i][j] -= 1;
  54.                             if (grid[i][j] < 0) grid[i][j] = 0;
  55.                         }
  56.                         break;
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.  
  62.  
  63.  
  64.     public static void main(String[] args) {
  65.  
  66.         List<String> list = FileIO.getFileAsList("advent6.txt");
  67.  
  68.         int grid[][] = new int[1000][1000];
  69.  
  70.         for (String each : list) {
  71.             process(each, grid);
  72.         }
  73.  
  74.         int answer = count(grid);
  75.  
  76.         System.out.println("Answer: " + answer);
  77.  
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment