| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package main
- import "encoding/hex"
- import "crypto/md5"
- import "strconv"
- import "strings"
- import "fmt"
- import "os"
- func string2Md5(input string, incr int) string {
- inputBytes := []byte(input + strconv.Itoa(incr))
- hashed := make([]byte, 16)
- for i, j := range(md5.Sum(inputBytes)) {
- hashed[i] = j
- }
- result := hex.EncodeToString(hashed)
- return result
- }
- func ex1(doorId string) string {
- var result string
- for i := 0 ; len(result) < 8; i++ {
- hashed := (string2Md5(doorId, i))
- if (strings.HasPrefix(hashed, "00000")) {
- result += string(hashed[5])
- fmt.Printf(result)
- for j := len(result); j < 8; j++ {
- fmt.Printf("_")
- }
- fmt.Printf("\n")
- }
- }
- return result
- }
- func isDone(in []rune) bool {
- res := len(in)
- for i := 0; i < len(in); i++ {
- if in[i] != 0 {
- res--;
- }
- }
- return res == 0
- }
- func ex2(doorId string) string {
- result := make([]rune, 8)
- for i := 0 ; true ; i++ {
- hashed := (string2Md5(doorId, i))
- if (strings.HasPrefix(hashed, "00000")) {
- if (hashed[5] <= '7') {
- if (result[hashed[5] - '0'] == 0) {
- result[hashed[5] - '0'] = rune(hashed[6])
- for j := 0; j < 8; j++ {
- if result[j] == 0 {
- fmt.Printf("_")
- } else {
- fmt.Printf("%c", result[j])
- }
- }
- fmt.Printf("\n")
- if isDone(result) {
- return string(result)
- }
- }
- }
- }
- }
- return ""
- }
- func main() {
- if len(os.Args) != 2 {
- fmt.Fprintln(os.Stderr, "Usage: PROG doorId")
- } else {
- doorId := os.Args[1]
- ex1(doorId)
- }
- }
|