Last active
September 11, 2018 08:09
-
-
Save hysios/93ace5095a6ecd27d477fff872b8b700 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
) | |
// type number uint8 | |
const ( | |
zero int = 0x7E // 0b1111110 => 6 | |
one = 0x30 // 0b0110000 => 2 | |
two = 0x6d // 0b1101101 => 5 | |
three = 0x79 // 0b1111001 => 5 | |
four = 0x33 // 0b0110011 => 4 | |
five = 0x5B // 0b1011011 => 5 | |
six = 0x5f // 0b1011111 => 6 | |
seven = 0x38 // 0b1110000 => 3 | |
eight = 0x7F // 0b1111111 => 7 | |
nine = 0x7B // 0b1111011 => 6 | |
) | |
var arr = []int{zero, one, two, three, four, five, six, seven, eight, nine} | |
func sum16(number uint16) int { | |
number = (number & 0x5555) + ((number >> 1) & 0x5555) | |
number = (number & 0x3333) + ((number >> 2) & 0x3333) | |
number = (number & 0x0F0F) + ((number >> 4) & 0x0F0F) | |
number = (number & 0x00FF) + ((number >> 8) & 0x00FF) | |
return int(number) | |
} | |
func sum32(number uint32) int { | |
return int(sum16(uint16(number>>16)) + sum16(uint16(number))) | |
} | |
func num(n int) (r int) { | |
if n/10 > 0 { | |
r = arr[n/10] << 8 | |
} | |
r |= arr[n%10] | |
return | |
} | |
func recalc(m int) int { | |
var ( | |
s int | |
) | |
fmt.Printf("calc: %d\n", m) | |
for i := 0; i < m; i++ { | |
for j := 0; j < m; j++ { | |
var a, b, c, d int | |
n := i + j | |
if n > 0 && i !=j { | |
a = num(i) | |
b = num(j) | |
c = num(i + j) | |
d = sum32(uint32(a<<24 | b<<16 | c)) | |
if d == m-4 { | |
s++ | |
fmt.Printf("%d + %d = %d\n", i, j, i+j) | |
} | |
} | |
} | |
} | |
return s | |
} | |
func main() { | |
s := recalc(18) | |
fmt.Printf("total: %d\n", s) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment