-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay07.java
153 lines (134 loc) · 5.22 KB
/
Day07.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//this code consists of a main and a dir class, the dir class is creating a directory system and the main class running off it
//part 1
package org.thehuglio;
import java.io.File;
import java.util.*;
public class Main {
private static final Reader reader = new Reader(new File("data.txt"));
private static List<String> position = new LinkedList<>();
private static final Dir maindirectory = new Dir();
public static int totsize = 0;
public static void main(String[] args) {
setMaindirectory();
countMaindirectory();
System.out.println(totsize);
}
public static void countMaindirectory() {
maindirectory.size();
}
public static void setMaindirectory() {
System.out.println(reader.data);
for (String s : reader.data) {
String[] split = s.split(" ");
if (split[0].equals("$")) {
if (split[1].equals("cd")) {
if (split[2].equals("/")) {
reset();
} else if (split[2].equals("..")) {
back();
} else {
position.add(split[2]);
}
}
} else if (split[0].equals("dir")) {
if (position.size() != 0) {
List<Dir> directorylist = new LinkedList<>();
Dir positiondir = maindirectory;
for (String filename : position) {
positiondir = positiondir.getDir(filename);
directorylist.add(positiondir);
}
positiondir.addDir(split[1]);
directorylist.remove(directorylist.size() - 1);
directorylist.add(positiondir);
for ( int i = directorylist.size() - 1; i > 0; i--) {
positiondir = directorylist.get(i - 1);
positiondir.replaceDir(position.get(i),directorylist.get(i));
}
maindirectory.replaceDir(position.get(0),positiondir);
} else {
maindirectory.addDir(split[1]);
}
} else {
if (position.size() != 0) {
List<Dir> directorylist = new LinkedList<>();
Dir positiondir = maindirectory;
for (String filename : position) {
positiondir = positiondir.getDir(filename);
directorylist.add(positiondir);
}
positiondir.addfile(split[1], Integer.parseInt(split[0]));
directorylist.remove(directorylist.size() - 1);
directorylist.add(positiondir);
for ( int i = directorylist.size() - 1; i > 0; i--) {
positiondir = directorylist.get(i - 1);
positiondir.replaceDir(position.get(i),directorylist.get(i));
}
maindirectory.replaceDir(position.get(0),positiondir);
} else {
maindirectory.addfile(split[1], Integer.parseInt(split[0]));
}
}
}
System.out.println(maindirectory);
}
private static void back() {
position.remove(position.size() - 1);
}
private static void reset() {
position = new LinkedList<>();
}
}
package org.thehuglio;
import java.util.*;
public class Dir {
private HashMap<String, Dir> directorys = new HashMap<>();
private HashMap<String, Integer> files = new HashMap<>();
private List<String> dup = new LinkedList<>();
public void setDir(HashMap<String, Dir> map) {
this.directorys = map;
}
public void addDir(String name) {
directorys.put(name,new Dir());
}
public void putDir(String name, Dir d) {
directorys.put(name,d);
}
public void replaceDir(String name, Dir d) {
directorys.replace(name, d);
}
public Dir getDir(String name) {
return directorys.get(name);
}
public void addfile(String name, int size) {
files.put(name,size);
}
public int size() {
int size = 0;
if (directorys.size() != 0) {
for (Map.Entry<String, Dir> directory : directorys.entrySet()) {
size += directory.getValue().size();
if (directory.getValue().size() <= 100000) {
// for part 2 change the value above to 6728267
if (!dup.contains(directory.getKey())){
dup.add(directory.getKey());
int dsize = directory.getValue().size();
Main.totsize += dsize;
System.out.println(directory.getKey() + " , " + dsize);
}
}
}
}
if (files.size() != 0) {
for (int filessize : files.values()) {
size += filessize;
}
}
return size;
}
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(directorys.toString()).append(files.toString());
return stringBuilder.toString();
}
}