Syncing
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user