Sha256: 59df681a725b2d00b0b68ba91944a6673989ddc8038141e531f431b4f8030307

Contents?: true

Size: 1.19 KB

Versions: 255

Compression:

Stored size: 1.19 KB

Contents

package allyourbase

import (
	"errors"
	"math"
)

const testVersion = 1

var (
	ErrInvalidBase  = errors.New("invalid base given")
	ErrInvalidDigit = errors.New("invalid digit given")
)

func ConvertToBase(inputBase uint64, inputDigits []uint64, outputBase uint64) ([]uint64, error) {
	if inputBase < 2 || outputBase < 2 {
		return nil, ErrInvalidBase
	}

	for _, d := range inputDigits {
		if d >= inputBase {
			return nil, ErrInvalidDigit
		}
	}

	total := toCanonicalBase(inputBase, inputDigits)
	return digitsInBase(total, outputBase), nil
}

func toCanonicalBase(inputBase uint64, inputDigits []uint64) uint64 {
	var total uint64

	digits := len(inputDigits)
	for i := digits - 1; i >= 0; i-- {
		total += inputDigits[digits-1-i] * uint64(math.Pow(float64(inputBase), float64(i)))
	}

	return total
}

func reverse(digits []uint64) []uint64 {
	var output = make([]uint64, len(digits))

	for i, d := range digits {
		output[len(digits)-1-i] = d
	}

	return output
}

func digitsInBase(total uint64, outputBase uint64) []uint64 {
	var digits []uint64
	for total >= outputBase {
		digits = append(digits, total%outputBase)
		total /= outputBase
	}
	digits = append(digits, total%outputBase)

	return reverse(digits)
}

Version data entries

255 entries across 255 versions & 1 rubygems

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