This commit is contained in:
2016-09-06 11:51:22 -05:00
parent 4c0197f8c6
commit 1572f99a57
4 changed files with 133 additions and 58 deletions

View File

@@ -2,7 +2,6 @@ package matrix
import (
"errors"
"fmt"
"strconv"
"strings"
)
@@ -42,68 +41,31 @@ func New(in string) (*Matrix, error) {
return &ret, nil
}
// Saddle finds all Saddle Points in the matrix
func (m *Matrix) Saddle() []Pair {
var ret []Pair
// We're going to get a list of coords for row highs
// then compare that to a list of coords for col lows
var testRows []Pair
for i := range m.vals {
testRows = append(testRows, Pair{i, m.findRowHigh(i)})
}
fmt.Println(testRows)
return ret
for j := range m.vals[0] {
v := Pair{m.findColLow(j), j}
// If this pair is in testRows, it's a saddle point
for i := range testRows {
if v[0] == testRows[i][0] && v[1] == testRows[i][1] {
ret = append(ret, v)
for j := range m.vals[i] {
val := m.vals[i][j]
// Check if i,j is a saddle point
// (Highest in row, lowest in col)
colTest, rowTest := true, true
for k := range m.vals {
if m.vals[k][j] < val {
colTest = false
break
}
}
for k := range m.vals[i] {
if m.vals[i][k] > val {
rowTest = false
break
}
}
if colTest && rowTest {
ret = append(ret, Pair{i, j})
}
}
}
return ret
}
// Cols returns the values of the cols in the matrix
func (m *Matrix) Cols() [][]int {
var ret [][]int
for i := range m.vals[0] {
var row []int
for j := range m.vals {
row = append(row, m.vals[j][i])
}
ret = append(ret, row)
}
return ret
}
// findColLow finds the lowest value in a column
func (m *Matrix) findColLow(c int) int {
cols := m.Cols()
var idx int
val := -1
if c >= 0 && c < len(cols) {
for i := range cols[c] {
if cols[c][i] < val || val == -1 {
val = cols[c][i]
idx = i
}
}
}
return idx
}
// findColLow finds the lowest value in a column
func (m *Matrix) findRowHigh(r int) int {
var idx int
val := -1
if r >= 0 && r < len(m.vals) {
for i := range m.vals[r] {
if m.vals[r][i] < val || val == -1 {
val = m.vals[r][i]
idx = i
}
}
}
return idx
}