Skip to content

Instantly share code, notes, and snippets.

@dotcypress
Last active August 29, 2015 14:05
Show Gist options
  • Save dotcypress/2a714c85fc235cbf5ab3 to your computer and use it in GitHub Desktop.
Save dotcypress/2a714c85fc235cbf5ab3 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"time"
"strings"
"net/http"
"io/ioutil"
)
const columns = 3
const lines = 5
func main() {
matrix := downloadMatrix("http://lpaste.net/raw/109038")
start := time.Now()
symbols := [][][]int{{{1, 1, 1}, {1, 0, 1}, {1, 0, 1}, {1, 0, 1}, {1, 1, 1}}, {{1, 1, 0}, {0, 1, 0}, {0, 1, 0}, {0, 1, 0}, {1, 1, 1}}, {{1, 1, 1}, {0, 0, 1}, {1, 1, 1}, {1, 0, 0}, {1, 1, 1}}, {{1, 1, 1}, {0, 0, 1}, {1, 1, 1}, {0, 0, 1}, {1, 1, 1}}, {{1, 0, 1}, {1, 0, 1}, {1, 1, 1}, {0, 0, 1}, {0, 0, 1}}, {{1, 1, 1}, {1, 0, 0}, {1, 1, 1}, {0, 0, 1}, {1, 1, 1}}, {{1, 1, 1}, {1, 0, 0}, {1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, {{1, 1, 1}, {0, 0, 1}, {0, 1, 1}, {0, 1, 0}, {0, 1, 0}}, {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}, {0, 0, 1}, {1, 1, 1}}}
symbolHashes := make([]int, len(symbols))
for n := 0; n < len(symbols); n++ {
symbolHashes[n] = hash(symbols[n], 0, 0)
}
for line := 0; line < len(matrix) - lines; line++ {
for column := 0; column < len(matrix[0]) - columns; column++ {
hashValue := hash(matrix, line, column)
for n := 0; n < len(symbolHashes); n++ {
if(symbolHashes[n] == hashValue){
fmt.Printf("%d @ [%d:%d]\n", n, line, column)
}
}
}
}
elapsed := time.Since(start)
fmt.Printf("-> %s\n", elapsed)
}
func hash(matrix [][]int, y, x int) int {
var n uint32 = 1
result := 0
for line := 0; line < lines; line++ {
for column := 0; column < columns; column++ {
if(matrix[line + y][column + x] == 1){
result |= 1 << n
}
n++
}
}
return result
}
func downloadMatrix(url string) [][]int {
resp, err := http.Get(url)
if err != nil {
fmt.Println("У нас обед!")
return make([][]int, 0)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("У нас переучет!")
return make([][]int, 0)
}
lines := strings.Split(string(body), "\n")
matrix := make([][]int, len(lines))
for line := 0; line < len(lines); line++ {
matrix[line] = make([]int, len(lines[line]))
for column := 0; column < len(lines[line]); column++ {
if lines[line][column] == 48 {
matrix[line][column] = 0
} else {
matrix[line][column] = 1
}
}
}
return matrix
}
0 @ [1:1]
1 @ [1:5]
2 @ [1:9]
3 @ [1:13]
4 @ [1:17]
5 @ [1:21]
6 @ [1:25]
7 @ [1:29]
8 @ [1:33]
9 @ [1:37]
0 @ [1:42]
1 @ [1:46]
2 @ [1:50]
3 @ [1:54]
4 @ [1:58]
5 @ [1:62]
6 @ [1:66]
7 @ [1:70]
8 @ [1:74]
9 @ [1:78]
0 @ [1:83]
1 @ [1:87]
2 @ [1:91]
3 @ [1:95]
4 @ [1:99]
5 @ [1:103]
6 @ [1:107]
7 @ [1:111]
8 @ [1:115]
9 @ [1:119]
0 @ [7:1]
1 @ [7:5]
2 @ [7:9]
3 @ [7:13]
4 @ [7:17]
5 @ [7:21]
6 @ [7:25]
7 @ [7:29]
8 @ [7:33]
9 @ [7:37]
0 @ [7:42]
1 @ [7:46]
2 @ [7:50]
3 @ [7:54]
4 @ [7:58]
5 @ [7:62]
6 @ [7:66]
7 @ [7:70]
8 @ [7:74]
9 @ [7:78]
0 @ [7:83]
1 @ [7:87]
2 @ [7:91]
3 @ [7:95]
4 @ [7:99]
5 @ [7:103]
6 @ [7:107]
7 @ [7:111]
8 @ [7:115]
9 @ [7:119]
0 @ [13:1]
1 @ [13:5]
2 @ [13:9]
3 @ [13:13]
4 @ [13:17]
5 @ [13:21]
6 @ [13:25]
7 @ [13:29]
8 @ [13:33]
9 @ [13:37]
0 @ [13:42]
1 @ [13:46]
2 @ [13:50]
3 @ [13:54]
4 @ [13:58]
5 @ [13:62]
6 @ [13:66]
7 @ [13:70]
8 @ [13:74]
9 @ [13:78]
0 @ [13:83]
1 @ [13:87]
2 @ [13:91]
3 @ [13:95]
4 @ [13:99]
5 @ [13:103]
6 @ [13:107]
7 @ [13:111]
8 @ [13:115]
9 @ [13:119]
0 @ [19:1]
1 @ [19:5]
2 @ [19:9]
3 @ [19:13]
4 @ [19:17]
5 @ [19:21]
6 @ [19:25]
7 @ [19:29]
8 @ [19:33]
9 @ [19:37]
0 @ [19:42]
1 @ [19:46]
2 @ [19:50]
3 @ [19:54]
4 @ [19:58]
5 @ [19:62]
6 @ [19:66]
7 @ [19:70]
8 @ [19:74]
9 @ [19:78]
0 @ [19:83]
1 @ [19:87]
2 @ [19:91]
3 @ [19:95]
4 @ [19:99]
5 @ [19:103]
6 @ [19:107]
7 @ [19:111]
8 @ [19:115]
9 @ [19:119]
0 @ [25:1]
1 @ [25:5]
2 @ [25:9]
3 @ [25:13]
4 @ [25:17]
5 @ [25:21]
6 @ [25:25]
7 @ [25:29]
8 @ [25:33]
9 @ [25:37]
0 @ [25:42]
1 @ [25:46]
2 @ [25:50]
3 @ [25:54]
4 @ [25:58]
5 @ [25:62]
6 @ [25:66]
7 @ [25:70]
8 @ [25:74]
9 @ [25:78]
0 @ [25:83]
1 @ [25:87]
2 @ [25:91]
3 @ [25:95]
4 @ [25:99]
5 @ [25:103]
6 @ [25:107]
7 @ [25:111]
8 @ [25:115]
9 @ [25:119]
0 @ [31:1]
1 @ [31:5]
2 @ [31:9]
3 @ [31:13]
4 @ [31:17]
5 @ [31:21]
6 @ [31:25]
7 @ [31:29]
8 @ [31:33]
9 @ [31:37]
0 @ [31:42]
1 @ [31:46]
2 @ [31:50]
3 @ [31:54]
4 @ [31:58]
5 @ [31:62]
6 @ [31:66]
7 @ [31:70]
8 @ [31:74]
9 @ [31:78]
0 @ [31:83]
1 @ [31:87]
2 @ [31:91]
3 @ [31:95]
4 @ [31:99]
5 @ [31:103]
6 @ [31:107]
7 @ [31:111]
8 @ [31:115]
9 @ [31:119]
0 @ [37:1]
1 @ [37:5]
2 @ [37:9]
3 @ [37:13]
4 @ [37:17]
5 @ [37:21]
6 @ [37:25]
7 @ [37:29]
8 @ [37:33]
9 @ [37:37]
0 @ [37:42]
1 @ [37:46]
2 @ [37:50]
3 @ [37:54]
4 @ [37:58]
5 @ [37:62]
6 @ [37:66]
7 @ [37:70]
8 @ [37:74]
9 @ [37:78]
0 @ [37:83]
1 @ [37:87]
2 @ [37:91]
3 @ [37:95]
4 @ [37:99]
5 @ [37:103]
6 @ [37:107]
7 @ [37:111]
8 @ [37:115]
9 @ [37:119]
0 @ [43:1]
1 @ [43:5]
2 @ [43:9]
3 @ [43:13]
4 @ [43:17]
5 @ [43:21]
6 @ [43:25]
7 @ [43:29]
8 @ [43:33]
9 @ [43:37]
0 @ [43:42]
1 @ [43:46]
2 @ [43:50]
3 @ [43:54]
4 @ [43:58]
5 @ [43:62]
6 @ [43:66]
7 @ [43:70]
8 @ [43:74]
9 @ [43:78]
0 @ [43:83]
1 @ [43:87]
2 @ [43:91]
3 @ [43:95]
4 @ [43:99]
5 @ [43:103]
6 @ [43:107]
7 @ [43:111]
8 @ [43:115]
9 @ [43:119]
0 @ [49:1]
1 @ [49:5]
2 @ [49:9]
3 @ [49:13]
4 @ [49:17]
5 @ [49:21]
6 @ [49:25]
7 @ [49:29]
8 @ [49:33]
9 @ [49:37]
0 @ [49:42]
1 @ [49:46]
2 @ [49:50]
3 @ [49:54]
4 @ [49:58]
5 @ [49:62]
6 @ [49:66]
7 @ [49:70]
8 @ [49:74]
9 @ [49:78]
0 @ [49:83]
1 @ [49:87]
2 @ [49:91]
3 @ [49:95]
4 @ [49:99]
5 @ [49:103]
6 @ [49:107]
7 @ [49:111]
8 @ [49:115]
9 @ [49:119]
0 @ [55:1]
1 @ [55:5]
2 @ [55:9]
3 @ [55:13]
4 @ [55:17]
5 @ [55:21]
6 @ [55:25]
7 @ [55:29]
8 @ [55:33]
9 @ [55:37]
0 @ [55:42]
1 @ [55:46]
2 @ [55:50]
3 @ [55:54]
4 @ [55:58]
5 @ [55:62]
6 @ [55:66]
7 @ [55:70]
8 @ [55:74]
9 @ [55:78]
0 @ [55:83]
1 @ [55:87]
2 @ [55:91]
3 @ [55:95]
4 @ [55:99]
5 @ [55:103]
6 @ [55:107]
7 @ [55:111]
8 @ [55:115]
9 @ [55:119]
-> 1.738283ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment