diff --git a/2015/02/example.txt b/2015/02/example.txt new file mode 100644 index 0000000..59859c6 --- /dev/null +++ b/2015/02/example.txt @@ -0,0 +1,2 @@ +2x3x4 +1x1x10 \ No newline at end of file diff --git a/2015/02/golang/.vscode/settings.json b/2015/02/golang/.vscode/settings.json new file mode 100644 index 0000000..122fb2e --- /dev/null +++ b/2015/02/golang/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "[go]": { + "editor.insertSpaces": false, + "editor.formatOnSave": true, + "editor.defaultFormatter": "golang.go", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } + } +} \ No newline at end of file diff --git a/2015/02/golang/go.mod b/2015/02/golang/go.mod new file mode 100644 index 0000000..7f9a1bf --- /dev/null +++ b/2015/02/golang/go.mod @@ -0,0 +1,3 @@ +module aoc/day-2 + +go 1.24.4 diff --git a/2015/02/golang/main.go b/2015/02/golang/main.go new file mode 100644 index 0000000..05f06a2 --- /dev/null +++ b/2015/02/golang/main.go @@ -0,0 +1,105 @@ +package main + +import ( + "fmt" + "os" + "strconv" + "strings" +) + +type Dimension struct { + l, w, h int +} + +func main() { + input := readFile("../input.txt") + fmt.Println(part1(input)) + fmt.Println(part2(input)) +} + +func part1(input string) int { + list := strings.Split(input, "\r\n") + total := 0 + for _, p := range list { + total += calculateWrapSize(parseDimensions(p)) + } + return total +} + +func part2(input string) int { + list := strings.Split(input, "\r\n") + total := 0 + for _, p := range list { + total += calculateBowSize(parseDimensions(p)) + } + return total +} + +func parseDimensions(input string) Dimension { + splitValues := strings.Split(input, "x") + l, _ := strconv.Atoi(splitValues[0]) + w, _ := strconv.Atoi(splitValues[1]) + h, _ := strconv.Atoi(splitValues[2]) + return Dimension{ + l: l, + w: w, + h: h, + } +} + +func calculateBowSize(dimensions Dimension) int { + sorted := quickSort([]int{dimensions.l, dimensions.w, dimensions.h}) + first := sorted[0] + second := sorted[1] + ribbonLength := first*2 + second*2 + extra := dimensions.l * dimensions.w * dimensions.h + return ribbonLength + extra +} + +func calculateWrapSize(dimensions Dimension) int { + lw := dimensions.l * dimensions.w + wh := dimensions.w * dimensions.h + hl := dimensions.h * dimensions.l + smallest := min([]int{lw, wh, hl}) + return 2*lw + 2*wh + 2*hl + smallest +} + +func quickSort(arr []int) []int { + if len(arr) < 2 { + return arr + } + left, right := 0, len(arr)-1 + // Choose the pivot (here, the last element) + pivot := arr[right] + // Partition: all elements less than pivot to the left + for i := range arr { + if arr[i] < pivot { + arr[i], arr[left] = arr[left], arr[i] + left++ + } + } + // Place the pivot after the last smaller element + arr[left], arr[right] = arr[right], arr[left] + // Recursively sort left and right parts + quickSort(arr[:left]) + quickSort(arr[left+1:]) + return arr +} + +func min(list []int) int { + min := list[0] + for _, v := range list { + if v < min { + min = v + } + } + return min +} + +func readFile(filename string) string { + content, err := os.ReadFile(filename) + if err != nil { + return "" + } + return string(content) +} diff --git a/2015/02/input.txt b/2015/02/input.txt new file mode 100644 index 0000000..263cfc2 --- /dev/null +++ b/2015/02/input.txt @@ -0,0 +1,1000 @@ +4x23x21 +22x29x19 +11x4x11 +8x10x5 +24x18x16 +11x25x22 +2x13x20 +24x15x14 +14x22x2 +30x7x3 +30x22x25 +29x9x9 +29x29x26 +14x3x16 +1x10x26 +29x2x30 +30x10x25 +10x26x20 +1x2x18 +25x18x5 +21x3x24 +2x5x7 +22x11x21 +11x8x8 +16x18x2 +13x3x8 +1x16x19 +19x16x12 +21x15x1 +29x9x4 +27x10x8 +2x7x27 +2x20x23 +24x11x5 +2x8x27 +10x28x10 +24x11x10 +19x2x12 +27x5x10 +1x14x25 +5x14x30 +15x26x12 +23x20x22 +5x12x1 +9x26x9 +23x25x5 +28x16x19 +17x23x17 +2x27x20 +18x27x13 +16x7x18 +22x7x29 +17x28x6 +9x22x17 +10x5x6 +14x2x12 +25x5x6 +26x9x10 +19x21x6 +19x4x27 +23x16x14 +21x17x29 +24x18x10 +7x19x6 +14x15x10 +9x10x19 +20x18x4 +11x14x8 +30x15x9 +25x12x24 +3x12x5 +12x21x28 +8x23x10 +18x26x8 +17x1x8 +2x29x15 +3x13x28 +23x20x11 +27x25x6 +19x21x3 +30x22x27 +28x24x4 +26x18x21 +11x7x16 +22x27x6 +27x5x26 +4x10x4 +4x2x27 +2x3x26 +26x29x19 +30x26x24 +8x25x12 +16x17x5 +13x2x3 +1x30x22 +20x9x1 +24x26x19 +26x18x1 +18x29x24 +1x6x9 +20x27x2 +3x22x21 +4x16x8 +29x18x16 +7x16x23 +13x8x14 +19x25x10 +23x29x6 +23x21x1 +22x26x10 +14x4x2 +18x29x17 +9x4x18 +7x22x9 +19x5x26 +27x29x19 +7x13x14 +19x10x1 +6x22x3 +12x21x5 +24x20x12 +28x2x11 +16x18x23 +2x13x25 +11x7x17 +27x21x4 +2x10x25 +22x16x17 +23x22x15 +17x13x13 +23x24x26 +27x18x24 +24x7x28 +30x12x15 +14x28x19 +2x15x29 +12x13x5 +17x22x21 +27x10x27 +17x6x25 +22x2x1 +1x10x9 +9x7x2 +30x28x3 +28x11x10 +8x23x15 +23x4x20 +12x5x4 +13x17x14 +28x11x2 +21x11x29 +10x23x22 +27x23x14 +7x15x23 +20x2x13 +8x21x4 +10x20x11 +23x28x11 +21x22x25 +23x11x17 +2x29x10 +28x16x5 +30x26x10 +17x24x16 +26x27x25 +14x13x25 +22x27x5 +24x15x12 +5x21x25 +4x27x1 +25x4x10 +15x13x1 +21x23x7 +8x3x4 +10x5x7 +9x13x30 +2x2x30 +26x4x29 +5x14x14 +2x27x9 +22x16x1 +4x23x5 +13x7x26 +2x12x10 +12x7x22 +26x30x26 +28x16x28 +15x19x11 +4x18x1 +20x14x24 +6x10x22 +9x20x3 +14x9x27 +26x17x9 +10x30x28 +6x3x29 +4x16x28 +8x24x11 +23x10x1 +11x7x7 +29x6x15 +13x25x12 +29x14x3 +26x22x21 +8x3x11 +27x13x25 +27x6x2 +8x11x7 +25x12x9 +24x30x12 +13x1x30 +25x23x16 +9x13x29 +29x26x16 +11x15x9 +11x23x6 +15x27x28 +27x24x21 +6x24x1 +25x25x5 +11x1x26 +21x4x24 +10x5x12 +4x30x13 +24x22x5 +26x7x21 +23x3x17 +22x18x2 +25x1x14 +23x25x30 +8x7x7 +30x19x8 +17x6x15 +2x11x20 +8x3x22 +23x14x26 +8x22x25 +27x1x2 +10x26x2 +28x30x7 +5x30x7 +27x16x30 +28x29x1 +8x25x18 +20x12x29 +9x19x9 +7x25x15 +25x18x18 +11x8x2 +4x20x6 +18x5x20 +2x3x29 +25x26x22 +18x25x26 +9x12x16 +18x7x27 +17x20x9 +6x29x26 +17x7x19 +21x7x5 +29x15x12 +22x4x1 +11x12x11 +26x30x4 +12x24x13 +13x8x3 +26x25x3 +21x26x10 +14x9x26 +20x1x7 +11x12x3 +12x11x4 +11x15x30 +17x6x25 +20x22x3 +1x16x17 +11x5x20 +12x12x7 +2x14x10 +14x27x3 +14x16x18 +21x28x24 +14x20x1 +29x14x1 +10x10x9 +25x23x4 +17x15x14 +9x20x26 +16x2x17 +13x28x25 +16x1x11 +19x16x8 +20x21x2 +27x9x22 +24x18x3 +23x30x6 +4x18x3 +30x15x8 +27x20x19 +28x29x26 +2x21x18 +1x23x30 +1x9x12 +4x11x30 +1x28x4 +17x10x10 +12x14x6 +8x9x24 +8x3x3 +29x8x20 +26x29x2 +29x25x25 +11x17x23 +6x30x21 +13x18x29 +2x10x8 +29x29x27 +27x15x15 +16x17x30 +3x3x22 +21x12x6 +22x1x5 +30x8x20 +6x28x13 +11x2x23 +14x18x27 +6x26x13 +10x24x24 +4x24x6 +20x8x3 +23x11x5 +29x5x24 +14x15x22 +21x17x13 +10x10x8 +1x11x23 +21x19x24 +19x9x13 +21x26x28 +25x11x28 +2x17x1 +18x9x8 +5x21x6 +12x5x2 +23x8x15 +30x16x24 +7x9x27 +16x30x7 +2x21x28 +5x10x6 +8x7x1 +28x13x5 +11x5x14 +26x22x29 +23x15x13 +14x2x16 +22x21x9 +4x20x3 +18x17x19 +12x7x9 +6x12x25 +3x30x27 +8x19x22 +1x9x27 +23x20x12 +14x7x29 +9x12x12 +30x2x6 +15x7x16 +19x13x18 +11x8x13 +16x5x3 +19x26x24 +26x8x21 +21x20x7 +15x1x25 +29x15x21 +22x17x7 +16x17x10 +6x12x24 +8x13x27 +30x25x14 +25x7x10 +15x2x2 +18x15x19 +18x13x24 +19x30x1 +17x1x3 +26x21x15 +10x10x18 +9x16x6 +29x7x30 +11x10x30 +6x11x2 +7x29x23 +13x2x30 +25x27x13 +5x15x21 +4x8x30 +15x27x11 +27x1x6 +2x24x11 +16x20x19 +25x28x20 +6x8x4 +27x16x11 +1x5x27 +12x19x26 +18x24x14 +4x25x17 +24x24x26 +28x3x18 +8x20x28 +22x7x21 +24x5x28 +23x30x29 +25x16x27 +28x10x30 +9x2x4 +30x2x23 +21x9x23 +27x4x26 +2x23x16 +24x26x30 +26x1x30 +10x4x28 +11x29x12 +28x13x30 +24x10x28 +8x12x12 +19x27x11 +11x28x7 +14x6x3 +6x27x5 +6x17x14 +24x24x17 +18x23x14 +17x5x7 +11x4x23 +5x1x17 +26x15x24 +3x9x24 +5x3x15 +5x20x19 +5x21x2 +13x5x30 +19x6x24 +19x17x6 +23x7x13 +28x23x13 +9x1x6 +15x12x16 +21x19x9 +25x5x5 +9x7x9 +6x5x8 +3x11x18 +23x25x11 +25x4x6 +4x27x1 +4x3x3 +30x11x5 +9x17x12 +15x6x24 +10x22x15 +29x27x9 +20x21x11 +18x10x5 +11x2x2 +9x8x8 +1x26x21 +11x11x16 +2x18x30 +29x27x24 +27x8x18 +19x3x17 +30x21x26 +25x13x25 +20x22x1 +10x1x12 +11x17x15 +29x11x30 +17x30x27 +21x22x17 +13x6x22 +22x16x12 +27x18x19 +4x13x6 +27x29x10 +3x23x10 +26x16x24 +18x26x20 +11x28x16 +21x6x15 +9x26x17 +8x15x8 +3x7x10 +2x28x8 +1x2x24 +7x8x9 +19x4x22 +11x20x9 +12x22x16 +26x8x19 +13x28x24 +4x10x16 +12x8x10 +14x24x24 +19x19x28 +29x1x15 +10x5x14 +20x19x23 +10x7x12 +1x7x13 +5x12x13 +25x21x8 +22x28x8 +7x9x4 +3x20x15 +15x27x19 +18x24x12 +16x10x16 +22x19x8 +15x4x3 +9x30x25 +1x1x6 +24x4x25 +13x18x29 +10x2x8 +21x1x17 +29x14x22 +17x29x11 +10x27x16 +25x16x15 +14x2x17 +12x27x3 +14x17x25 +24x4x1 +18x28x18 +9x14x26 +28x24x17 +1x26x12 +2x18x20 +12x19x22 +19x25x20 +5x17x27 +17x29x16 +29x19x11 +16x2x4 +23x24x1 +19x18x3 +28x14x6 +18x5x23 +9x24x12 +15x4x6 +15x7x24 +22x15x8 +22x1x22 +6x4x22 +26x1x30 +8x21x27 +7x1x11 +9x8x18 +20x27x12 +26x23x20 +26x22x30 +24x3x16 +8x24x28 +13x28x5 +4x29x23 +22x5x8 +20x22x3 +9x9x17 +28x3x30 +10x13x10 +10x25x13 +9x20x3 +1x21x25 +24x21x15 +21x5x14 +13x8x20 +29x17x3 +5x17x28 +16x12x7 +23x1x24 +4x24x29 +23x25x14 +8x27x2 +23x11x13 +13x4x5 +24x1x26 +21x1x23 +10x12x12 +21x29x25 +27x25x30 +24x23x4 +1x30x23 +29x28x14 +4x11x30 +9x25x10 +17x11x6 +14x29x30 +23x5x5 +25x18x21 +8x7x1 +27x11x3 +5x10x8 +11x1x11 +16x17x26 +15x22x19 +16x9x6 +18x13x27 +26x4x22 +1x20x21 +6x14x29 +11x7x6 +1x23x7 +12x19x13 +18x21x25 +15x17x20 +23x8x9 +15x9x26 +9x12x9 +12x13x14 +27x26x7 +11x19x22 +16x12x21 +10x30x28 +21x2x7 +12x9x18 +7x17x14 +13x17x17 +3x21x10 +30x9x15 +2x8x15 +15x12x10 +23x26x9 +29x30x10 +30x22x17 +17x26x30 +27x26x20 +17x28x17 +30x12x16 +7x23x15 +30x15x19 +13x19x10 +22x10x4 +17x23x10 +2x28x18 +27x21x28 +24x26x5 +6x23x25 +17x4x16 +14x1x13 +23x21x11 +14x15x30 +26x13x10 +30x19x25 +26x6x26 +9x16x29 +15x2x24 +13x3x20 +23x12x30 +22x23x23 +8x21x2 +18x28x5 +21x27x14 +29x28x23 +12x30x28 +17x16x3 +5x19x11 +28x22x22 +1x4x28 +10x10x14 +18x15x7 +18x11x1 +12x7x16 +10x22x24 +27x25x6 +19x29x25 +10x1x26 +26x27x30 +4x23x19 +24x19x4 +21x11x14 +4x13x27 +9x1x11 +16x20x8 +4x3x11 +1x16x12 +14x6x30 +8x1x10 +11x18x7 +29x28x30 +4x21x8 +3x21x4 +6x1x5 +26x18x3 +28x27x27 +17x3x12 +6x1x22 +23x12x28 +12x13x2 +11x2x13 +7x1x28 +27x6x25 +14x14x3 +14x11x20 +2x27x7 +22x24x23 +7x15x20 +30x6x17 +20x23x25 +18x16x27 +2x9x6 +9x18x19 +20x11x22 +11x16x19 +14x29x23 +14x9x20 +8x10x12 +18x17x6 +28x7x16 +12x19x28 +5x3x16 +1x25x10 +4x14x10 +9x6x3 +15x27x28 +13x26x14 +21x8x25 +29x10x20 +14x26x30 +25x13x28 +1x15x23 +6x20x21 +18x2x1 +22x25x16 +23x25x17 +2x14x21 +14x25x16 +12x17x6 +19x29x15 +25x9x6 +19x17x13 +24x22x5 +19x4x13 +10x18x6 +6x25x6 +23x24x20 +8x22x13 +25x10x29 +5x12x25 +20x5x11 +7x16x29 +29x24x22 +28x20x1 +10x27x10 +6x9x27 +26x15x30 +26x3x19 +20x11x3 +26x1x29 +6x23x4 +6x13x21 +9x23x25 +15x1x10 +29x12x13 +7x8x24 +29x30x27 +3x29x19 +14x16x17 +4x8x27 +26x17x8 +10x27x17 +11x28x17 +17x16x27 +1x8x22 +6x30x16 +7x30x22 +20x12x3 +18x10x2 +20x21x26 +11x1x17 +9x15x15 +19x14x30 +24x22x20 +11x26x23 +14x3x23 +1x28x29 +29x20x4 +1x4x20 +12x26x8 +14x11x14 +14x19x13 +15x13x24 +16x7x26 +11x20x11 +5x24x26 +24x25x7 +21x3x14 +24x29x20 +7x12x1 +16x17x4 +29x16x21 +28x8x17 +11x30x25 +1x26x23 +25x19x28 +30x24x5 +26x29x15 +4x25x23 +14x25x19 +29x10x7 +29x29x28 +19x13x24 +21x28x5 +8x15x24 +1x10x12 +2x26x6 +14x14x4 +10x16x27 +9x17x25 +25x8x7 +1x9x28 +10x8x17 +4x12x1 +17x26x29 +23x12x26 +2x21x22 +18x23x13 +1x14x5 +25x27x26 +4x30x30 +5x13x2 +17x9x6 +28x18x28 +7x30x2 +28x22x17 +14x15x14 +10x14x19 +6x15x22 +27x4x17 +28x21x6 +19x29x26 +6x17x17 +20x13x16 +25x4x1 +2x9x5 +30x3x1 +24x21x2 +14x19x12 +22x5x23 +14x4x21 +10x2x17 +3x14x10 +17x5x3 +22x17x13 +5x19x3 +29x22x6 +12x28x3 +9x21x25 +10x2x14 +13x26x7 +18x23x2 +9x14x17 +21x3x13 +13x23x9 +1x20x4 +11x4x1 +19x5x30 +9x9x29 +26x29x14 +1x4x10 +7x27x30 +8x3x23 +1x27x27 +7x27x27 +1x26x16 +29x16x14 +18x6x12 +24x24x24 +26x2x19 +15x17x4 +11x7x14 +14x19x10 +9x10x1 +14x17x9 +20x19x13 +25x20x8 +24x20x21 +26x30x2 +24x2x10 +28x4x13 +27x17x11 +15x3x8 +11x29x10 +26x15x16 +4x28x22 +7x5x22 +10x28x9 +6x28x13 +10x5x6 +20x12x6 +25x30x30 +17x16x14 +14x20x3 +16x10x8 +9x28x14 +16x12x12 +11x13x25 +21x16x28 +10x3x18 +5x9x20 +17x23x5 +3x13x16 +29x30x17 +2x2x8 +15x8x30 +20x1x16 +23x10x29 +4x5x4 +6x18x12 +26x10x22 +21x10x17 +26x12x29 +7x20x21 +18x9x15 +10x23x20 +20x1x27 +10x10x3 +25x12x23 +30x11x15 +16x22x3 +22x10x11 +15x10x20 +2x20x17 +20x20x1 +24x16x4 +23x27x7 +7x27x22 +24x16x8 +20x11x25 +30x28x11 +21x6x24 +15x2x9 +16x30x24 +21x27x9 +7x19x8 +24x13x28 +12x26x28 +16x21x11 +25x5x13 +23x3x17 +23x1x17 +4x17x18 +17x13x18 +25x12x19 +17x4x19 +4x21x26 +6x28x1 +23x22x15 +6x23x12 +21x17x9 +30x4x23 +2x19x21 +28x24x7 +19x24x14 +13x20x26 +19x24x29 +8x26x3 +16x12x14 +17x4x21 +8x4x20 +13x27x17 +9x21x1 +29x25x6 +7x9x26 +13x25x5 +6x9x21 +12x10x11 +30x28x21 +15x6x2 +8x18x19 +26x20x24 +26x17x14 +27x8x1 +19x19x18 +25x24x27 +14x29x15 +22x26x1 +14x17x9 +2x6x23 +29x7x5 +14x16x19 +14x21x18 +10x15x23 +21x29x14 +20x29x30 +23x11x5 \ No newline at end of file diff --git a/2015/03/example.txt b/2015/03/example.txt new file mode 100644 index 0000000..9815d11 --- /dev/null +++ b/2015/03/example.txt @@ -0,0 +1 @@ +^>v< \ No newline at end of file diff --git a/2015/03/golang/.vscode/settings.json b/2015/03/golang/.vscode/settings.json new file mode 100644 index 0000000..122fb2e --- /dev/null +++ b/2015/03/golang/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "[go]": { + "editor.insertSpaces": false, + "editor.formatOnSave": true, + "editor.defaultFormatter": "golang.go", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } + } +} \ No newline at end of file diff --git a/2015/03/golang/go.mod b/2015/03/golang/go.mod new file mode 100644 index 0000000..624149e --- /dev/null +++ b/2015/03/golang/go.mod @@ -0,0 +1,3 @@ +module aoc/day-3 + +go 1.24.4 diff --git a/2015/03/golang/main.go b/2015/03/golang/main.go new file mode 100644 index 0000000..e2a7c29 --- /dev/null +++ b/2015/03/golang/main.go @@ -0,0 +1,87 @@ +package main + +import ( + "fmt" + "os" + "strings" +) + +type Point struct { + x, y int +} + +func main() { + input := readFile("../input.txt") + fmt.Println(input) + fmt.Println(part1(input)) + fmt.Println(part2(input)) +} + +func part1(input string) int { + data := strings.Split(input, "") + locations := make(map[Point]int) + current := Point{x: 0, y: 0} + locations[current] = 1 + for _, v := range data { + current = updateLocation(current, v) + l, exists := locations[current] + if exists { + locations[current] = l + 1 + } else { + locations[current] = 1 + } + } + return len(locations) +} + +func part2(input string) int { + data := strings.Split(input, "") + locations := make(map[Point]int) + santa := Point{x: 0, y: 0} + robot := Point{x: 0, y: 0} + locations[santa] = 1 + locations[robot] = 1 + for i, v := range data { + if i%2 == 0 { + santa = updateLocation(santa, v) + l, exists := locations[santa] + if exists { + locations[santa] = l + 1 + } else { + locations[santa] = 1 + } + } else { + robot = updateLocation(robot, v) + l, exists := locations[robot] + if exists { + locations[robot] = l + 1 + } else { + locations[robot] = 1 + } + } + } + return len(locations) +} + +func updateLocation(point Point, direction string) Point { + switch direction { + case "^": + return Point{point.x, point.y + 1} + case "v": + return Point{point.x, point.y - 1} + case ">": + return Point{point.x + 1, point.y} + case "<": + return Point{point.x - 1, point.y} + default: + return point + } +} + +func readFile(filename string) string { + content, err := os.ReadFile(filename) + if err != nil { + return "" + } + return string(content) +} diff --git a/2015/03/input.txt b/2015/03/input.txt new file mode 100644 index 0000000..a5954e7 --- /dev/null +++ b/2015/03/input.txt @@ -0,0 +1 @@ +v>vvv>v<<<^^^^^<<^^>v^>^>^>^>^>^<<^><<<^vvvv>^>^><^v^><^<>^^>^vvv^>^>^^<>><>^>vvv>>^vv>^<><>^^>^>><<^><><>^<^>>vvv>v>>>v<<^<><^v>^^v^^^<^v^^>>><^>^>v<>^<>>^>^^v^>>><>v^v<>>^>^<>v^>^<>^v^^^v^^>>vv<<^^><^^>^^<^>>^^^^^v^vv<>>v^v<^v^^<><^<^vv^><>><><>v>vvv^vv^^<<><<<^v^>vvv^<^>vvvv^>^>>^v^v>vv^<>><^^^>^>>v>^>v^<>v><^<^^^vv<^^<>v^v^vv<>>>>v^v<>><^^v>vv^^>v^v>v>v>>vv>^^>^v><<^<vv^^^v>v^^^>><^^>v>^^v>>v^^^<^^v>^v>><^<^<>>v<<^^vv>^^^v<^<^^vv^>>v^>><<<>^vv^<^<>v^^<<^><>>^^^<^vv<^^^>><^^v>^^v^^^^<^v<^<<<<^v^<^^<>^^>^><<>>^v><>><^<^^^>>vv>^>^^^^^v^vvv><><^<^>v>v^v^>^><><^<^><>v<><>^v^^v>^<<<>^v^>^<v^<>>^vv>v>>>^<^>>>>>v>>^v>v><>>vvv<^^><<^>^>v<^vvvv<^^^v^^^>v^v<>v<^^v>>><>v>v>>^^<^^v><<<<<^vv<^<>^>>>^v>^v>vv>^v<>v>v<^>>v>>^>^><^^v<><><^^>^^^^>vv^v^v>^v^^v^^v>><^v>>vv<>vvvv<>>^v^>^>>v^v^<<>>^v<^^vv^><>v>^>v><<<<<<<^>^^v^<<^^>>vvv^<><>><>^^v<<^^v<^^>v^>>>v^v>v^><>v<<>v>^^v><<<<><^v^v>>^<>^<<>^>v<<>><^<<<<^v>^<^v>v>vv^>v<^<<>v^v>><v>v>>v^vvv^^>>>v^<^<<^^<<<>v^<v<^^<>^>v>>v<>^>^^>>^v<<>v^^^>>>^vv<^v^>v>^><>v^^<>^^v^^vv^<^>^<<>><<^>^v>>><<<<><<^v>v^<^><^<>>v^>^^^<>>v<>>^>>v^><<>vvv><^>>v><>v>>^>v><<><<>^<>^^^vv>v^^>>^>^<^vv^>v^>^><^<^><><v<^^v^^<<<<^><^^<^><>>^v<<^<<^vv>v>>v<^<^vv>>v^v<>^>v<>^v<<>^^v>>>v^>^v^v>^^^v><^>vvv^<<<>v<>v>^>vv^<^^v^><^^^^^v<^>>vv^v^>^^<>>><^v^<v>^v>^^v<>>vv>>^v>>^<<<<^><<<><^^>>v<>^vvvv>v^^^>^^^>^<^^vv<^v^v<v^^<>^>^<^v>vvv><<^><><^^v<<><^^><>^v>^<><<^<^^<<>vv<>^^<<^>><<<>>vvv>^>v^^v^><<^>v>^>^<^<<>v<^>vv^v^v<>vv<vv<^>v^<>^vv^v^>>>v^v><^<><<>vv^>vvv^>v>>><^^vvv<^<^>>^^>^^vv>>><^v<>^v^<<>v^^^^>>^<^>^v<^^^^v>^>>v>^>^>>>v^<<^>^<<^^<>v<^v<^<>v^v>^^v^vv>vvv>v^<^>>vvvv<>>^^<>v^<><>v<^<>v<>^>v<>vv>v<^^>v>><>>^<^^<>>^>^>vvv^v>>^>^>v><><<>v<>^v<^vv^^^<>^^<<^^^v<>>v^>vvvv>^^v^>^>^<<><^^^^<<>^<>vv^<><^>^^<>v^<>>>v><>vvvvv>v>v^^>^<vv>>v<<^<>^^^v^<><>>^<<>>><>v>^>^^^^vv^^<<><^^<v>vv<<<^<v<>>^<^>^>>v>><^^<>><<<><<><^<^v<^^v<<>><<<<^>v^>v^v^<<>>v<><^<>><>>^><>v^v>v<<>v<>v^^><<>>>v<<>>>>^>v>>>>vv>v>^<^^^<>v^<^^v^vvv^>vv>^^<<>vvv<<^^<^>^>>v>v<<<<<>^^vv^>>v>^<^^v>>v>^v<><>^<^>v>v<<<^^^v>^<<<>vvv^v^^>^>>^>v>v<>^^><>>v>^>v<<<^^^v^><><^<^<>>^v>vv<^v<<^vv>v^<v>v>^v^>^v<<^v^vv>v^<<>>v<>>vvv^^vv^^v><^>v^vv<^^<<>v<><^><>^<><vv<>^vv>v><^^v<>><^v^v><><>>vv<>>>><<^>>><^^^vvv<<><>>>v<<<<<>v^^<<^vv^>vv>^<>^v^^<>^^^vv>v^^v>^v>^<>v^^^>v^^v<^>v^v^<>v>v>v<^^vv^v<^^^^vv<<><<^>>^^<v^>>^^^><^^>^v^v>^<^>>^v<>^<^>v>^>^v^<^^^<^vv<^^>>v^>^v^>>>>^v>^^<<^<^^v^<<<>>><>^<>>>v<<><<^^<^^>v^>^>v^v<><^^v>^<^v^v>>>^^<^^vv<<^><><^<>v>>>vv>><^^^v^^^v<^^v>v<>>^^<><>v>^^>>>><>v>^v>^vv^v>^>^^^><>^<<>>><<<><>^^<<v^>v>v^^^>^>^v<<>v>vv>><<^^^>>^><^>v<^<^v>><^^>v<><>^><<><>v^>v<><^^>><>^<^^v<^<><<<^^<><>>>^>v^<><^<<^vv<^v^v^v<>v^^v>v^<^>^vv^>>><<>v^vv^<>^v^><v^<><>>v^v^><>v^vvv^^^<<^<>v^v>^^><>v>>v^<>^>v>^>><<>v^v><^v>v>>><^<^^>vv<^>^<^>^^v><><^<<^^vvv^v>^>^<>>vv>v^^v^^vv<^^>><^v>v^<vvv<>>^v><<>^v<<<>^><^vv><<^^v<^vv<>^v>>>><<<<^^<^v>^<^^<^<^^>>^^v>^^^^v^^^<<>^^vv<><^<<><>^>v<>>v^^^>^v^^v^v>>>>>^v>^>^^v>><^^^v<<^^>^<^<^><^<<>v>v>^v<><^>vv^vv><^><>^><<^^>v>v>^^^<>v>^v^^>vv^vv<^^>><>^>^<>v>><>^v<v>^><^^^v^<<^v^>v^>vv>v^<>v><^v>v<>^v<>^v>^^<>vvv^>^<><^>><^<>^v<<^v^><<^<^v>^vv^v>v<^^vv<><>vv^>v<<>v>v>^^>>><<<^>^vv>>^^^>v<^vv<>v<<>>>^<^^^^>v<^^<>v>vvv^>v>v<^>^v^<>v>>vvv>^^><^vvv>><>>>^<<^>>v^^>>^><>v<^^v^<<>^<>>><^v^v>>>^vvvv^<><<>v>^v^v>v><^<<^>^^>v<^v^<^>v>^<v^<>v^<>vv^<>^>^>v^>^vv<>^^<<>>v<>^v<><><<v>v^>vv^><<<^v<><>^^v^^v^^^>^<>>>>^><>>v>>v<<>v<<<<<<<^v<<^^^v<^v<>v^^<<<^<>>v^vv^<^^<^^<<^>vv><^<^^v<<<^><^v<^><>v^v^^>>><<^<<^<>>^>>^<<<>>v>^v>><>v>>v>><>v>><^^>^^vv<^^<^>vv><<^>><<>^vvv><^v^>vvv^>>^<><^>^<<>>v^v>v<<>^>>^>v<^^<^<<>^^v^^v>v<>^<^^<v^^vvv^^v>^vv^<>v<^v^>^vv<v^<<^>^><^^<^^<^>vv^<>^<>^>^^<^v><<<^>vv^vv>v^v<>^^v^<^^^vvv^>v^<><>v>vv<^v^>>^v<^^vv>vv>^>><<<<>^><>>v<>>v>^v<^vv>^^>^<^<>v^v<^^v<^^>^^<>^^^^>^vv<^>><^>vv^>v^>^vv>^>v^^<>>^v<>>v<^>^v>vv^>^>>>vvv>vv>^><^v<<<>^^v>v^v<^^^v^^>^><<^^>^><^^^^^^^<^v<^>>vv>>^v^vv<>><>^>>>^^^^^><^<<^v<>vv^>>v<^vv<^v<>v<>^v^<<>>>>v^^>^vv<<><<>v^v<^<^>>^^><^>^><<><^<><>vv>>>>^><<^^^<^v^>^>^^>^<^><^^<^^<>><>><<<>^>^^v<>^<<>vv>^>>^>^<>>vv<^^vv<>v<>^^>^v^v^v>^^^v<<<^vv^><>^>^^vv>v^<<^><>>vv^^^^^>v>>v<<<>^<><^v<^v<^>^<>^vvv>^>v><<v>vv^<^^>v^v>^<^v^<^v<<^>^<><>^^<>>^^<^v^<^<<^>v^^>v^v^^^<^v<<^v>^>>^^^^^><<>v^><>v^^<^v<^<v^^^><^^^><<<<<>^<<^<>>v<^>><^^^<>>>>vvv>v<>>>v^v^v<^<<^>^<<>v>>^>^^><^><<^v^^<^<>v^v>vv<>>>>>>v<<>>^^>v<<<>^<<^><<^v>vv>>>><><>v^<^v><^>v>>^^^v<^>>^>>v<<^<<>vvv>>^v<>>^v><<<^v^v<>^vvv^^^<>vvv^^^>>v>^>^<><<>vv>^v^>>^<v><><<>^^><>^<<>^v<<>>v^vv<<>^^v^v^v><^>v>v<^<<^<^>vv>^v<<^>^>>v^<v^^v^^>><<<>^v>><>v<>><^v>^^v<<<<^v^vv<<<<><><^<^<^v><<^^v^<<<<<^^><^^>vvv<^><>vvv^v^>^>^^^v<<^<^^>vv^vv^><^v^<<>v<^^>^vv<<>^<<><^>v^<<^<>v><><>v<<^^><^^^v>>v>^vv>^v^^<><<<<<^>^v^<^<^^>^vv<^>v^^v^<>v<>v^v>vvv><><<><>vv^^>^^^<><^>^^^>vvv><>v<>>v^>v^^vv^>v>>>><^^>^v^v>>vv<^>><<<^>><^<^>^<^>^>>v^<^<>^<^^<>^<>>><^<^<^<<^><^^>vv<>^^>v^>>v>>>v<<^vv^<><>>>^^<^v^>>^>>><<^<>^>>^v>>><^^^<<^vv><><<>^^^<>^^^>><>>>^>vv>^<^<>>^<^^>v^>vv><><>>><><<^^v<<^vvv<><><<^v>^v<>^<^^^v^>^<^><^v>v>^v<>><^^v^^^^^<>>vvvv>>>>^<<><^v>vv>>^^><<><><^^^<^<^<<^v>^^^>>>>><v^^^<>>vv^^^v<><^>v>><<><>v<^><<>>><>v>^<>>^>v^v<<<<>^vv<<>>>>>vv<><>^<^v>vv^<>><<>^<>><^>>>><<>^^>><<<^^^^^v>>^<<>>vvvv<^v^vvv<<<^><>>>>vv^<^v>v<^<>^v>>^<^^v^>>><>^^<^v>>v<<>vvvv>^><>v^<>^<<^vv<^>>^v^>^^<<<^>>^^>^<^^<^<<v^^v^^<^v<^>>><<>vv<<^><^>vv<^>>^vv>>>^>>><^<<<>>^<<>><^<<^^^>>v^^>v<<<>v>v>v^<>>>^vvv><<^^<<><^v>>>>vv^^v^v<>v>v<<<<><<>vv<><^^^<>>v>>>>^^<><^<^v^>>^^v>^<v>^^>^v^<>>v^^<^v^^<<>^^>v^^>><<<<^<^^v>^^v>v<^>v^<>vv>>^^v>v^^>vvvvv<<>vv>vvvvvv>>v>>^^^vv^^><>v^^^^v>vv>v<^v>>>>^>^>^v>^>>><<>>^vv>>>><><<^<^><^vv^v>>>>>v>^>^^v^>v<^v^<^<v<>>^vv<<>^v^v>><><<>>v^^<<>^^<>v<<^^<^^>^^>^<^><>>v<>>^^<^>><<>>^v^>v>v<<^^<<^>v>v^^v^^<<>^v>v>v<^^>^v<><^<<v<^<<<<^^>v^v^^><<><^^^v^^>>>vvv><>vv<>>^^v^v<<^>v^^v^>vv>^<^^<^v^^<^^v<<>>vv<^>>^><><>v>>v<>^<<>>> \ No newline at end of file diff --git a/2015/04/golang/.vscode/settings.json b/2015/04/golang/.vscode/settings.json new file mode 100644 index 0000000..122fb2e --- /dev/null +++ b/2015/04/golang/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "[go]": { + "editor.insertSpaces": false, + "editor.formatOnSave": true, + "editor.defaultFormatter": "golang.go", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } + } +} \ No newline at end of file diff --git a/2015/04/golang/go.mod b/2015/04/golang/go.mod new file mode 100644 index 0000000..c169ca8 --- /dev/null +++ b/2015/04/golang/go.mod @@ -0,0 +1,3 @@ +module aoc/day-4 + +go 1.24.4 diff --git a/2015/04/golang/main.go b/2015/04/golang/main.go new file mode 100644 index 0000000..830c643 --- /dev/null +++ b/2015/04/golang/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "crypto/md5" + "encoding/hex" + "fmt" + "strconv" +) + +const key = "bgvyzdsv" + +func main() { + i := 0 + var found = false + for !found { + hash := genMD5Hash(key + strconv.Itoa(i)) + if hash[0:6] == "000000" { + found = true + } else { + i += 1 + } + } + fmt.Println(i) +} + +func genMD5Hash(text string) string { + hash := md5.Sum([]byte(text)) + return hex.EncodeToString(hash[:]) +} diff --git a/2025/01/JS/deno.json b/2025/01/JS/deno.json new file mode 100644 index 0000000..3c5130f --- /dev/null +++ b/2025/01/JS/deno.json @@ -0,0 +1,5 @@ +{ + "tasks": { + "dev": "deno run --watch main.ts" + } +} diff --git a/2025/01/JS/example.txt b/2025/01/JS/example.txt new file mode 100644 index 0000000..d03fad7 --- /dev/null +++ b/2025/01/JS/example.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 \ No newline at end of file diff --git a/2025/01/JS/input.txt b/2025/01/JS/input.txt new file mode 100644 index 0000000..8061400 --- /dev/null +++ b/2025/01/JS/input.txt @@ -0,0 +1,4732 @@ +L1 +R43 +R6 +R50 +R47 +R18 +L12 +L21 +R21 +R38 +R15 +R1 +L19 +R36 +L33 +R25 +L6 +R25 +L7 +L44 +R16 +L43 +R27 +L26 +R17 +R32 +R49 +L39 +R22 +L1 +L10 +R24 +L23 +R10 +R13 +L34 +L34 +L32 +R2 +L14 +L26 +L46 +L42 +R35 +R21 +R38 +L8 +L15 +L29 +L52 +L10 +L54 +R7 +R35 +L16 +L99 +L60 +R33 +L38 +L62 +L5 +L42 +L53 +R33 +L68 +L27 +R19 +L57 +R36 +R64 +L27 +R84 +R32 +R11 +L39 +L22 +L11 +R72 +R78 +L3 +L75 +L52 +R71 +R81 +R59 +L73 +R62 +L57 +L56 +L99 +R64 +R63 +R64 +L77 +L50 +R57 +R43 +R86 +L86 +R9 +L9 +R95 +R430 +L5 +R27 +R86 +R67 +L97 +L29 +L993 +L14 +L27 +R21 +L205 +R913 +R74 +R57 +R63 +L754 +R791 +L21 +L28 +R91 +L63 +L79 +R61 +R61 +L622 +L58 +L69 +R879 +L64 +L718 +L23 +L47 +R26 +R74 +R30 +R46 +R74 +R850 +R53 +L775 +L78 +R8 +L21 +R713 +L95 +L27 +R37 +L9 +L36 +R10 +L96 +R34 +L27 +L36 +R45 +R33 +L93 +R60 +L97 +R3 +R94 +R8 +R50 +R67 +R975 +R83 +L27 +L42 +R86 +R904 +L30 +L81 +R7 +L43 +R612 +L67 +L7 +R45 +R63 +R97 +R41 +R29 +L224 +R56 +L38 +L64 +R63 +L21 +L94 +R52 +L61 +L39 +R892 +L92 +R775 +L28 +R91 +R70 +R87 +L52 +R57 +R97 +L27 +L97 +L673 +R44 +R63 +L96 +L7 +L36 +R2 +R25 +R44 +L54 +L85 +L89 +L61 +R50 +R17 +L35 +L382 +R67 +L928 +L12 +L553 +R26 +R7 +R93 +L10 +R10 +R92 +R257 +L5 +R72 +R84 +L98 +L2 +L823 +R85 +L50 +L412 +L80 +R227 +L354 +L93 +L4 +L796 +L834 +R62 +L903 +L46 +L79 +R428 +L28 +L20 +L139 +L41 +R82 +R18 +R87 +R99 +R14 +R970 +R30 +L58 +L54 +L29 +L54 +L5 +R43 +L685 +R542 +R618 +R482 +L536 +L43 +R36 +R27 +L84 +R37 +L14 +L14 +L73 +R5 +L41 +L21 +L779 +R39 +R61 +L99 +L58 +L484 +R3 +L36 +R37 +L99 +L64 +R94 +R34 +L28 +L9 +R45 +L23 +L65 +R91 +R61 +L880 +L16 +L104 +R76 +R23 +R1 +R149 +L47 +R70 +R14 +L16 +R81 +R49 +L33 +L67 +R677 +L77 +L420 +R120 +R59 +L59 +R90 +L47 +L37 +L6 +R71 +L71 +R82 +R78 +R40 +R39 +L54 +R82 +L9 +R2 +R41 +R99 +R9 +R91 +L69 +R69 +L41 +R41 +L482 +R19 +R388 +R75 +L38 +L62 +L5 +R5 +L46 +R93 +R645 +R8 +R1 +L1 +L7 +L875 +L807 +L57 +R46 +R55 +R45 +L89 +L4 +R11 +R26 +L613 +R469 +L60 +R84 +R69 +R7 +R159 +R24 +L47 +R51 +R13 +L878 +L22 +L220 +L29 +R48 +R29 +L37 +R75 +R42 +R87 +L95 +R21 +R179 +L188 +L54 +R42 +L56 +L46 +L39 +L493 +L74 +R9 +L81 +R24 +L28 +L57 +L46 +L13 +R11 +L22 +L96 +R7 +L94 +L82 +R99 +R12 +R65 +L83 +L17 +L47 +L53 +L263 +L46 +L5 +R714 +R990 +R14 +L53 +L36 +R85 +L3 +L97 +L66 +R766 +L61 +R661 +L25 +L5 +R65 +L75 +L560 +R72 +R556 +R9 +L7 +R170 +R20 +R40 +L860 +L21 +R50 +R524 +R47 +L304 +R12 +R41 +L55 +L5 +L48 +R428 +R313 +R68 +R410 +R2 +L687 +R25 +R37 +R22 +R12 +L9 +R38 +R54 +R243 +L89 +L8 +R29 +L66 +L63 +L815 +R115 +L69 +R71 +R98 +R70 +R31 +L22 +R21 +R47 +R16 +R37 +L80 +L65 +R45 +R55 +L355 +L23 +L48 +R93 +R78 +L23 +L44 +R24 +L38 +L7 +L12 +R73 +L67 +R94 +L13 +L87 +R31 +L59 +R54 +R180 +L404 +L776 +R36 +L590 +R28 +L77 +L914 +R54 +L963 +R70 +R13 +R517 +L46 +R46 +L13 +L28 +R38 +R39 +L36 +R33 +L33 +R689 +R85 +R56 +R615 +L45 +L51 +R812 +R39 +R83 +L686 +L49 +L48 +L82 +L52 +R34 +R52 +R88 +L71 +L69 +R46 +R54 +L17 +R17 +R70 +L70 +L641 +L362 +R17 +L6 +L8 +R4 +R96 +R514 +L20 +L75 +R37 +R37 +R7 +L74 +R56 +L51 +L31 +R42 +R94 +L25 +L11 +L31 +L8 +L761 +R26 +R74 +L102 +R2 +L67 +R3 +R94 +R95 +L47 +L19 +L19 +L40 +R177 +L37 +L40 +L46 +R20 +R126 +R89 +R40 +R17 +R876 +R251 +L37 +R758 +R6 +R96 +L20 +R24 +R472 +R28 +L83 +L17 +R588 +L244 +R312 +R15 +R13 +L284 +L36 +L20 +L820 +L14 +R74 +L84 +L49 +R49 +L92 +R86 +R59 +R181 +R66 +L74 +R637 +R52 +L15 +L21 +R21 +R83 +R12 +R5 +L83 +R201 +R31 +L63 +L45 +R97 +R22 +R34 +R14 +L542 +L29 +R63 +L521 +R12 +L32 +L956 +L21 +R71 +R47 +R119 +R81 +R56 +L56 +R610 +R90 +R12 +R408 +R580 +L68 +R99 +L58 +R23 +R604 +R72 +L30 +L89 +R893 +L54 +L92 +R51 +L7 +R77 +L21 +L66 +L55 +L96 +R17 +R4 +L842 +L62 +R53 +R347 +L250 +R50 +R34 +R666 +R4 +L37 +L724 +L43 +R10 +L110 +R1 +L1 +R331 +R435 +R38 +L739 +R82 +R78 +R75 +R1 +R99 +L29 +L28 +L906 +R53 +R30 +R93 +L19 +L27 +L67 +R49 +L76 +R15 +L56 +L76 +R11 +L70 +R213 +L10 +R97 +L438 +R55 +L22 +R8 +L42 +R12 +L270 +R82 +L279 +L694 +R70 +R41 +R74 +L41 +R71 +L96 +L294 +R59 +L693 +L17 +R815 +L99 +R19 +R82 +L81 +R32 +L78 +R27 +L36 +R17 +R97 +R32 +R90 +L85 +L15 +L24 +L76 +L489 +R34 +R355 +L99 +L943 +L180 +R22 +R38 +R62 +R39 +L239 +L54 +L67 +L65 +R81 +L21 +R254 +R30 +R39 +R992 +L54 +L182 +L453 +L31 +R31 +L18 +L2 +L539 +R4 +R71 +L968 +R52 +R68 +R32 +R10 +R665 +R86 +R31 +L83 +L82 +R73 +L81 +L19 +R714 +R86 +R96 +R4 +R653 +L52 +R920 +R379 +R47 +L8 +L36 +R46 +L49 +R32 +L932 +R50 +L950 +L67 +R405 +L538 +L76 +L24 +R93 +R53 +L46 +R43 +L543 +R93 +R2 +R6 +R412 +L93 +L85 +R61 +L57 +R76 +L115 +L67 +L33 +L814 +L62 +L24 +R73 +L73 +L46 +L14 +R125 +R35 +R15 +L31 +L56 +L28 +R96 +L98 +R17 +L15 +R53 +R27 +L80 +L31 +R16 +L74 +L111 +L662 +R353 +R52 +R92 +L172 +L74 +R11 +L8 +L92 +L4 +R46 +R41 +L283 +R63 +R26 +L31 +L958 +R28 +R72 +L55 +R43 +R9 +L97 +L8 +R8 +R877 +L44 +R23 +L56 +R75 +L75 +L777 +R1 +L24 +L83 +L17 +R43 +R24 +R1 +L42 +L84 +R758 +L18 +R63 +R32 +R71 +L741 +R85 +R56 +R55 +L11 +L50 +L85 +R56 +R8 +R46 +L353 +L99 +L615 +L612 +L28 +L531 +L29 +R88 +L88 +R34 +L69 +R423 +L84 +L34 +R30 +L42 +R51 +L81 +R61 +R233 +R52 +L374 +R85 +L20 +L32 +L4 +R83 +L471 +R46 +L6 +R87 +R32 +R55 +L618 +L39 +L98 +L29 +L41 +R25 +L19 +L936 +L39 +L61 +L61 +L36 +L303 +R44 +L2 +L97 +R41 +R35 +L21 +L72 +R72 +L85 +L266 +R33 +R18 +L260 +R91 +L9 +R58 +R825 +L705 +R92 +R29 +R20 +R59 +R69 +L61 +R28 +R86 +R10 +R507 +R61 +L4 +R504 +L227 +L22 +R49 +R54 +L20 +L2 +R467 +L83 +L16 +L7 +L93 +R99 +R61 +R23 +L85 +R19 +L95 +L94 +L28 +R273 +R53 +R74 +R69 +L605 +L180 +R17 +R4 +R13 +L36 +L82 +L66 +L1 +R67 +R97 +R34 +L7 +R276 +L328 +L72 +L44 +R87 +R69 +L12 +L46 +L60 +R7 +L72 +R69 +L60 +R83 +R360 +L54 +R76 +L3 +R54 +R46 +R6 +L74 +L32 +R211 +R89 +R63 +L63 +L59 +L39 +L5 +R3 +R19 +L64 +L90 +L3 +L25 +L37 +R52 +R48 +R299 +L85 +L14 +R17 +L17 +L4 +L57 +L90 +L61 +L86 +R98 +L79 +R10 +L331 +L322 +R733 +L611 +R28 +R298 +R74 +L92 +L96 +L48 +R40 +R76 +L80 +R39 +L24 +R96 +L11 +R7 +R93 +R860 +L78 +L444 +R62 +L661 +R85 +L63 +R62 +R77 +L89 +R19 +L30 +L678 +L22 +R69 +L64 +L5 +L46 +L78 +L876 +R18 +L18 +L414 +R88 +R626 +L70 +R713 +L53 +R210 +R94 +L394 +L5 +R953 +L48 +L410 +L269 +R872 +R70 +R37 +L49 +R766 +L11 +R35 +L17 +R650 +L474 +R75 +R428 +R883 +L86 +L241 +R24 +R75 +L68 +L97 +R17 +R90 +L84 +L16 +R17 +L80 +L37 +R282 +R107 +R44 +L26 +R77 +L84 +R133 +R67 +R32 +R331 +L63 +R86 +R23 +R91 +R95 +R39 +R92 +R202 +L35 +L62 +R72 +L10 +R124 +L33 +R16 +R402 +L98 +R96 +L246 +L49 +R95 +R12 +L312 +R474 +R25 +L99 +L16 +L96 +R56 +R98 +L42 +L73 +R354 +L23 +R32 +L81 +R6 +R32 +R10 +L193 +R36 +L40 +L60 +L61 +R25 +L8 +R37 +R76 +L69 +L84 +L71 +L25 +R80 +L32 +R404 +L172 +R810 +L14 +L45 +L51 +R85 +R62 +R11 +L98 +L38 +R3 +R14 +L39 +L20 +L30 +R62 +R88 +L56 +L67 +R223 +R5 +L5 +R3 +R97 +L92 +R543 +L551 +R37 +R33 +R30 +R2 +L93 +L109 +L89 +L31 +R71 +R49 +L176 +L61 +L684 +R21 +L89 +L22 +L89 +L202 +R2 +R35 +R537 +R99 +R29 +L642 +L95 +R773 +R764 +R174 +L74 +L104 +R853 +R163 +R66 +R78 +L56 +R48 +L25 +R77 +L56 +R56 +L18 +R618 +L610 +L90 +L934 +R27 +L13 +R20 +R31 +L76 +R45 +L91 +L72 +R63 +L254 +L41 +L38 +L34 +L90 +R41 +L84 +R6 +L51 +L55 +R24 +R60 +R16 +L17 +R72 +L93 +R38 +L34 +R54 +L20 +R65 +R52 +R522 +L41 +R2 +R173 +R10 +L87 +L77 +L47 +L951 +R79 +L52 +R52 +R99 +R1 +R49 +L49 +R57 +L10 +R71 +R82 +L89 +L24 +L468 +R81 +L266 +R13 +L26 +R22 +R88 +R363 +L665 +L40 +R18 +L327 +R26 +L83 +L623 +R70 +R430 +L87 +L36 +L85 +L999 +L9 +R16 +L540 +R40 +L42 +R21 +L288 +L710 +L81 +R74 +L31 +R4 +R94 +L12 +L890 +R861 +R84 +R16 +R77 +L77 +R456 +L46 +L10 +L8 +L92 +R71 +L32 +L55 +L57 +R95 +L22 +R52 +L57 +L152 +R66 +L87 +R78 +R92 +L91 +L99 +R96 +R234 +R68 +R82 +L72 +R42 +R63 +R444 +R41 +R86 +L223 +R199 +L956 +L88 +L37 +R53 +R752 +R59 +R56 +R99 +R858 +L58 +L905 +R73 +L778 +L43 +L70 +R66 +L43 +R71 +R37 +R92 +R20 +R80 +R953 +R47 +L55 +L70 +R2 +L77 +R333 +R491 +R76 +L88 +L35 +R86 +L99 +L64 +L83 +R56 +L47 +R74 +L14 +R414 +L33 +L21 +R10 +L256 +R58 +R37 +R5 +L929 +R461 +L277 +R77 +R68 +R6 +R94 +R68 +L67 +R651 +L21 +L5 +L379 +R53 +R89 +R42 +L44 +R95 +R1 +R61 +L44 +R96 +R41 +L37 +L244 +L356 +L57 +L43 +R63 +R37 +L66 +L34 +R56 +L56 +R47 +R11 +L88 +R35 +R6 +L96 +L52 +L63 +L43 +R4 +R96 +L290 +R1 +R91 +L40 +R281 +R30 +R88 +R82 +L86 +R86 +R73 +R27 +R72 +L62 +R3 +L613 +R44 +R56 +R87 +L76 +L11 +R670 +L270 +L7 +L995 +L935 +L29 +R61 +L95 +L316 +L10 +L61 +L70 +R217 +L4 +R672 +L28 +R45 +R55 +R79 +L34 +R55 +R1 +L6 +L27 +R32 +L34 +R34 +R69 +L84 +L73 +L12 +R36 +R755 +L548 +L106 +R969 +L534 +R28 +L49 +R29 +L59 +L521 +L88 +L97 +R679 +L67 +R14 +L95 +R54 +L64 +L85 +R49 +R13 +L13 +R30 +R87 +L55 +L62 +L986 +R86 +R59 +L82 +L19 +L19 +R61 +R22 +R3 +L740 +R30 +R885 +R6 +R79 +L51 +L34 +L59 +L69 +R28 +L726 +L99 +R49 +R26 +L47 +R154 +L74 +R10 +R26 +L19 +R40 +L40 +R105 +R883 +R95 +R94 +R23 +L22 +L56 +R61 +L83 +R615 +L15 +L92 +L8 +L622 +R20 +R60 +R79 +L74 +R668 +R69 +R57 +R247 +R96 +R9 +R90 +R1 +R73 +L77 +R89 +L538 +R24 +L71 +L97 +R97 +R167 +L967 +L94 +R67 +L73 +L49 +R157 +R37 +R35 +L80 +L18 +L609 +L73 +R690 +R38 +R39 +L67 +L80 +L31 +R11 +R57 +R443 +L471 +L29 +L65 +R116 +L95 +L56 +L15 +L85 +R314 +R86 +R60 +R640 +L59 +L937 +R30 +R79 +L13 +R83 +L51 +L1 +R69 +R13 +L29 +R16 +L923 +L63 +R86 +L614 +R471 +L8 +R51 +R76 +L76 +R16 +R38 +L54 +R34 +R53 +R13 +R6 +L41 +L16 +L50 +L99 +L87 +L49 +R51 +L1 +R886 +R552 +L52 +R50 +R50 +R7 +R7 +R86 +L58 +R58 +R77 +L77 +R20 +L478 +L55 +L126 +L40 +L45 +L90 +R14 +L80 +L79 +L41 +R902 +L97 +L4 +L93 +R92 +R2 +R22 +R76 +R77 +L75 +L27 +R21 +L96 +R126 +R97 +L47 +R20 +R4 +L484 +R484 +L87 +L13 +L37 +R1 +L23 +L41 +L49 +L37 +R57 +R54 +L25 +R62 +L39 +R77 +R58 +R442 +L4 +L896 +L475 +L25 +R38 +R62 +L49 +R39 +R429 +R36 +R62 +L66 +L750 +L1 +R60 +R98 +L72 +R14 +L43 +L57 +R24 +R76 +L757 +L42 +L39 +R26 +R64 +R48 +L85 +R57 +R85 +R43 +L55 +L45 +R9 +R591 +L97 +R16 +L236 +L383 +R46 +L27 +L606 +L131 +L33 +L98 +R297 +R74 +R78 +R49 +R632 +L581 +R299 +L99 +L12 +L94 +L93 +L38 +R10 +L74 +L739 +R340 +R26 +R74 +R27 +L27 +L13 +L88 +R693 +L46 +L37 +L211 +R90 +L17 +L60 +L511 +R802 +R40 +R78 +R62 +R22 +L70 +L82 +L52 +L26 +L74 +L90 +L804 +R670 +L76 +L20 +L4 +L76 +R26 +R74 +L39 +R303 +L89 +R42 +R582 +R27 +R74 +R960 +L44 +R84 +L34 +R79 +R55 +R936 +L243 +R7 +L290 +R90 +L158 +L87 +L49 +R321 +R61 +R573 +L24 +R154 +L83 +R733 +L41 +R221 +R55 +R96 +R69 +L7 +R966 +L49 +R49 +L31 +L44 +R75 +L22 +L78 +L219 +R82 +R37 +L181 +L19 +R30 +L16 +R86 +L95 +L89 +R34 +L3 +L647 +R65 +R76 +R59 +L72 +L3 +R75 +L48 +R62 +L14 +L627 +L895 +R18 +L96 +R18 +L18 +R30 +R74 +L304 +L77 +R96 +R55 +R855 +R98 +L3 +L41 +R43 +R518 +L43 +R20 +L21 +R82 +R18 +L84 +R7 +L71 +R30 +L82 +L35 +R64 +L21 +L40 +R38 +R94 +R746 +L22 +L23 +R50 +R24 +R74 +L85 +L5 +R75 +R66 +L1 +L56 +R5 +L68 +R199 +R2 +R19 +R80 +L18 +L47 +L15 +R54 +L54 +R48 +R52 +R29 +L21 +R837 +L45 +L4 +L596 +L93 +L76 +L531 +R65 +L65 +L17 +R17 +R699 +L99 +R10 +R79 +R80 +R31 +L66 +L46 +L88 +R21 +L77 +R56 +R45 +R84 +R74 +L3 +L545 +L55 +R81 +R19 +L80 +L92 +R39 +L28 +R61 +R323 +L58 +L865 +R390 +R41 +R360 +R55 +R472 +R82 +L94 +L206 +L52 +R52 +L20 +R57 +R42 +L479 +L140 +R26 +R122 +R992 +R352 +R48 +L45 +L55 +L59 +L41 +R54 +R46 +R21 +L25 +R68 +R265 +L896 +L33 +R7 +R12 +L19 +L55 +L45 +R2 +L2 +R73 +L773 +R696 +L96 +R14 +R86 +L40 +R40 +L46 +R728 +R79 +R39 +R173 +R27 +L53 +L58 +R58 +L69 +R47 +R675 +L746 +R20 +L10 +L86 +R15 +L58 +R59 +L94 +R44 +R87 +L89 +L42 +R57 +L38 +L98 +R58 +L79 +L57 +L83 +L34 +L52 +R56 +R18 +R56 +L32 +R67 +L39 +R941 +L41 +L58 +R58 +R64 +R980 +L439 +L32 +L32 +L79 +R1 +L51 +R124 +L36 +R33 +L33 +R76 +R156 +R68 +R40 +L40 +R98 +L609 +R86 +L92 +L365 +R82 +R76 +R37 +L32 +R19 +R38 +L45 +R7 +L45 +L55 +L83 +R85 +R33 +R65 +L11 +L89 +L5 +R82 +R23 +R154 +L44 +L10 +L58 +R58 +L840 +R81 +R59 +R816 +R80 +R3 +R64 +L63 +R81 +L827 +L531 +R74 +R3 +L601 +R1 +R17 +L643 +R89 +R137 +R538 +L938 +L10 +R50 +L40 +L19 +L48 +R67 +L92 +R342 +L57 +R7 +R32 +R660 +R38 +L43 +R87 +R43 +L17 +R56 +L7 +L49 +R12 +R88 +L38 +L48 +R80 +L65 +L33 +L27 +R52 +L21 +R13 +R87 +R52 +L64 +L65 +L9 +R30 +L35 +R91 +L98 +R98 +L47 +R47 +R87 +R71 +R1 +L59 +L23 +R23 +R54 +L78 +L76 +L156 +R28 +R42 +R46 +L765 +R5 +R28 +R72 +L69 +L30 +L67 +R739 +R1 +L1 +R58 +L63 +L43 +R496 +L45 +R647 +R77 +R28 +R72 +L75 +L81 +L180 +R47 +L51 +R72 +R31 +R37 +R84 +R616 +L42 +L30 +R63 +R51 +R97 +R86 +L25 +R339 +L439 +R839 +R36 +R57 +L9 +R84 +L7 +L33 +R98 +R35 +L53 +L222 +R70 +R22 +L7 +R90 +L9 +R9 +R63 +L452 +L184 +R60 +L87 +R924 +R76 +L19 +L76 +L67 +L38 +L830 +R97 +R133 +R21 +L29 +R84 +L2 +R43 +L17 +L13 +L62 +L77 +R60 +R79 +L30 +L757 +R29 +L269 +R21 +R2 +R54 +R756 +L33 +L14 +R14 +L98 +L973 +L489 +R98 +R26 +L924 +L21 +L29 +R5 +L12 +R57 +R17 +L67 +R902 +L61 +R98 +R31 +L790 +L44 +L6 +R420 +R15 +L15 +L508 +L83 +L28 +R77 +R42 +L59 +L62 +L49 +R70 +L59 +R59 +R35 +L50 +L64 +R79 +R84 +R83 +R33 +R23 +R86 +L57 +L341 +L68 +L43 +R54 +L761 +R48 +L641 +L23 +L69 +R79 +L53 +R66 +R864 +R24 +L21 +R44 +L559 +R48 +R47 +R39 +R3 +L508 +L978 +R97 +L38 +L96 +R34 +R19 +R81 +R83 +R17 +L70 +R70 +L44 +R99 +R18 +R32 +R95 +L10 +R96 +L52 +R64 +R2 +R7 +R93 +L15 +R15 +R45 +L45 +L59 +R80 +R63 +L8 +R38 +L81 +R7 +L40 +L9 +L64 +R73 +L12 +L88 +R54 +L54 +L563 +R59 +L46 +R50 +L436 +R36 +R91 +R609 +R15 +R21 +R215 +L75 +L79 +R10 +L1 +L52 +L54 +L40 +L350 +L91 +R28 +R53 +R78 +L27 +R80 +L73 +R46 +R9 +R81 +R52 +R2 +R36 +R56 +L84 +L181 +R85 +R40 +L21 +L84 +R5 +R674 +R389 +L85 +R89 +L947 +L3 +L17 +R58 +R22 +L80 +L346 +R295 +R73 +R87 +R19 +R39 +R55 +R76 +R2 +L45 +L996 +R76 +L94 +L88 +L80 +L73 +L169 +L31 +L64 +L36 +R857 +R4 +R39 +L64 +R21 +R89 +L46 +L65 +L17 +R82 +L97 +L46 +R43 +L20 +R80 +R489 +L49 +L69 +L5 +L85 +L41 +R74 +L14 +L60 +R23 +R52 +R12 +R50 +R33 +R46 +L16 +L14 +L86 +R30 +L30 +L76 +L24 +R83 +L50 +L45 +R12 +R79 +L679 +R33 +L33 +L58 +R29 +R29 +R68 +R98 +R934 +R438 +R14 +R48 +R29 +L42 +R33 +L20 +L150 +R7 +R99 +R17 +L72 +L1 +L69 +R38 +L69 +L55 +L45 +R82 +L82 +L92 +R65 +R57 +R70 +L12 +L88 +L667 +L33 +L977 +L836 +R13 +R781 +R19 +L209 +L649 +R82 +L16 +L8 +R996 +L28 +R32 +L94 +R256 +L62 +R510 +L10 +L965 +R29 +R41 +R31 +R36 +L49 +R66 +R2 +R97 +L688 +R42 +L96 +L46 +R92 +R965 +L57 +R17 +R683 +R84 +R16 +L71 +L30 +L42 +L223 +R66 +L761 +R61 +L54 +L588 +L598 +R40 +L14 +R89 +R25 +R92 +R65 +R43 +R29 +R152 +R19 +L54 +R54 +L6 +R18 +R278 +R10 +R84 +L84 +L5 +R5 +R62 +R91 +R47 +R6 +R94 +R40 +R86 +L869 +R43 +R169 +L22 +L77 +L194 +R24 +R569 +L69 +L91 +R91 +L51 +L90 +L159 +R70 +R299 +R9 +R19 +L97 +R61 +R39 +R152 +L89 +R179 +R22 +L64 +R673 +R27 +R74 +R26 +L6 +R16 +L10 +L46 +L93 +L368 +L40 +L53 +R90 +R27 +R72 +L89 +L4 +L96 +L84 +R28 +R60 +L4 +L6 +L42 +R49 +L1 +L819 +R19 +L198 +R78 +R35 +R685 +R31 +L31 +L43 +L39 +L18 +R11 +L838 +L78 +L952 +R38 +R19 +L637 +R36 +L99 +R232 +R16 +R381 +R889 +R76 +L76 +R882 +L753 +L54 +R68 +R48 +R91 +L17 +R38 +R79 +L2 +L75 +L97 +L89 +R59 +L32 +L73 +R68 +R41 +L50 +R50 +L33 +L926 +R43 +L39 +L86 +R41 +R74 +R614 +R12 +R35 +L90 +L28 +L216 +L18 +L86 +L86 +L63 +R40 +R12 +L237 +R59 +L822 +L639 +R58 +R72 +L91 +L13 +R49 +L46 +R62 +L17 +L26 +L67 +R98 +R293 +L54 +L365 +L54 +R17 +R64 +L41 +L76 +R93 +R38 +L83 +L72 +L88 +L12 +R72 +L17 +L55 +L51 +L89 +R81 +L41 +L86 +L14 +R31 +L31 +L55 +R57 +R33 +L70 +L65 +R661 +L36 +R37 +L2 +L75 +L574 +L24 +R13 +R18 +R82 +R49 +R81 +R596 +R74 +L5 +R205 +R9 +L48 +R42 +R97 +L99 +R786 +R913 +R138 +L38 +L97 +L5 +L777 +L40 +R19 +L562 +L61 +L525 +R48 +L7 +L84 +L732 +R23 +L42 +R99 +L832 +L525 +L405 +R99 +L35 +R33 +L9 +L86 +L5 +R94 +R217 +L79 +R58 +R518 +R19 +L16 +R57 +R994 +R46 +R67 +R33 +R95 +L76 +L67 +L52 +L95 +L49 +L56 +R75 +L48 +R92 +L13 +R86 +R8 +L95 +R21 +R11 +L38 +R1 +R51 +R696 +R69 +R82 +R87 +R15 +L71 +L129 +R32 +L84 +R14 +R71 +R82 +L12 +L93 +R65 +L75 +L852 +R83 +L42 +R51 +R53 +L381 +R93 +R79 +R667 +L51 +R24 +R72 +R4 +L65 +L35 +R63 +L67 +L93 +L993 +R41 +R69 +R93 +L26 +L83 +R78 +L92 +L7 +L83 +R96 +R48 +R56 +R798 +L98 +L52 +R96 +R56 +R77 +L79 +R60 +R21 +R732 +R55 +R20 +R57 +L55 +R12 +L911 +L89 +L22 +L17 +R739 +L4 +L591 +L11 +R31 +R75 +L87 +R87 +L23 +R66 +R457 +L5 +L95 +L243 +R94 +L320 +R3 +R32 +R634 +R90 +R10 +L25 +R48 +R77 +L72 +L19 +L68 +R59 +L59 +R59 +R3 +L5 +R78 +R24 +L39 +L11 +R50 +R53 +R12 +L71 +R79 +R27 +R67 +L67 +L58 +L77 +L14 +L3 +R65 +R59 +R60 +L77 +R43 +L77 +L96 +R57 +R18 +L881 +L47 +L289 +R437 +R35 +R10 +L712 +R77 +L1 +L750 +R21 +L50 +L71 +L666 +R187 +L81 +L49 +R57 +R75 +L48 +L654 +L73 +L407 +L320 +R435 +L62 +L68 +L805 +L941 +R36 +L24 +L871 +R97 +L58 +R15 +L93 +L61 +L732 +L84 +L1 +R356 +R61 +L8 +R658 +L50 +R52 +R479 +L31 +L67 +L13 +R3 +R46 +L31 +L96 +L42 +R68 +R832 +R48 +L15 +L833 +R73 +R718 +L38 +L994 +R35 +R74 +L70 +R38 +L4 +R15 +R39 +R68 +R52 +R74 +R54 +L49 +R25 +L10 +R14 +L50 +R32 +L97 +L99 +R97 +L41 +R20 +L76 +R96 +L596 +R23 +L303 +R97 +L16 +R64 +L70 +L96 +R1 +L86 +R86 +L93 +L7 +R42 +R94 +R64 +R93 +R7 +R44 +L44 +L19 +R18 +L99 +R204 +R96 +R34 +L606 +R872 +L74 +L51 +R92 +R73 +R131 +L977 +R6 +R17 +R32 +L84 +R58 +L23 +L16 +L61 +L19 +R2 +L6 +R86 +L386 +L925 +L5 +R30 +L706 +R14 +R60 +R32 +R85 +L85 +R44 +R56 +L87 +L21 +R908 +L171 +R2 +R62 +L493 +R666 +L166 +L27 +L640 +R67 +L219 +L793 +R28 +R33 +R28 +L777 +L98 +R68 +R38 +R6 +R493 +L7 +R40 +L934 +L97 +L9 +L316 +R816 +R87 +L87 +L20 +L41 +R88 +R39 +R40 +L817 +L66 +R7 +R4 +L93 +L975 +R46 +L46 +R852 +R111 +L15 +R886 +R20 +R74 +L94 +R36 +R37 +R51 +L435 +L40 +L49 +R2 +R98 +R80 +L80 +R68 +L68 +L842 +R42 +R66 +L73 +R7 +L80 +L66 +R46 +L57 +R31 +R98 +R28 +L10 +L32 +R97 +R24 +R79 +R42 +L13 +R15 +L2 +L350 +L50 +R272 +R928 +R911 +R89 +R214 +R32 +L246 +R35 +R89 +L57 +R33 +R34 +R75 +R70 +L38 +L912 +L98 +L731 +R94 +R6 +L26 +L344 +L30 +R97 +L24 +L65 +L8 +R7 +L7 +L793 +R465 +R18 +L62 +L3 +R75 +R6 +L406 +R6 +R94 +L27 +L66 +L107 +R10 +R90 +L15 +L285 +R21 +R17 +L74 +L264 +R65 +L68 +L43 +R46 +L76 +R62 +L80 +R19 +R75 +R58 +L58 +L56 +R864 +R84 +R8 +L9 +R47 +L39 +L717 +L27 +L95 +R64 +R45 +L86 +L426 +R43 +L42 +R72 +R25 +L47 +R394 +R17 +L19 +L10 +R919 +L27 +R24 +L65 +L79 +R64 +R274 +L90 +L10 +R75 +R71 +R53 +L99 +R60 +L97 +R637 +L35 +L65 +L26 +R26 +L11 +R911 +R86 +L739 +L87 +L58 +L340 +R59 +R79 +L63 +R63 +R94 +L6 +R11 +L28 +L89 +R18 +L67 +L176 +R66 +R877 +R166 +L407 +R41 +R21 +R2 +L565 +R7 +L65 +R90 +R58 +R52 +R60 +L660 +R21 +L4 +R507 +R15 +R761 +L31 +L508 +L97 +L764 +R13 +L26 +L84 +R559 +L226 +L39 +L22 +R86 +R9 +R69 +R61 +R676 +L18 +R69 +R73 +R28 +L84 +R556 +L18 +R791 +L73 +R47 +R44 +R116 +L7 +R90 +L90 +L22 +R57 +R665 +L64 +R742 +R22 +L93 +L807 +L304 +R4 +L71 +R21 +R50 +R12 +L591 +L21 +R76 +R54 +L25 +L305 +R45 +R55 +R17 +R37 +L165 +R22 +R84 +R58 +R79 +L632 +R79 +R21 +R14 +R86 +R622 +L22 +L56 +L44 +R93 +R598 +L84 +R57 +L22 +L42 +L90 +L86 +L35 +L20 +R153 +L22 +L23 +R81 +R64 +R78 +L36 +R21 +R199 +L29 +L55 +L60 +R60 +R17 +L22 +R205 +R15 +R956 +L29 +L23 +L57 +R12 +R708 +R73 +L55 +L49 +R8 +R41 +L5 +R75 +L70 +R80 +L80 +R793 +L20 +R27 +R35 +R979 +R94 +R89 +R52 +R21 +R790 +R40 +L24 +L76 +L1 +R1 +R61 +L23 +R62 +L67 +R4 +R63 +R29 +L29 +L57 +R29 +L72 +L11 +L489 +L16 +R4 +R12 +R449 +R351 +L22 +L30 +L12 +L36 +L97 +R3 +L6 +R1 +R55 +L568 +R49 +R22 +R141 +L75 +R29 +R46 +R9 +L9 +R42 +L15 +L22 +L67 +L993 +L14 +L9 +R78 +L30 +L45 +L98 +R373 +L50 +R15 +R29 +R15 +R57 +R20 +L57 +R24 +L48 +L90 +L297 +R39 +R48 +R90 +R86 +L81 +L17 +L83 +L590 +L610 +R50 +R268 +L22 +R982 +L78 +L85 +R85 +L60 +L1 +R137 +R24 +L862 +R62 +L98 +R65 +R59 +R744 +L24 +L372 +R44 +L53 +R14 +L23 +L32 +L4 +L85 +L235 +R20 +R74 +L932 +L418 +L44 +L6 +L194 +R29 +R84 +L26 +L52 +R76 +L11 +R75 +L75 +L34 +R34 +L27 +R27 +L473 +R12 +R71 +R290 +R183 +R24 +L7 +R83 +L83 +R531 +L68 +L21 +L542 +R87 +R13 +L99 +R78 +R33 +L35 +L896 +R455 +L52 +L784 +R86 +L486 +L521 +R21 +L770 +L30 +R35 +L35 +L83 +R93 +L610 +R1 +L48 +L15 +L23 +L18 +R44 +L76 +R77 +L876 +L54 +R88 +L51 +R589 +L13 +R79 +R782 +R55 +R59 +L89 +L465 +L46 +R43 +R72 +R8 +L23 +L130 +R58 +R3 +R30 +R39 +L42 +R56 +L17 +L39 +L77 +R19 +L54 +L65 +R19 +R65 +L2 +R75 +L338 +L374 +L254 +L96 +L33 +L43 +R168 +R32 +L78 +L22 +L59 +R15 +R87 +R57 +L32 +L2 +R85 +R49 +R530 +R233 +L67 +L72 +R76 +R37 +L397 +R83 +L423 +R9 +L51 +R42 +R36 +R64 +L66 +L34 +R471 +L3 +R86 +R846 +R3 +L403 +L524 +L76 +L86 +R36 +L40 +R75 +R15 +L42 +R64 +L27 +L1 +R6 +R92 +R8 +L87 +L13 +R732 +R68 +R69 +R931 +L687 +L37 +L51 +L43 +R30 +L10 +L382 +L20 +L455 +R93 +L71 +R92 +R64 +R91 +R86 +R49 +L93 +R44 +L4 +R77 +L733 +R60 +L56 +R56 +L25 +R42 +R61 +R519 +R76 +R8 +L81 +L283 +R62 +R31 +L90 +R23 +R39 +L789 +R91 +L84 +R314 +R88 +R5 +L749 +L58 +R86 +L5 +L81 +R90 +R89 +L50 +R4 +R99 +L61 +R27 +L98 +L33 +L68 +R19 +L20 +L98 +L111 +L42 +L64 +R793 +R560 +R64 +R22 +R78 +R50 +R956 +L458 +R18 +L66 +L3 +R3 +L916 +L84 +R55 +R45 +R30 +R30 +L363 +R5 +L17 +L88 +L273 +R13 +R66 +L41 +R38 +R74 +L514 +R540 +R909 +R48 +L11 +R554 +R525 +R75 +L65 +R11 +L46 +L73 +R394 +R64 +L65 +R80 +L52 +L148 +L14 +L969 +L576 +L341 +L26 +R26 +R53 +R25 +L478 +R63 +R98 +L3 +R91 +R73 +R84 +L88 +L2 +R93 +R95 +L421 +R17 +R63 +R26 +L80 +R91 +R31 +R358 +L80 +L53 +L98 +L58 +R82 +R18 +R77 +L77 +R35 +L40 +R8 +R24 +R81 +L69 +R561 +L56 +R99 +R48 +R9 +L46 +L13 +L687 +L228 +L26 +R318 +L18 +R476 +L6 +R73 +L7 +R48 +L884 +R8 +R392 +R78 +R94 +L472 +R780 +R41 +R679 +R14 +R41 +R69 +R226 +R64 +L914 +L38 +L35 +L27 +L38 +R35 +R31 +L769 +R79 +R42 +L82 +R904 +L2 +L711 +L20 +L69 +R39 +R684 +R39 +L90 +R28 +R75 +L13 +L37 +L11 +L78 +R333 +R31 +R36 +L14 +L22 +R37 +L78 +R6 +R5 +L470 +L97 +R97 +R53 +R78 +L85 +R16 +L626 +R778 +L14 +L50 +L50 +L44 +L8 +R11 +R41 +R73 +L4 +R1 +L70 +L90 +L10 +R763 +R609 +L72 +R89 +R330 +R81 +L699 +L1 +R76 +L40 +L4 +R26 +L2 +R72 +L22 +R85 +L91 +R63 +R83 +R54 +L51 +R51 +R223 +L23 +R36 +L26 +R42 +R781 +R3 +L36 +L37 +R906 +L64 +R37 +L42 +R51 +R231 +L74 +L21 +R94 +L581 +L14 +R64 +L50 +R485 +L85 +L24 +R42 +R92 +L10 +L33 +L53 +R74 +R77 +L466 +R1 +L30 +R75 +R10 +L10 +L249 +L85 +R89 +R95 +R24 +L82 +R93 +L22 +R10 +L18 +L5 +R5 +L70 +R13 +L970 +L73 +R64 +R931 +L66 +R56 +R44 +L969 +R17 +L97 +L89 +R409 +L19 +L45 +R64 +L80 +L447 +R227 +L684 +R218 +L420 +R86 +R35 +R5 +L99 +L41 +R58 +R42 +R28 +R17 +R57 +L57 +R88 +R4 +L62 +L56 +L76 +R54 +R39 +R19 +L55 +L95 +R76 +R119 +L31 +R53 +L73 +L49 +L589 +R489 +R74 +R73 +R55 +L2 +R314 +R746 +L31 +R817 +L446 +L86 +L70 +R50 +R6 +R138 +L138 +L30 +R938 +L868 +R60 +L60 +L77 +L263 +L79 +R79 +L27 +R26 +R550 +L49 +R5 +L5 +L901 +R501 +R59 +L459 +R81 +R991 +L81 +R33 +L32 +L92 +L409 +L18 +R27 +R90 +L83 +R93 +R25 +R675 +R737 +L87 +R35 +L341 +R59 +L39 +L43 +L21 +L230 +R30 +L34 +R34 +R93 +R7 +R11 +R89 +L625 +R25 +L83 +L66 +L645 +R710 +L15 +R958 +R41 +R44 +L55 +R32 +L58 +L63 +L640 +L60 +R2 +R741 +R79 +L31 +L691 +L793 +L7 +L9 +R109 +L35 +R44 +R83 +L86 +R217 +R721 +R56 +L82 +L18 +R88 +L88 +R33 +R58 +L691 +L327 +L873 +L18 +L36 +R21 +L91 +L244 +R68 +R70 +L70 +R607 +L7 +R17 +L88 +L43 +R66 +R67 +R81 +R55 +L30 +L325 +L3 +R3 +R54 +R46 +L19 +L26 +L55 +L7 +R218 +L11 +L20 +L48 +L82 +L50 +L54 +R274 +L6 +L97 +R78 +R48 +R813 +L256 +L32 +L58 +R41 +R49 +L67 +R967 +L88 +L25 +R2 +L84 +R95 +R12 +L595 +L90 +L27 +L58 +L59 +L83 +R51 +L151 +L37 +R37 +L85 +L415 +R512 +R95 +L43 +L71 +R59 +R66 +R53 +R23 +L13 +R19 +L56 +L14 +L64 +R47 +R87 +L977 +L23 +L35 +R8 +R83 +R449 +L5 +L52 +R652 +L65 +L90 +L28 +R283 +L51 +L45 +R896 +R661 +L361 +R42 +L82 +R40 +R2 +L2 +L36 +L64 +R35 +L378 +R43 +L97 +L3 +L33 +L67 +R83 +L83 +R77 +R36 +L13 +R87 +L76 +R6 +L62 +R59 +R166 +R372 +L1 +L38 +L13 +R43 +R45 +L88 +L80 +L29 +L791 +L23 +L77 +L137 +R937 +L61 +R61 +L6 +R57 +R20 +L71 +L33 +L67 +L89 +L8 +R97 +L7 +R518 +L11 +L35 +L44 +R52 +R20 +R107 +R76 +L64 +L21 +L91 +L61 +R261 +R68 +R32 +R57 +R65 +R78 +R78 +L9 +L57 +L1 +L11 +R64 +R299 +R67 +R71 +L659 +L534 +R35 +L743 +R16 +R84 +R757 +L39 +L18 +R55 +L93 +R60 +L69 +R47 +R10 +L10 +R69 +R431 +R25 +R413 +R62 +L35 +R544 +R91 +L2 +L77 +L721 +L55 +L945 +L94 +R327 +R814 +R55 +L79 +R768 +L91 +L92 +L11 +L26 +R29 +L98 +R254 +R24 +L45 +R65 +R10 +L13 +R203 +L31 +R31 +L48 +L36 +R84 +R29 +L29 +L97 +R85 +R70 +R30 +R12 +L87 +R224 +R63 +L35 +L65 +R76 +L176 +L40 +L60 +R30 +L39 +L91 +L23 +R23 +L82 +R782 +R977 +L40 +R44 +L60 +R49 +L486 +L36 +L778 +L70 +R45 +R93 +L38 +L99 +L66 +R28 +L34 +R71 +L419 +R81 +R38 +L37 +R80 +L43 +R75 +L13 +R38 +L19 +R102 +L83 +L58 +L10 +R257 +R711 +L44 +L22 +L34 +R52 +L59 +R815 +R592 +L297 +R97 +L66 +R30 +R99 +L835 +L73 +L55 +R982 +L44 +R62 +R56 +L6 +R916 +L64 +R14 +R899 +L42 +L73 +R258 +R42 +R320 +L184 +L3 +L76 +L98 +R41 +R42 +L42 +R25 +R22 +R53 +R25 +L25 +R79 +L361 +L18 +R40 +L40 +R70 +L70 +L3 +R65 +R17 +L88 +L76 +R85 +R21 +L21 +R17 +R96 +R24 +R63 +R15 +L15 +R90 +L90 +R98 +L3 +R87 +R37 +L70 +L49 +L94 +R94 +R93 +L93 +R81 +L81 +L26 +L74 +L40 +L24 +R63 +R1 +R44 +R56 +R3 +L10 +L44 +L57 +R10 +L83 +R51 +R76 +R54 +L69 +L27 +L4 +L26 +L32 +L39 +L24 +L13 +L42 +R27 +L26 +L4 +R22 +L50 +R18 +L13 +R43 +R24 +R28 +L24 +R45 +L17 +L19 +L22 +R39 +R44 +L4 +R42 +L20 +L26 +L49 +L28 +R30 +L10 +L29 +R6 +R26 +L28 +L34 +R14 +L28 +L28 +R6 +R23 +L28 +R33 +L19 +R6 +L22 +R42 +L14 +L41 +L5 \ No newline at end of file diff --git a/2025/01/JS/main.ts b/2025/01/JS/main.ts new file mode 100644 index 0000000..c81d3d9 --- /dev/null +++ b/2025/01/JS/main.ts @@ -0,0 +1,43 @@ +const input = await Deno.readTextFile("input.txt"); +const START = 50 +const TOTAL = 100 + +function part1(){ + let password = 0 +let current = START +for (const rotation of input.split('\n')) { + const direction = rotation[0] + let amount = Number(rotation.slice(1)) + if (direction === "L") { + amount *= -1 + } + let change = current + amount + while (change < 0) { + change = TOTAL + change + } + current = change % TOTAL + if (current === 0) { + password += 1 + } +} + +console.log(password) +} + +function part2(){ + let password = 0 +let current = START +for (const rotation of input.split('\n')) { + const direction = rotation[0] + let amount = Number(rotation.slice(1)) + if (direction === "L") { + const divisions = Math.floor((amount * -1) / TOTAL * -1) + password += divisions + } +} + +console.log(password) +} + +//part1() +part2()