Advertisement
Guest User

Untitled

a guest
Dec 15th, 2016
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.13 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "flag"
  6.     "fmt"
  7.     "os"
  8. )
  9.  
  10. var n = flag.Int("n", 272, "length")
  11.  
  12. func main() {
  13.     flag.Parse()
  14.     fmt.Println("Day 16 of Advent of Code 2016")
  15.  
  16.     scanner := bufio.NewScanner(os.Stdin)
  17.     scanner.Scan()
  18.     input := scanner.Text()
  19.  
  20.     for len(input) < *n {
  21.         input = step_string(input)
  22.     }
  23.     input = input[:*n]
  24.  
  25.     chksm := checksum(input)
  26.     fmt.Println(chksm)
  27. }
  28.  
  29. func step_string(s string) string {
  30.     return s + "0" + invert(reverse(s))
  31. }
  32.  
  33. func checksum(s string) string {
  34.     if len(s)%2 == 1 {
  35.         return s
  36.     }
  37.     var chksm []rune
  38.     for i := 0; i < len(s); i += 2 {
  39.         if s[i] == s[i+1] {
  40.             chksm = append(chksm, '1')
  41.         } else {
  42.             chksm = append(chksm, '0')
  43.         }
  44.     }
  45.     return checksum(string(chksm))
  46. }
  47.  
  48. func invert(s string) string {
  49.     var new_string []rune
  50.     for _, c := range s {
  51.         if c == '1' {
  52.             new_string = append(new_string, '0')
  53.         } else {
  54.             new_string = append(new_string, '1')
  55.         }
  56.     }
  57.     return string(new_string)
  58. }
  59.  
  60. func reverse(s string) string {
  61.     var new_string []byte
  62.     for i := len(s) - 1; i >= 0; i-- {
  63.         new_string = append(new_string, s[i])
  64.     }
  65.     return string(new_string)
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement