diff --git a/2025/day02/README.md b/2025/day02/README.md index 5c438d6..831fb84 100644 --- a/2025/day02/README.md +++ b/2025/day02/README.md @@ -1,4 +1,4 @@ -## Day 02: Terraform +# Day 02: Terraform The code assumes an input file at `../inputs/02.txt`. Other than that, simply try to run as follows: diff --git a/2025/day03/README.md b/2025/day03/README.md new file mode 100644 index 0000000..8ec7d41 --- /dev/null +++ b/2025/day03/README.md @@ -0,0 +1,4 @@ +# Day 03: Bash + +Simple as can be, simply run `./solve.sh ` and get both answers. While I allowed myself +to use `coreutils` with bash, they turned out to be entirely unnecessary. Pure bash just works. diff --git a/2025/day03/sample.txt b/2025/day03/sample.txt new file mode 100644 index 0000000..7255fca --- /dev/null +++ b/2025/day03/sample.txt @@ -0,0 +1,4 @@ +987654321111111 +811111111111119 +234234234234278 +818181911112111 diff --git a/2025/day03/solve.sh b/2025/day03/solve.sh new file mode 100755 index 0000000..36e42ba --- /dev/null +++ b/2025/day03/solve.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +if [[ $# -lt 1 ]]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +joltage() { + local first second c i + + first=0 + second=0 + + for ((i = 0; i < ${#1}; i++)); do + c="${1:$i:1}" + + if [[ $second -gt $first ]]; then + first="$second" + second="$c" + elif [[ $c -gt $second ]]; then + second="$c" + fi + done + + echo "$first$second" +} + +joltage2() { + local c i d e n digits + + digits=(0 0 0 0 0 0 0 0 0 0 0 0) + + for ((i = 0; i < ${#1}; i++)); do + c="${1:$i:1}" + + for ((d = 0; d < 11; d++)); do + if [[ ${digits[((d + 1))]} -gt ${digits[$d]} ]]; then + for ((e = d; e < 11; e++)); do + n=$((e + 1)) + digits[e]=${digits[n]} + done + digits[11]="0" + break + fi + done + + if [[ $c -gt ${digits[11]} ]]; then + digits[11]="$c" + fi + done + + printf "%s" "${digits[@]}" +} + +total=0 +total2=0 + +while IFS="" read -r line || [[ -n "$p" ]]; do + ((total += $(joltage "$line"))) + ((total2 += $(joltage2 "$line"))) +done <"$1" + +echo "$total" +echo "$total2"