aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--67/go.mod3
-rw-r--r--67/main.go72
2 files changed, 75 insertions, 0 deletions
diff --git a/67/go.mod b/67/go.mod
new file mode 100644
index 0000000..4b89718
--- /dev/null
+++ b/67/go.mod
@@ -0,0 +1,3 @@
+module 67
+
+go 1.19
diff --git a/67/main.go b/67/main.go
new file mode 100644
index 0000000..4cafdcf
--- /dev/null
+++ b/67/main.go
@@ -0,0 +1,72 @@
+package main
+
+import "fmt"
+
+func addBinary(a string, b string) string {
+ var long string
+ var short string
+ var count int
+ carry := false
+
+ if len(a) >= len(b) {
+ long = a
+ short = b
+ } else {
+ long = b
+ short = a
+ }
+
+ result := make([]byte, len(long)+1)
+
+ for i := len(long) - 1; i >= 0; i-- {
+ if long[i] == '1' {
+ count++
+ }
+
+ if len(short)-(len(long)-i) >= 0 {
+ if short[len(short)-(len(long)-i)] == '1' {
+ count++
+ }
+ }
+
+ if carry {
+ count++
+ }
+
+ switch count {
+ case 0:
+ result[i+1] = '0'
+ carry = false
+ case 1:
+ result[i+1] = '1'
+ carry = false
+ case 2:
+ result[i+1] = '0'
+ carry = true
+ case 3:
+ result[i+1] = '1'
+ carry = true
+ }
+
+ count = 0
+ }
+ if carry {
+ result[0] = '1'
+ }
+
+ // fmt.Println(result)
+ if result[0] == 0 {
+ return string(result[1:])
+ } else {
+ return string(result)
+ }
+}
+
+func main() {
+ fmt.Println(addBinary("11", "1"))
+ fmt.Println(addBinary("1010", "1011"))
+ fmt.Println(addBinary("0111", "0111"))
+ fmt.Println(addBinary("0", "0"))
+ fmt.Println(addBinary("10", "0"))
+ fmt.Println(addBinary("10", "1"))
+}