import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class main { static ArrayList> supplyStacksPart1; static ArrayList> supplyStacksPart2; public static void main(String[] args) { supplyStacksPart1 = new ArrayList>(9); supplyStacksPart2 = new ArrayList>(9); for (int i = 0; i < 9; i++) { supplyStacksPart1.add(new Stack()); supplyStacksPart2.add(new Stack()); } populateArrayListOfStacks(supplyStacksPart1); populateArrayListOfStacks(supplyStacksPart2); int numberOfCratesToMove = 0,stackToBeMovedFrom = 0, stackToMoveTo = 0; int line = 0; int offset = 0; Stack temporalHoldingOfCrates = new Stack(); try { RandomAccessFile file = new RandomAccessFile("input.txt", "r"); String str; while ((str = file.readLine()) != null) { line++; if (line >= 11) { if (str.charAt(7) != ' ') { numberOfCratesToMove = Integer.valueOf(str.substring(5,6)); offset = 0; } else { numberOfCratesToMove = Integer.valueOf(str.substring(5,7)); offset = 1; } stackToBeMovedFrom = Integer.valueOf(str.substring(12+offset,13+offset)); stackToMoveTo = Integer.valueOf(str.substring(17+offset)); for (int i = 0; i < numberOfCratesToMove; i++) { //Part 1 if (!supplyStacksPart1.get(stackToBeMovedFrom-1).empty()) { supplyStacksPart1.get(stackToMoveTo-1).push(supplyStacksPart1.get(stackToBeMovedFrom-1).pop()); } //Part 2 if (!supplyStacksPart2.get(stackToBeMovedFrom-1).empty()) { temporalHoldingOfCrates.push(supplyStacksPart2.get(stackToBeMovedFrom-1).pop()); } } for (int i = 0; i < temporalHoldingOfCrates.size(); i++) { supplyStacksPart2.get(stackToMoveTo-1).push(temporalHoldingOfCrates.pop()); } for (int i = 0; i < 9; i++) { if (!supplyStacksPart2.get(i).empty()) System.out.print(supplyStacksPart2.get(i).peek()); else System.out.print(" "); } System.out.println(); } } System.out.print("Part 1: "); for (int i = 0; i < 9; i++) { if (!supplyStacksPart1.get(i).empty()) System.out.print(supplyStacksPart1.get(i).peek()); } System.out.println(""); System.out.print("Part 2: "); for (int i = 0; i < 9; i++) { if (!supplyStacksPart2.get(i).empty()) System.out.print(supplyStacksPart2.get(i).peek()); } } catch (IOException e) { e.printStackTrace(); } } public static void populateArrayListOfStacks(ArrayList> arrayListOfStack) { arrayListOfStack.get(0).push('Z'); arrayListOfStack.get(0).push('N'); arrayListOfStack.get(1).push('M'); arrayListOfStack.get(1).push('C'); arrayListOfStack.get(1).push('D'); arrayListOfStack.get(2).push('P'); /* // Stack 1 arrayListOfStack.get(0).push('W'); arrayListOfStack.get(0).push('D'); arrayListOfStack.get(0).push('G'); arrayListOfStack.get(0).push('B'); arrayListOfStack.get(0).push('H'); arrayListOfStack.get(0).push('R'); arrayListOfStack.get(0).push('V'); // Stack 2 arrayListOfStack.get(1).push('J'); arrayListOfStack.get(1).push('N'); arrayListOfStack.get(1).push('G'); arrayListOfStack.get(1).push('C'); arrayListOfStack.get(1).push('R'); arrayListOfStack.get(1).push('F'); // Stack 3 arrayListOfStack.get(2).push('L'); arrayListOfStack.get(2).push('S'); arrayListOfStack.get(2).push('F'); arrayListOfStack.get(2).push('H'); arrayListOfStack.get(2).push('D'); arrayListOfStack.get(2).push('N'); arrayListOfStack.get(2).push('J'); // Stack 4 arrayListOfStack.get(3).push('J'); arrayListOfStack.get(3).push('D'); arrayListOfStack.get(3).push('S'); arrayListOfStack.get(3).push('V'); // Stack 5 arrayListOfStack.get(4).push('S'); arrayListOfStack.get(4).push('H'); arrayListOfStack.get(4).push('D'); arrayListOfStack.get(4).push('R'); arrayListOfStack.get(4).push('Q'); arrayListOfStack.get(4).push('W'); arrayListOfStack.get(4).push('N'); arrayListOfStack.get(4).push('V'); // Stack 6 arrayListOfStack.get(5).push('P'); arrayListOfStack.get(5).push('G'); arrayListOfStack.get(5).push('H'); arrayListOfStack.get(5).push('C'); arrayListOfStack.get(5).push('M'); // Stack 7 arrayListOfStack.get(6).push('F'); arrayListOfStack.get(6).push('J'); arrayListOfStack.get(6).push('B'); arrayListOfStack.get(6).push('G'); arrayListOfStack.get(6).push('L'); arrayListOfStack.get(6).push('Z'); arrayListOfStack.get(6).push('H'); arrayListOfStack.get(6).push('C'); // Stack 8 arrayListOfStack.get(7).push('S'); arrayListOfStack.get(7).push('J'); arrayListOfStack.get(7).push('R'); // Stack 9 arrayListOfStack.get(8).push('L'); arrayListOfStack.get(8).push('G'); arrayListOfStack.get(8).push('S'); arrayListOfStack.get(8).push('R'); arrayListOfStack.get(8).push('B'); arrayListOfStack.get(8).push('N'); arrayListOfStack.get(8).push('V'); arrayListOfStack.get(8).push('M'); */ } }