Guest User

Untitled

a guest
Dec 10th, 2021
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.18 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.nio.file.Files;
  3. import java.nio.file.Paths;
  4. import java.util.*;
  5.  
  6. public class SyntaxScoring {
  7.  
  8.     static Map<Character, Character> forwardBrackets;
  9.     static Map<Character, Character> backwardBrackets;
  10.     static Map<Character, Integer> scoring;
  11.  
  12.     static {
  13.         forwardBrackets = new HashMap<>();
  14.         forwardBrackets.put('(', ')');
  15.         forwardBrackets.put('[', ']');
  16.         forwardBrackets.put('{', '}');
  17.         forwardBrackets.put('<', '>');
  18.  
  19.         backwardBrackets = new HashMap<>();
  20.         backwardBrackets.put(')', '(');
  21.         backwardBrackets.put(']', '[');
  22.         backwardBrackets.put('}', '{');
  23.         backwardBrackets.put('>', '<');
  24.  
  25.         scoring = new HashMap<>();
  26.         scoring.put(')', 3);
  27.         scoring.put(']', 57);
  28.         scoring.put('}', 1197);
  29.         scoring.put('>', 25137);
  30.         scoring.put('(', 1);
  31.         scoring.put('[', 2);
  32.         scoring.put('{', 3);
  33.         scoring.put('<', 4);
  34.     }
  35.  
  36.  
  37.     public static void main(String[] args) {
  38.         List<String> lines = readFile("brackets.data");
  39.         System.out.println("Syntax Error Score: " + scoreSyntaxErrors(lines));
  40.         System.out.println("Closing Characters Score: " + getMiddleClosingBracketScore(lines));
  41.     }
  42.  
  43.  
  44.     public static List<String> readFile(String filename) {
  45.         List<String> lines = Collections.emptyList();
  46.         try {
  47.             lines = Files.readAllLines(Paths.get(filename));
  48.         } catch (IOException ex) {
  49.             ex.printStackTrace();
  50.         }
  51.         return lines;
  52.     }
  53.  
  54.     public static long scoreSyntaxErrors(List<String> lines) {
  55.         int total = 0;
  56.         for (String line : lines) {
  57.             Deque<Character> stack = new ArrayDeque<>();
  58.             for (char c : line.toCharArray()) {
  59.                 if (forwardBrackets.containsKey(c)) {
  60.                     stack.push(c);
  61.                 } else {
  62.                     if (stack.pop() != backwardBrackets.get(c)) {
  63.                         total += scoring.get(c);
  64.                         break;
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.         return total;
  70.     }
  71.  
  72.     public static long getMiddleClosingBracketScore(List<String> lines) {
  73.         List<Long> scores = new ArrayList<>();
  74.         for (String line : lines) {
  75.             long score = scoreValidClosingBrackets(line);
  76.             if (score == 0) continue;
  77.             scores.add(score);
  78.         }
  79.         Collections.sort(scores);
  80.         return scores.get(scores.size() / 2);
  81.     }
  82.  
  83.     private static long scoreValidClosingBrackets(String incompleteBrackets) {
  84.         Deque<Character> stack = new ArrayDeque<>();
  85.         for (char c : incompleteBrackets.toCharArray()) {
  86.             if (forwardBrackets.containsKey(c)) {
  87.                 stack.push(c);
  88.             } else if (stack.peek() == backwardBrackets.get(c)) {
  89.                 stack.pop();
  90.             } else {
  91.                 stack.clear();
  92.                 break;
  93.             }
  94.         }
  95.         long score = 0;
  96.         while (!stack.isEmpty()) {
  97.             score = score * 5 + scoring.get(stack.pop());
  98.         }
  99.         return score;
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment