From c460ce761cb29d8d04f302dc6fd62fd0c170bfab Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 25 Aug 2016 12:34:26 +0200 Subject: Handshake --- go/secret-handshake/secret_handshake.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 go/secret-handshake/secret_handshake.go (limited to 'go/secret-handshake/secret_handshake.go') diff --git a/go/secret-handshake/secret_handshake.go b/go/secret-handshake/secret_handshake.go new file mode 100644 index 0000000..8ad5fff --- /dev/null +++ b/go/secret-handshake/secret_handshake.go @@ -0,0 +1,33 @@ +package secret + +var sign = map[int]string{ + 1 << 0: "wink", + 1 << 1: "double blink", + 1 << 2: "close your eyes", + 1 << 3: "jump", +} + +const rev = 1 << 4 + +func reverse(s []string) []string { + for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { + s[i], s[j] = s[j], s[i] + } + return s +} + +func Handshake(n int) []string { + if n <= 0 { + return nil + } + var s []string + for i := 1; i < rev; i <<= 1 { + if n&i != 0 { + s = append(s, sign[i]) + } + } + if n&rev != 0 { + s = reverse(s) + } + return s +} -- cgit v1.2.3