summaryrefslogtreecommitdiff
path: root/p82/p_82.go
diff options
context:
space:
mode:
Diffstat (limited to 'p82/p_82.go')
-rw-r--r--p82/p_82.go103
1 files changed, 103 insertions, 0 deletions
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]...))
+}