package main import ( "AOC2022/helper" "fmt" "math" "os" "strconv" ) func main() { args := os.Args[1:] lines := helper.ReadTextFile(args[0]) sum := 0 for _, line := range lines { sum += toNormal(line) } fmt.Println(sum) fmt.Println(toSNAFU(sum)) } func toNormal(SNAFU string) int { returnValue := float64(0) for i := 0; i < len(SNAFU); i++ { currentChar := SNAFU[len(SNAFU)-1-i] amount := float64(0) switch currentChar { case '2': amount = 2 case '1': amount = 1 case '-': amount = -1 case '=': amount = -2 } returnValue += amount * math.Pow(float64(5), float64(i)) } return int(returnValue) } func toSNAFU(input int) string { returnValue := "" highestFitting := 99 i := 10 for highestFitting == 99 { i-- amount := int(math.Pow(5, float64(i))) if amount < input { highestFitting = i + 1 } } fitIns := 0 for input > 0 { remains := input % 5 remains += fitIns fitIns = 0 input = input / 5 if remains > 2 { remainsRemains := remains % 5 fitIns = remains / 5 if remainsRemains > 2 { fitIns++ switch remainsRemains { case 3: returnValue = "=" + returnValue case 4: returnValue = "-" + returnValue } } else { returnValue = strconv.Itoa(remainsRemains) + returnValue } } else { returnValue = strconv.Itoa(remains) + returnValue } } return returnValue }