Sha256: 1213f406c573f401f2f3d5cdb194f8d339ab5d2bd9fae185d98d9446719cc056

Contents?: true

Size: 1.26 KB

Versions: 518

Compression:

Stored size: 1.26 KB

Contents

package matrix

import (
	"errors"
	"strconv"
	"strings"
)

// Maintenance note:  This file exists as both matrix/example.go and
// saddle-points/matrix_example.go.  When changing one file, copy to the other.

type Matrix [][]int

func New(s string) (*Matrix, error) {
	var err error
	lines := strings.Split(s, "\n")
	m := make(Matrix, len(lines))
	for i, l := range lines {
		ws := strings.Fields(l)
		if i > 0 && len(ws) != len(m[0]) {
			return nil, errors.New("rows have unequal length")
		}
		row := make([]int, len(ws))
		for i, w := range ws {
			if row[i], err = strconv.Atoi(w); err != nil {
				return nil, errors.New("invalid int in element data")
			}
		}
		m[i] = row
	}
	return &m, nil
}

func (m *Matrix) Set(row, col, val int) (ok bool) {
	mm := *m
	if row < 0 || row >= len(mm) || col < 0 {
		return false
	}
	if cols := len(mm[0]); col >= cols {
		return false
	}
	mm[row][col] = val
	return true
}

func (m *Matrix) Rows() [][]int {
	r := make([][]int, len(*m))
	for i, mr := range *m {
		r[i] = append([]int{}, mr...)
	}
	return r
}

func (m *Matrix) Cols() [][]int {
	mm := *m
	if len(mm) == 0 {
		return nil
	}
	c := make([][]int, len(mm[0]))
	for i := range c {
		col := make([]int, len(mm))
		for j := range col {
			col[j] = mm[j][i]
		}
		c[i] = col
	}
	return c
}

Version data entries

518 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.180 tracks/go/exercises/matrix/example.go
trackler-2.2.1.179 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.179 tracks/go/exercises/matrix/example.go
trackler-2.2.1.178 tracks/go/exercises/matrix/example.go
trackler-2.2.1.178 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.177 tracks/go/exercises/matrix/example.go
trackler-2.2.1.177 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.176 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.176 tracks/go/exercises/matrix/example.go
trackler-2.2.1.175 tracks/go/exercises/matrix/example.go
trackler-2.2.1.175 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.174 tracks/go/exercises/matrix/example.go
trackler-2.2.1.174 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.173 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.173 tracks/go/exercises/matrix/example.go
trackler-2.2.1.172 tracks/go/exercises/matrix/example.go
trackler-2.2.1.172 tracks/go/exercises/saddle-points/matrix_example.go
trackler-2.2.1.171 tracks/go/exercises/matrix/example.go
trackler-2.2.1.171 tracks/go/exercises/saddle-points/matrix_example.go