Abderrahmane Faiz пре 2 недеља
родитељ
комит
b2818df811
2 измењених фајлова са 137 додато и 1 уклоњено
  1. 136 0
      6/solve_2.go
  2. 1 1
      README.md

+ 136 - 0
6/solve_2.go

@@ -0,0 +1,136 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"strconv"
+	"strings"
+)
+
+
+func main(){
+	fmt.Println("Advent of Code 2025 - Day 6 - Part 2")
+	f,_:=os.Open("6/input")
+	defer f.Close()
+	scanner:=bufio.NewScanner(f)
+	var input []string
+	var grid [][]string
+	for scanner.Scan(){
+		line:= scanner.Text()
+		input = append(input, line)
+	}
+	
+	grid = define_columns(input)
+	operators := extract_operators(input[len(input)-1])
+	
+	n := len(grid)
+	m := len(grid[0])
+
+	// Calculate the transpose
+	transpose_operands_matrix := make([][]string, m)
+	for j:= range m{
+		transpose_operands_matrix[j] = make([]string, n)
+		for i:= range n{
+			transpose_operands_matrix[j][i] = grid[i][j]
+		}
+	}
+
+	// Calculate with the new digit disposition
+	new_operands_matrix := make([][]string, m)
+	for j:= range m{
+		new_operands_matrix[j] = make([]string,n)
+		for range n{
+			new_operands_matrix[j] = align_digits(transpose_operands_matrix[j])
+		}
+	}
+
+	res := int64(0)
+	for i,operation:= range new_operands_matrix {
+		operator := operators[i]
+		res += calculate(operator, operation)
+	}
+	fmt.Println(res)
+}
+
+func define_columns(input []string) [][]string{
+	var res [][]string
+	operands := input[len(input)-1]
+	var columns_widths []int
+	col_width := 0
+	first := true
+	for i := range operands {
+		if operands[i] != ' '{
+			if (first){
+				first = false
+			} else {
+				columns_widths = append(columns_widths, col_width)
+				col_width = 0
+			}
+		} else {
+			col_width++
+		}
+		if (i==len(operands)-1){
+			columns_widths = append(columns_widths, col_width+1)
+		}
+	}
+	for _,line := range input[:len(input)-1] {
+		operation := split_line(line, columns_widths)
+		res = append(res, operation)
+	}	
+	return res
+}
+
+func split_line(line string, column_widths []int) []string{
+	var res []string
+	offset := 0
+	for _,w := range column_widths {
+			res = append(res, line[offset:offset+w])
+			offset += w+1
+	}
+	return res
+}
+
+func align_digits(operands []string) []string {
+	var res []string
+	n := len(operands[0])
+	for i:=range n {
+		nop := ""
+		for _,op := range operands{
+			nop += string(op[i])
+		}
+		res = append(res, nop)
+	}
+	return res
+}
+
+func extract_operators(ops string) []string{
+	var res []string
+	for op := range strings.SplitSeq(ops," ") {
+		if (len(op) > 0){
+			res = append(res, op)
+		}
+	}
+	return res
+}
+
+func calculate(operator string, operands []string) int64{
+	var res int64
+	switch(operator){
+		case "*":
+		res = int64(1)
+		for _,op := range operands{
+			op = strings.TrimSpace(op)
+			op_toi,_ := strconv.ParseInt(op,10,64)
+			res *= op_toi
+		}
+		case "+":
+		res = int64(0)
+		for _,op := range operands{
+			op = strings.TrimSpace(op)
+			op_toi,_ := strconv.ParseInt(op,10,64) 
+			res += op_toi
+		}
+	}
+	return res
+}

+ 1 - 1
README.md

@@ -25,7 +25,7 @@ Each day's folder is named after the day number (`1` to `12`). Inside each folde
 | 3   | ✅     | ✅     |
 | 4   | ✅     | ✅     |
 | 5   | ✅     | ✅     |
-| 6   | ✅     |      |
+| 6   | ✅     |      |
 | 7   | ⬜     | ⬜     |
 | 8   | ⬜     | ⬜     |
 | 9   | ⬜     | ⬜     |