Compare commits
6 Commits
bc168219f3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 0b989b8d68 | |||
| 4fa993c840 | |||
| 43fcaef247 | |||
| 65eafb1d56 | |||
| c27b981663 | |||
| 0c1fc940b3 |
3
2024/03/go.mod
Normal file
3
2024/03/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module main
|
||||
|
||||
go 1.23.3
|
||||
75
2024/03/main.go
Normal file
75
2024/03/main.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func calculate(x string) int {
|
||||
|
||||
clean1 := strings.Replace(x, "mul(", "", -1)
|
||||
clean2 := strings.Replace(clean1, ")", "", -1)
|
||||
splat := strings.Split(clean2, ",")
|
||||
|
||||
l, err := strconv.Atoi(splat[0])
|
||||
if err != nil {
|
||||
}
|
||||
r, err := strconv.Atoi(splat[1])
|
||||
if err != nil {
|
||||
}
|
||||
|
||||
return l * r
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
lines, err := parse()
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
}
|
||||
oneline := strings.Join(lines, "")
|
||||
|
||||
var p1 int = 0
|
||||
var p2 int = 0
|
||||
|
||||
re := regexp.MustCompile(`mul\(\d+,\d+\)`)
|
||||
matches := re.FindAllString(oneline, -1)
|
||||
for i := 0; i < len(matches); i++ {
|
||||
p1 += calculate(matches[i])
|
||||
}
|
||||
|
||||
onecleanre := regexp.MustCompile(`(?s)don\'t\(\).*?do\(\)|$`)
|
||||
oneclean := onecleanre.ReplaceAllString(oneline, "")
|
||||
|
||||
re2 := regexp.MustCompile(`mul\(\d+,\d+\)`)
|
||||
matches2 := re2.FindAllString(oneclean, -1)
|
||||
for i := 0; i < len(matches2); i++ {
|
||||
p2 += calculate(matches2[i])
|
||||
}
|
||||
|
||||
fmt.Println("p1: ", p1)
|
||||
fmt.Println("p2: ", p2)
|
||||
}
|
||||
|
||||
func parse() ([]string, error) {
|
||||
if len(os.Args) < 2 {
|
||||
return nil, fmt.Errorf("no file provided")
|
||||
}
|
||||
filePath := os.Args[1]
|
||||
data, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error opening file: %v", err)
|
||||
}
|
||||
chunks := strings.Split(string(data), "\n")
|
||||
var nonEmpthyChunks = []string{}
|
||||
|
||||
for _, chunk := range chunks {
|
||||
if chunk != "" {
|
||||
nonEmpthyChunks = append(nonEmpthyChunks, chunk)
|
||||
}
|
||||
}
|
||||
return nonEmpthyChunks, nil
|
||||
}
|
||||
3
2024/04/go.mod
Normal file
3
2024/04/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module main
|
||||
|
||||
go 1.23.3
|
||||
126
2024/04/main.go
Normal file
126
2024/04/main.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
lines, err := parse()
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
}
|
||||
|
||||
var p1 int = 0
|
||||
var p2 int = 0
|
||||
|
||||
h := len(lines)
|
||||
w := len(lines[0])
|
||||
|
||||
for y := 0; y < h; y++ {
|
||||
for x := 0; x < w; x++ {
|
||||
|
||||
if lines[y][x] == 'X' {
|
||||
// check right
|
||||
if x <= len(lines[y])-4 {
|
||||
r := string([]byte{lines[y][x+1], lines[y][x+2], lines[y][x+3]})
|
||||
if r == "MAS" {
|
||||
p1++
|
||||
}
|
||||
}
|
||||
|
||||
// check left
|
||||
if x >= 3 {
|
||||
l := string([]byte{lines[y][x-1], lines[y][x-2], lines[y][x-3]})
|
||||
if l == "MAS" {
|
||||
p1++
|
||||
}
|
||||
}
|
||||
|
||||
// check if up possible
|
||||
if y >= 3 {
|
||||
u := string([]byte{lines[y-1][x], lines[y-2][x], lines[y-3][x]})
|
||||
if u == "MAS" {
|
||||
p1++
|
||||
}
|
||||
if x >= 3 {
|
||||
ul := string([]byte{lines[y-1][x-1], lines[y-2][x-2], lines[y-3][x-3]})
|
||||
if ul == "MAS" {
|
||||
p1++
|
||||
}
|
||||
}
|
||||
if x < w-3 {
|
||||
ur := string([]byte{lines[y-1][x+1], lines[y-2][x+2], lines[y-3][x+3]})
|
||||
if ur == "MAS" {
|
||||
p1++
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// check down
|
||||
if y <= h-4 {
|
||||
d := string([]byte{lines[y+1][x], lines[y+2][x], lines[y+3][x]})
|
||||
if d == "MAS" {
|
||||
p1++
|
||||
}
|
||||
if x >= 3 {
|
||||
dl := string([]byte{lines[y+1][x-1], lines[y+2][x-2], lines[y+3][x-3]})
|
||||
if dl == "MAS" {
|
||||
p1++
|
||||
}
|
||||
}
|
||||
if x < w-3 {
|
||||
dr := string([]byte{lines[y+1][x+1], lines[y+2][x+2], lines[y+3][x+3]})
|
||||
if dr == "MAS" {
|
||||
p1++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if lines[y][x] == 'A' {
|
||||
if y >= 1 && y < h-1 && x >= 1 && x < w-1 {
|
||||
check := string([]byte{lines[y-1][x-1], lines[y-1][x+1], lines[y+1][x-1], lines[y+1][x+1]})
|
||||
if check == "MSMS" {
|
||||
p2++
|
||||
}
|
||||
if check == "SMSM" {
|
||||
p2++
|
||||
}
|
||||
if check == "MMSS" {
|
||||
p2++
|
||||
}
|
||||
if check == "SSMM" {
|
||||
p2++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("p1: ", p1)
|
||||
fmt.Println("p2: ", p2)
|
||||
}
|
||||
|
||||
func parse() ([]string, error) {
|
||||
if len(os.Args) < 2 {
|
||||
return nil, fmt.Errorf("no file provided")
|
||||
}
|
||||
filePath := os.Args[1]
|
||||
data, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error opening file: %v", err)
|
||||
}
|
||||
chunks := strings.Split(string(data), "\n")
|
||||
var nonEmpthyChunks = []string{}
|
||||
|
||||
for _, chunk := range chunks {
|
||||
if chunk != "" {
|
||||
nonEmpthyChunks = append(nonEmpthyChunks, chunk)
|
||||
}
|
||||
}
|
||||
return nonEmpthyChunks, nil
|
||||
}
|
||||
3
2024/05/go.mod
Normal file
3
2024/05/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module main
|
||||
|
||||
go 1.23.3
|
||||
102
2024/05/main.go
Normal file
102
2024/05/main.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func contains(s []int, e int) bool {
|
||||
for _, a := range s {
|
||||
if a == e {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func check(nums []int, maps map[int][]int) bool {
|
||||
correct := true
|
||||
for i := 0; i < len(nums); i++ {
|
||||
var checking = nums[i]
|
||||
for j := 0; j < len(nums); j++ {
|
||||
|
||||
if !contains(maps[checking], nums[j]) {
|
||||
if i < j {
|
||||
correct = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return correct
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
lines, err := parse()
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
}
|
||||
|
||||
var p1 int = 0
|
||||
var p2 int = 0
|
||||
|
||||
maps := make(map[int][]int)
|
||||
|
||||
for y := 0; y < len(lines); y++ {
|
||||
if lines[y] != "" && lines[y][2] == '|' {
|
||||
split := strings.Split(lines[y], "|")
|
||||
l, err := strconv.Atoi(split[0])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
r, err := strconv.Atoi(split[1])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
maps[l] = append(maps[l], r)
|
||||
}
|
||||
|
||||
if lines[y] != "" && lines[y][2] == ',' {
|
||||
numsstr := strings.Split(lines[y], ",")
|
||||
var nums []int
|
||||
|
||||
for i := 0; i < len(numsstr); i++ {
|
||||
x, err := strconv.Atoi(numsstr[i])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
nums = append(nums, x)
|
||||
}
|
||||
|
||||
if check(nums, maps) {
|
||||
p1 += nums[len(nums)/2]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("p1: ", p1)
|
||||
fmt.Println("p2: ", p2)
|
||||
}
|
||||
|
||||
func parse() ([]string, error) {
|
||||
if len(os.Args) < 2 {
|
||||
return nil, fmt.Errorf("no file provided")
|
||||
}
|
||||
filePath := os.Args[1]
|
||||
data, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error opening file: %v", err)
|
||||
}
|
||||
chunks := strings.Split(string(data), "\n")
|
||||
var nonEmpthyChunks = []string{}
|
||||
|
||||
for _, chunk := range chunks {
|
||||
if chunk != "" {
|
||||
nonEmpthyChunks = append(nonEmpthyChunks, chunk)
|
||||
}
|
||||
}
|
||||
return nonEmpthyChunks, nil
|
||||
}
|
||||
Reference in New Issue
Block a user