more day 7 WIP. Classes work, just need to figure out how to extract the recurdive sums of files per directory.
This commit is contained in:
parent
7fb3d31487
commit
a71c48c5b5
4 changed files with 134 additions and 13 deletions
BIN
2022/day07/Day07A.class
Normal file
BIN
2022/day07/Day07A.class
Normal file
Binary file not shown.
|
@ -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<Directory> breadCrumbs = new Stack<Directory>();
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
BIN
2022/day07/Directory.class
Normal file
BIN
2022/day07/Directory.class
Normal file
Binary file not shown.
|
@ -3,25 +3,51 @@ import java.util.ArrayList;
|
|||
public class Directory {
|
||||
private String dirName;
|
||||
private String parentDirName;
|
||||
private ArrayList<Integer> files;
|
||||
private ArrayList<Directory> subDirs;
|
||||
private ArrayList<Integer> files = new ArrayList<Integer>();
|
||||
private ArrayList<Directory> subDirs = new ArrayList<Directory>();
|
||||
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<Integer> 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<Integer> 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<Directory> getSubsOfCurrentDir() {
|
||||
this.dirSize = this.calcDirSize();
|
||||
return this.subDirs;
|
||||
}
|
||||
|
||||
public String getParentDir() {
|
||||
return this.parentDirName;
|
||||
public void addDir(String s, ArrayList<Integer> 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<Directory> getRecursiveSubDirs() {
|
||||
ArrayList<Directory> arr = new ArrayList<Directory>();
|
||||
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();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue