Day 05 and 06

This commit is contained in:
Simponic 2022-12-12 00:04:40 -07:00
parent 7db39f82bf
commit 60e8a82726
Signed by untrusted user who does not match committer: simponic
GPG Key ID: 52B3774857EB24B1
4 changed files with 152 additions and 3 deletions

View File

@ -13,13 +13,16 @@
- [x] C++ - [x] C++
- [Day 4](./day-4) - [Day 4](./day-4)
- [] Dart - [] Dart
- [] Elixir - [x] Elixir
- [Day 5](./day-5)
- [] Emacs Lisp - [] Emacs Lisp
- [] Haskell - [] Haskell
- [] Java - [] Java
- [] JavaScript - [x] JavaScript
- [Day 6](./day-6)
- [] Kotlin - [] Kotlin
- [] PHP - [] PHP
- [] Python - [x] Python
- [Day 11](./day-11)
- [] Ruby - [] Ruby
- [] TypeScript - [] TypeScript

28
day-05/sol.exs Normal file
View File

@ -0,0 +1,28 @@
defmodule Solution do
def solve(input, chunk) do
(String.split(input, "", trim: true)
|> Enum.chunk_every(chunk, 1, :discard)
|> Enum.map(fn window ->
Enum.reduce(window, %{}, fn char, acc ->
Map.put(acc, char, Map.get(acc, char, 0) + 1)
end)
end)
|> Enum.find_index(fn letter_counts ->
Enum.all?(letter_counts, fn {_key, value} ->
value == 1
end)
end)) + chunk
end
def main do
input = File.read!("input")
solve(input, 4)
|> IO.inspect()
solve(input, 14)
|> IO.inspect()
end
end
Solution.main()

3
day-06/package.json Normal file
View File

@ -0,0 +1,3 @@
{
"type": "module"
}

115
day-06/sol.js Normal file
View File

@ -0,0 +1,115 @@
import input from "fs";
class File {
constructor(name, size, parent) {
this.name = name;
this.fileSize = size;
this.parent = parent;
}
size() {
return this.fileSize;
}
}
class Directory {
constructor(name, parent) {
this.children = [];
this.name = name;
this.parent = parent;
}
add(child) {
this.children.push(child);
}
size() {
return this.children.reduce((acc, child) => acc + child.size(), 0);
}
searchDirectoresOfSizePredicate(sizeP) {
const dirs = [];
for (const child of this.children) {
if (child instanceof Directory) {
if (sizeP(child.size())) {
dirs.push(child);
}
dirs.push(...child.searchDirectoresOfSizePredicate(sizeP));
}
}
return dirs;
}
}
class OS {
constructor() {
this.root = new Directory("/", null);
this.current = this.root;
}
cd(path) {
if (path === "/") {
this.current = this.root;
} else if (path === ".." && this.current.parent) {
this.current = this.current.parent;
} else {
this.current = this.current.children.find((child) => child.name === path);
}
}
printFs() {
const print = (dir, depth) => {
for (const child of dir.children) {
console.log(" ".repeat(depth) + child.name);
if (child instanceof Directory) {
print(child, depth + 1);
}
}
};
print(this.root, 0);
}
}
const main = () => {
const os = new OS();
const lines = input.readFileSync("input", "utf8").split("\n");
let currentCommand = null;
for (const line of lines) {
if (line.startsWith("$")) {
const [command, path] = line.split(" ").splice(1);
if (command == "cd") os.cd(path);
currentCommand = command;
} else if (currentCommand == "ls") {
const [dirOrSize, name] = line.split(" ");
if (dirOrSize === "dir") {
const dir = new Directory(name, os.current);
os.current.add(dir);
} else {
const file = new File(name, parseInt(dirOrSize), os.current);
os.current.add(file);
}
}
}
//os.printFs();
console.log(
os.root
.searchDirectoresOfSizePredicate((size) => size <= 100000)
.reduce((a, x) => a + x.size(), 0)
);
const rootSize = os.root.size();
const freeSpace = 70000000 - rootSize;
console.log(
[...os.root.searchDirectoresOfSizePredicate(() => true), os.root]
.map((x) => x.size())
.filter((x) => freeSpace + x >= 30000000)
.reduce((a, x) => Math.min(a, x), Infinity)
);
};
main();