From 2bae1659ba8eb742f737ccb31d9ad7f25f9599f7 Mon Sep 17 00:00:00 2001 From: ache Date: Wed, 5 Sep 2018 00:56:09 +0200 Subject: Init commit --- p82/p_82.go | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 p82/p_82.go (limited to 'p82/p_82.go') diff --git a/p82/p_82.go b/p82/p_82.go new file mode 100644 index 0000000..f7df3bb --- /dev/null +++ b/p82/p_82.go @@ -0,0 +1,103 @@ +package main + +import ( + "fmt" + "strconv" + "log" + "encoding/csv" + "strings" + "io" + "os" +) + +/* Cette fonction est inutile, c'est juste que j'ai réfléchis dans + ma tête de haut en bas, j'avais pas envie de réfléchir + de gauche à droite */ + +func trans( r [][]int ) { + for i := range r { + for j := 0 ; j < i ; j++ { + r[i][j], r[j][i] = r[j][i], r[i][j] + } + } +} + + +func extractRecord( record []string ) []int { + row := make([]int, len(record)) + + for i := range record { + if v, err := strconv.Atoi(strings.TrimSpace(record[i])) ; err == nil { + row[i] = v + } else { + log.Fatalln(err) + } + } + + return row +} + +func min( nums ...int) int { + min := nums[0] + + for _, num := range nums[1:] { + if num < min { + min = num + } + } + return min +} + +func main() { + file, err := os.Open("p082_matrix.txt") + + if err != nil { + log.Fatal(err) + } + + + r := csv.NewReader(file) + + record, err := r.Read() + + array := make([][]int, 0) + + for ; err == nil ; record, err = r.Read() { + array = append( array, extractRecord( record ) ) + } + + if err != io.EOF && err != nil { + log.Fatal(err) + } + + trans(array) + + minArray := make([][]int, 0) + + for row := range array { + if row == 0 { + minArray = append(minArray, array[0]) + continue + } + + minRow := make([]int, len(array[row])) + + minRow[0] = minArray[row-1][0] + array[row][0] + + // Un allez + for i := 1 ; i < len(minRow) ; i++ { + minRow[i] = min( minArray[row-1][i], minRow[i-1]) + array[row][i] + } + + // Un retour ! + for i:= len(minRow) - 2 ; i >= 0 ; i-- { + minRow[i] = min( minRow[i], minRow[i+1] + array[row][i] ) + } + + minArray = append(minArray, minRow) + + } + + // Ça c'est HYPER classe ! + fmt.Println(min(minArray[len(minArray)-1]...)) +} -- cgit v1.2.3-54-g00ecf