| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | package main// add binary// func minInt(x, y int) int {// 	if x < y {// 		return x// 	}// 	return y// }const one, zero = byte('1'), byte('0')func add3Bi(x, y, z byte) (sum, remain byte) {	switch x + y + z - 3*zero {	case 0:		return zero, zero	case 1:		return one, zero	case 2:		return zero, one	case 3:		return one, one	default:		return	}}func reverseStr(s string) string {	runes := []rune(s)	for from, to := 0, len(s)-1; from < to; from, to = from+1, to-1 {		runes[from], runes[to] = runes[to], runes[from]	}	return string(runes)}func addBinary(a string, b string) string {	la, lb := len(a)-1, len(b)-1	sum, remain := zero, zero	res := make([]rune, 0)	for i := 0; i <= minInt(la, lb); i++ {		sum, remain = add3Bi(a[la-i], b[lb-i], remain)		res = append(res, rune(sum))	}	lc := 0	var c string	if la < lb {		c = b		lc = lb	} else {		c = a		lc = la	}	for i := minInt(la, lb) + 1; i <= lc; i++ {		sum, remain = add3Bi(zero, c[lc-i], remain)		res = append(res, rune(sum))	}	if remain == one {		res = append(res, rune(one))	}	return reverseStr(string(res))}
 |