Sha256: 27f9ebc861d8bde75b268eae777701110b17c29511d4c52bc9c0dd498d236633

Contents?: true

Size: 1.42 KB

Versions: 107

Compression:

Stored size: 1.42 KB

Contents

package brackets

// testVersion shows the version of the exercise.
const testVersion = 5

type bracketKind int

const (
	kindParen  bracketKind = iota
	kindSquare bracketKind = iota
	kindBrace  bracketKind = iota
	kindOther  bracketKind = iota
)

// Whether a bracket is an opening or closing bracket
type bracketForm bool

const (
	formOpen  bracketForm = true
	formClose bracketForm = false
)

type charInfo struct {
	kind bracketKind
	form bracketForm
}

// Bracket returns whether all the brackets in the input string are
// correctly nested.
func Bracket(input string) (bool, error) {
	var stack []bracketKind
	for _, char := range input {
		ci := info(char)
		if ci.kind == kindOther {
			continue
		}
		if ci.form == formOpen {
			stack = append(stack, ci.kind)
		} else {
			if len(stack) == 0 {
				return false, nil
			} else if stack[len(stack)-1] == ci.kind {
				stack = stack[:len(stack)-1]
			} else {
				return false, nil
			}
		}
	}
	return len(stack) == 0, nil
}

func info(char rune) charInfo {
	switch char {
	case '(':
		return charInfo{kind: kindParen, form: formOpen}
	case '[':
		return charInfo{kind: kindSquare, form: formOpen}
	case '{':
		return charInfo{kind: kindBrace, form: formOpen}
	case ')':
		return charInfo{kind: kindParen, form: formClose}
	case ']':
		return charInfo{kind: kindSquare, form: formClose}
	case '}':
		return charInfo{kind: kindBrace, form: formClose}
	default:
		return charInfo{kind: kindOther}
	}
}

Version data entries

107 entries across 107 versions & 1 rubygems

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