Untitled

 avatar
unknown
plain_text
2 years ago
2.2 kB
6
Indexable
package main

import (
        "bufio"
        "flag"
        "fmt"
        "os"
        "strconv"
        "strings"
)

var input = flag.String("input", "real", "input file data")

func read() *bufio.Scanner {
        f, err := os.Open(*input)
        if err != nil {
                panic(err)

        }
        return bufio.NewScanner(f)

}

func main() {
        flag.Parse()
        data := read()
        var time, distance []string
        var time2, distance2 string
        for data.Scan() {
                line := strings.Split(data.Text(), ":")
                switch line[0] {
                case "Time":
                        time = strings.Fields(line[1])
                        time2 = strings.ReplaceAll(line[1], " ", "")
                case "Distance":
                        distance = strings.Fields(line[1])
                        distance2 = strings.ReplaceAll(line[1], " ", "")
                }
        }
        times := make([]int, len(time))
        distances := make([]int, len(distance))
        for i, s := range time {
                times[i], _ = strconv.Atoi(s)
        }
        times2, _ := strconv.Atoi(time2)

        for i, s := range distance {
                distances[i], _ = strconv.Atoi(s)
        }
        distances2, _ := strconv.Atoi(distance2)

        //part1
        totals(times, distances)
        //part2
        totals([]int{times2}, []int{distances2})
}

func totals(times, distances []int) {
        var held int
        var totals []int
        for race, t := range times {
                ways := 0
                for i := 1; i <= t; i++ {
                        total := t
                        held = i
                        remain := total - held
                        if remain >= t {
                                continue
                        }
                        covered := remain * held
                        if covered > distances[race] {
                                ways++
                        }
                }
                totals = append(totals, ways)
        }
        final := 1
        for _, t := range totals {
                final = final * t
        }
        fmt.Println(final)
}
Editor is loading...
Leave a Comment