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