Sha256: 898ab74f0f706fde859483136132a240fa68f3b3cc937dc712ccba2f941c5843

Contents?: true

Size: 572 Bytes

Versions: 274

Compression:

Stored size: 572 Bytes

Contents

package trinary

import (
	"fmt"
	"math"
)

const testVersion = 1

func ParseTrinary(s string) (int64, error) {
	const third = math.MaxInt64 / 3
	overflow := false
	var d int64
	for _, r := range s {
		switch r {
		case '0', '1', '2':
			if overflow {
				continue
			}
			if d > third {
				overflow = true
				continue
			}
			d *= 3
			t := int64(r - '0')
			if t > math.MaxInt64-d {
				overflow = true
				continue
			}
			d += t
		default:
			return 0, fmt.Errorf("invalid: %s", s)
		}
	}
	if overflow {
		return 0, fmt.Errorf("overflow: %s", s)
	}
	return d, nil
}

Version data entries

274 entries across 274 versions & 1 rubygems

Version Path
trackler-2.1.0.18 tracks/go/exercises/trinary/example.go
trackler-2.1.0.17 tracks/go/exercises/trinary/example.go
trackler-2.1.0.16 tracks/go/exercises/trinary/example.go
trackler-2.1.0.15 tracks/go/exercises/trinary/example.go
trackler-2.1.0.14 tracks/go/exercises/trinary/example.go
trackler-2.1.0.13 tracks/go/exercises/trinary/example.go
trackler-2.1.0.12 tracks/go/exercises/trinary/example.go
trackler-2.1.0.11 tracks/go/exercises/trinary/example.go
trackler-2.1.0.10 tracks/go/exercises/trinary/example.go
trackler-2.1.0.9 tracks/go/exercises/trinary/example.go
trackler-2.1.0.8 tracks/go/exercises/trinary/example.go
trackler-2.1.0.7 tracks/go/exercises/trinary/example.go
trackler-2.1.0.6 tracks/go/exercises/trinary/example.go
trackler-2.1.0.5 tracks/go/exercises/trinary/example.go
trackler-2.1.0.4 tracks/go/exercises/trinary/example.go
trackler-2.1.0.3 tracks/go/exercises/trinary/example.go
trackler-2.1.0.2 tracks/go/exercises/trinary/example.go
trackler-2.1.0.1 tracks/go/exercises/trinary/example.go
trackler-2.1.0.0 tracks/go/exercises/trinary/example.go
trackler-2.0.8.55 tracks/go/exercises/trinary/example.go