diff --git a/2022/day07/Day07A.class b/2022/day07/Day07A.class new file mode 100644 index 0000000..64bd59b Binary files /dev/null and b/2022/day07/Day07A.class differ diff --git a/2022/day07/Day07A.java b/2022/day07/Day07A.java index c554153..3d32960 100644 --- a/2022/day07/Day07A.java +++ b/2022/day07/Day07A.java @@ -1,7 +1,50 @@ import java.nio.file.Paths; import java.util.Scanner; import java.io.IOException; +import java.util.Stack; public class Day07A { - + public static void main(String[] args) { + Stack breadCrumbs = new Stack(); + try (Scanner inputFile = new Scanner(Paths.get("input.txt"))) { + boolean passingBack = false; + String[] command = new String[3]; + while (inputFile.hasNext() || passingBack) { + if (!passingBack) { + command = inputFile.nextLine().split(" "); + } + passingBack = false; + switch (command[1]) { + case "cd": { + if (command[2].compareTo("..") == 0) { + breadCrumbs.pop(); + } else if (breadCrumbs.empty()) { + breadCrumbs.push(new Directory(command[2], command[2])); + } else { + breadCrumbs.push(breadCrumbs.peek().moveToSubDir(command[2])); + } + break; + } + case "ls": { + command = inputFile.nextLine().split(" "); + while (!inputFile.hasNext("$") && inputFile.hasNext()) { + if (command[0].compareTo("dir") == 0) { + breadCrumbs.peek().addDir(command[1]); + } else if (command[0].compareTo("$") == 0) { + break; + } else{ + breadCrumbs.peek().addFile(Integer.parseInt(command[0])); + } + command = inputFile.nextLine().split(" "); + } + passingBack = true; + } + } + } + } catch (IOException e) {e.printStackTrace();} + while (breadCrumbs.size() > 1) { + breadCrumbs.pop(); + } + + } } diff --git a/2022/day07/Directory.class b/2022/day07/Directory.class new file mode 100644 index 0000000..3252fb0 Binary files /dev/null and b/2022/day07/Directory.class differ diff --git a/2022/day07/Directory.java b/2022/day07/Directory.java index 06de422..c649688 100644 --- a/2022/day07/Directory.java +++ b/2022/day07/Directory.java @@ -3,25 +3,51 @@ import java.util.ArrayList; public class Directory { private String dirName; private String parentDirName; - private ArrayList files; - private ArrayList subDirs; + private ArrayList files = new ArrayList(); + private ArrayList subDirs = new ArrayList(); + private int dirSize; + public Directory() { + + } + public Directory(String name, String parent) { this.dirName = name; this.parentDirName = parent; } - /*public Directory (String name, String parent, int[] filesList, String[] dirsList){ + public Directory (String name, String parent, ArrayList filesList){ this.dirName = name; this.parentDirName = parent; - files.add(filesList); - subDirs.add(); - } this is a really bad idea we'll leave it for later*/ + this.files.addAll(filesList); + } + + public Directory (String name, String parent, String[] dirsList){ + this.dirName = name; + this.parentDirName = parent; + for (String s : dirsList) { + this.addDir(s); + } + } + + public Directory (String name, String parent, ArrayList filesList, String[] dirsList){ + this.dirName = name; + this.parentDirName = parent; + this.files.addAll(filesList); + for (String s : dirsList) { + this.addDir(s); + } + } public int getDirSize() { + this.dirSize = this.calcDirSize(); + return this.dirSize; + } + + private int calcDirSize() { int size = 0; for (Directory dir : this.subDirs) { - size += dir.getDirSize(); + size += dir.calcDirSize(); } for (int i : this.files) { size += i; @@ -33,19 +59,71 @@ public class Directory { this.subDirs.add(new Directory(s, this.dirName)); } - public void addFile(int i) { - this.files.add(i); + public ArrayList getSubsOfCurrentDir() { + this.dirSize = this.calcDirSize(); + return this.subDirs; } - public String getParentDir() { - return this.parentDirName; + public void addDir(String s, ArrayList i) { + this.subDirs.add(new Directory(s, this.dirName)); + + } + + public void addFile(int i) { + this.files.add(i); } public String getDirName() { return this.dirName; } - public ArrayList<> getAllSubDirs() { + public ArrayList getRecursiveSubDirs() { + ArrayList arr = new ArrayList(); + this.dirSize = this.calcDirSize(); + for (Directory dir : subDirs) { + arr.addAll(dir.getRecursiveSubDirs()); + } + return arr; + } + public Directory moveToSubDir(String s) { + Directory retDir = new Directory(); + Boolean foundFlag = false; + for (Directory d : subDirs) { + if (d.getDirName().compareTo(s) == 0) { + retDir = d; + foundFlag = true; + break; + } + } + if (foundFlag = false) { + this.addDir(s); + } + return retDir; + } + + public String toString() { + StringBuilder s = new StringBuilder(); + for (Integer i : files) { + s.append(i.toString()+"\n"); + } + for (Directory d : subDirs) { + s.append(d.getDirName()+"\n"); + } + return s.toString(); + } + + public String fullHierarchyString() { + StringBuilder s = new StringBuilder(); + for (Integer i : files) { + s.append(i.toString()+"\n"); + } + for (Directory d : subDirs) { + s.append(d.getDirName()+"\n"); + } + for (Directory d : subDirs) { + s.append(d.fullHierarchyString()); + } + return s.toString(); } } \ No newline at end of file