// https://projecteuler.net/problem=13

package main

import (
	"io/ioutil"
	"math/big"
	"strconv"
	"strings"
)

func p13() string {
	fileBuf, err := ioutil.ReadFile("0013_input.txt")
	if err != nil {
		panic(err)
	}
	fileStr := string(fileBuf)
	lines := strings.SplitN(fileStr, "\n", 100)
	result := ""
	carryout, digit := 0, 0
	for i := 49; i >= 0; i-- {
		sum := carryout
		for j := range lines {
			num, _ := strconv.Atoi(string(lines[j][i]))
			sum += num
		}
		digit = sum % 10
		carryout = sum / 10
		result = strconv.Itoa(digit) + result
	}
	result = strconv.Itoa(carryout) + result
	return result[0:10]
}

func p13big() string {
	fileBuf, err := ioutil.ReadFile("0013_input.txt")
	if err != nil {
		panic(err)
	}
	fileStr := string(fileBuf)
	s := strings.Split(fileStr, "\n")
	n := new(big.Int).SetInt64(0)
	for _, v := range s {
		if t, ok := new(big.Int).SetString(v, 10); ok {
			n.Add(n, t)
		}
	}
	return n.String()[0:10]
}