aboutsummaryrefslogtreecommitdiff
path: root/challenge-120/lance-wicks/golang/bits/bits.go
blob: 3448a13786e6f1f0317eb590eef73798061ad8c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
	"fmt"
	"os"
	"regexp"
	"strconv"
)

func main() {
	n, _ := strconv.Atoi(os.Args[1])
	fmt.Print("Output: ")
	fmt.Println(swapBits(n))
}

func swapBits(n int) int {
	binary := fmt.Sprintf("%08b", n)

	re := regexp.MustCompile(`..`)
	bits := re.FindAllString(binary, -1)
	binary_reversed := ""

	for _, bit := range bits {
		binary_reversed = binary_reversed + Reverse(bit)
	}

	new_int, _ := strconv.ParseInt(binary_reversed, 2, 64)

	return int(new_int)
}

func Reverse(s string) string {
	runes := []rune(s)
	for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
		runes[i], runes[j] = runes[j], runes[i]
	}
	return string(runes)
}