Skip to content

Instantly share code, notes, and snippets.

@hysios
Last active September 11, 2018 08:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hysios/93ace5095a6ecd27d477fff872b8b700 to your computer and use it in GitHub Desktop.
Save hysios/93ace5095a6ecd27d477fff872b8b700 to your computer and use it in GitHub Desktop.
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