Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Problem2 {
- public static void main(String[] args) throws IOException {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- int countLines = 0;
- List<String> crates = new ArrayList<>();
- List<String> validFoodCrates = new ArrayList<>();
- List<String> validDrinkCrates = new ArrayList<>();
- String command = reader.readLine();
- while (!"Collect".equals(command)){
- countLines++;
- Pattern pattern = Pattern.compile("([\\[](.*?)[]])");
- Matcher matcher = pattern.matcher(command);
- while (matcher.find()){
- crates.add(matcher.group());
- }
- command = reader.readLine();
- }
- int n = crates.size()/countLines;
- String foodCratePattern = String.format("[#][0-9]{%d}",n);
- String drinkCratePattern = String.format("[#][a-z]{%d}",n);
- extractValidCrates(crates, validFoodCrates, foodCratePattern, n);
- extractValidCrates(crates, validDrinkCrates, drinkCratePattern, n);
- int food = 0;
- int drink = 0;
- if (validFoodCrates.size()>0 || validDrinkCrates.size()>0){
- for (String validFoodCrate : validFoodCrates) {
- food+=getFood(validFoodCrate.substring(n+2,validFoodCrate.length()-n-2), n);
- }
- String debug ="";
- for (String validDrinkCrate : validDrinkCrates) {
- drink+=getDrinks(validDrinkCrate, n);
- }
- System.out.println(String.format("Number of supply crates: %d",validFoodCrates.size()+validDrinkCrates.size()));
- System.out.println(String.format("Amount of food collected: %d",food));
- System.out.println(String.format("Amount of drinks collected: %d",drink));
- } else {
- System.out.println("No supplies found!");
- }
- }
- private static int getDrinks(String validDrinkCrate, int n) {
- String multiplier = validDrinkCrate.substring(2, 2 + n);
- String substring = validDrinkCrate.substring(n + 2, validDrinkCrate.length() - n - 2);
- int mult = multiplier.chars().sum();
- int sum = substring.chars().sum();
- return sum*mult;
- }
- private static void extractValidCrates(List<String> crates, List<String> validCrates, String foodCratePattern, int n) {
- Pattern begginingPattern = Pattern.compile("^" + foodCratePattern);
- Pattern endPattern = Pattern.compile(foodCratePattern+ "$");
- for (String crate : crates) {
- Matcher match1 = begginingPattern.matcher(crate.substring(1,crate.length()-1));
- Matcher match2 = endPattern.matcher(crate.substring(1,crate.length()-1));
- if (match1.find() && match2.find()){
- if (match1.group().equals(match2.group())){
- validCrates.add(crate);
- }
- // String matchTxt1 = crate.substring(2, 2 + n);
- // String matchTxt2 = crate.substring(crate.length() - 1 - n, crate.length() - 1);
- //
- }
- }
- }
- private static int getFood (String input, int n) {
- return input.chars()
- .distinct().sum()*n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment