Sha256: ae14fb55ba722c36e4a0e74eb40123c219ab9370740ae72f05ae1621f2a5069e

Contents?: true

Size: 1.04 KB

Versions: 274

Compression:

Stored size: 1.04 KB

Contents

package matrix

const testVersion = 1

type Pair struct{ r, c int }

func (m *Matrix) Saddle() (p []Pair) {
	cols := m.Cols()
	colMin := make([][]int, len(cols))
	for c, col := range cols {
		colMin[c] = mins(col)
	}
	for r, row := range *m {
		for _, c := range maxs(row) {
			for _, rmin := range colMin[c] {
				if rmin == r {
					p = append(p, Pair{r, c})
					break
				}
			}
		}
	}
	return
}

// min returns indexes of s that are the minimum value
func mins(s []int) []int {
	if len(s) == 0 {
		return nil
	}
	last := len(s) - 1
	minv := s[last]
	xmin := []int{last}
	for x, v := range s[:last] {
		switch {
		case v < minv:
			minv = v
			xmin = xmin[:1]
			xmin[0] = x
		case v == minv:
			xmin = append(xmin, x)
		}
	}
	return xmin
}

// same code as above, but with >
func maxs(s []int) []int {
	if len(s) == 0 {
		return nil
	}
	last := len(s) - 1
	maxv := s[last]
	xmax := []int{last}
	for x, v := range s[:last] {
		switch {
		case v > maxv:
			maxv = v
			xmax = xmax[:1]
			xmax[0] = x
		case v == maxv:
			xmax = append(xmax, x)
		}
	}
	return xmax
}

Version data entries

274 entries across 274 versions & 1 rubygems

Version Path
trackler-2.2.1.56 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.55 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.54 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.53 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.52 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.51 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.50 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.49 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.48 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.47 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.46 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.45 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.44 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.43 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.42 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.41 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.40 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.39 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.38 tracks/go/exercises/saddle-points/example.go
trackler-2.2.1.37 tracks/go/exercises/saddle-points/example.go