diff --git a/2018/day09/day09.go b/2018/day09/day09.go new file mode 100644 index 0000000..8674e0a --- /dev/null +++ b/2018/day09/day09.go @@ -0,0 +1,143 @@ +package main + +import ( + "fmt" + "log" + "os" + "strconv" +) + +var playerCount, marbleCount int +var game *Game + +func main() { + if len(os.Args) < 3 { + fmt.Println("Usage: day09 <# players> <# marbles>") + os.Exit(1) + } + playerCount, marbleCount = Atoi(os.Args[1]), Atoi(os.Args[2]) + part1() +} + +func part1() { + g := NewGame(playerCount, marbleCount) + for i := 1; i <= marbleCount; i++ { + if i%23 == 0 { + g.score(i) + } else { + g.insertMarble(&Marble{value: i}) + } + g.nextPlayer() + } + fmt.Println("* Winner *") + g.printWinner() +} + +type Game struct { + playerCount, marbleCount int + currentPlayer int + scores map[int]int + + currentMarble *Marble +} + +func NewGame(players, marbles int) *Game { + startMarble := &Marble{ + value: 0, + } + startMarble.clockwise = startMarble + startMarble.widdershins = startMarble + return &Game{ + playerCount: players, + marbleCount: marbles, + currentPlayer: 1, + scores: make(map[int]int), + currentMarble: startMarble, + } +} + +func (g *Game) insertMarble(m *Marble) { + m.clockwise = g.currentMarble.clockwise.clockwise + m.widdershins = g.currentMarble.clockwise + g.currentMarble.clockwise.clockwise.widdershins = m + g.currentMarble.clockwise.clockwise = m + g.currentMarble = m +} + +func (g *Game) score(val int) { + g.scores[g.currentPlayer] += val + for i := 0; i < 6; i++ { + g.currentMarble = g.currentMarble.widdershins + } + // Remove g.currentMarble.widdershins + // adding it's value to the current player's score + rem := g.currentMarble.widdershins + g.currentMarble.widdershins = rem.widdershins + g.currentMarble.widdershins.clockwise = g.currentMarble + g.scores[g.currentPlayer] += rem.value +} + +func (g *Game) nextPlayer() { + if g.currentPlayer == g.playerCount { + g.currentPlayer = 1 + } else { + g.currentPlayer++ + } +} + +func (g *Game) printState() { + fmt.Printf("[%d] ", g.currentPlayer) + p := *g.currentMarble + for p.value != 0 { + // Find the '0' marble + p = *p.clockwise + } + if p.value == g.currentMarble.value { + fmt.Printf("(%d)", p.value) + } else { + fmt.Printf(" %d ", p.value) + } + p = *p.clockwise + for p.value != 0 { + if p.value == g.currentMarble.value { + fmt.Printf("(%d)", p.value) + } else { + fmt.Printf(" %d ", p.value) + } + p = *p.clockwise + } + fmt.Println("") +} + +func (g *Game) printScores() { + for i := 1; i <= g.playerCount; i++ { + fmt.Println(i, ":", g.scores[i]) + } +} + +func (g *Game) printWinner() { + var top int + var winner int + for k, v := range g.scores { + if v > top { + top = v + winner = k + } + } + fmt.Println(winner, ":", top) +} + +type Marble struct { + value int + clockwise *Marble + widdershins *Marble +} + +func Atoi(i string) int { + var ret int + var err error + if ret, err = strconv.Atoi(i); err != nil { + log.Fatal("Invalid Atoi") + } + return ret +} diff --git a/2018/day09/myinput.sh b/2018/day09/myinput.sh new file mode 100755 index 0000000..f5787a4 --- /dev/null +++ b/2018/day09/myinput.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +echo "= Part 1 =" +./day09 448 71628 + +echo "= Part 2 =" +./day09 448 7162800 diff --git a/2018/day09/problem b/2018/day09/problem new file mode 100644 index 0000000..a5bd1ad --- /dev/null +++ b/2018/day09/problem @@ -0,0 +1,114 @@ +Advent of Code + +--- Day 9: Marble Mania --- + + You talk to the Elves while you wait for your navigation system to + initialize. To pass the time, they introduce you to their favorite marble + game. + + The Elves play this game by taking turns arranging the marbles in a + circle according to very particular rules. The marbles are numbered + starting with 0 and increasing by 1 until every marble has a number. + + First, the marble numbered 0 is placed in the circle. At this point, + while it contains only a single marble, it is still a circle: the marble + is both clockwise from itself and counter-clockwise from itself. This + marble is designated the current marble. + + Then, each Elf takes a turn placing the lowest-numbered remaining marble + into the circle between the marbles that are 1 and 2 marbles clockwise of + the current marble. (When the circle is large enough, this means that + there is one marble between the marble that was just placed and the + current marble.) The marble that was just placed then becomes the current + marble. + + However, if the marble that is about to be placed has a number which is a + multiple of 23, something entirely different happens. First, the current + player keeps the marble they would have placed, adding it to their score. + In addition, the marble 7 marbles counter-clockwise from the current + marble is removed from the circle and also added to the current player's + score. The marble located immediately clockwise of the marble that was + removed becomes the new current marble. + + For example, suppose there are 9 players. After the marble with value 0 + is placed in the middle, each player (shown in square brackets) takes a + turn. The result of each of those turns would produce circles of marbles + like this, where clockwise is to the right and the resulting current + marble is in parentheses: + + [-] (0) + [1] 0 (1) + [2] 0 (2) 1 + [3] 0 2 1 (3) + [4] 0 (4) 2 1 3 + [5] 0 4 2 (5) 1 3 + [6] 0 4 2 5 1 (6) 3 + [7] 0 4 2 5 1 6 3 (7) + [8] 0 (8) 4 2 5 1 6 3 7 + [9] 0 8 4 (9) 2 5 1 6 3 7 + [1] 0 8 4 9 2(10) 5 1 6 3 7 + [2] 0 8 4 9 2 10 5(11) 1 6 3 7 + [3] 0 8 4 9 2 10 5 11 1(12) 6 3 7 + [4] 0 8 4 9 2 10 5 11 1 12 6(13) 3 7 + [5] 0 8 4 9 2 10 5 11 1 12 6 13 3(14) 7 + [6] 0 8 4 9 2 10 5 11 1 12 6 13 3 14 7(15) + [7] 0(16) 8 4 9 2 10 5 11 1 12 6 13 3 14 7 15 + [8] 0 16 8(17) 4 9 2 10 5 11 1 12 6 13 3 14 7 15 + [9] 0 16 8 17 4(18) 9 2 10 5 11 1 12 6 13 3 14 7 15 + [1] 0 16 8 17 4 18 9(19) 2 10 5 11 1 12 6 13 3 14 7 15 + [2] 0 16 8 17 4 18 9 19 2(20)10 5 11 1 12 6 13 3 14 7 15 + [3] 0 16 8 17 4 18 9 19 2 20 10(21) 5 11 1 12 6 13 3 14 7 15 + [4] 0 16 8 17 4 18 9 19 2 20 10 21 5(22)11 1 12 6 13 3 14 7 15 + [5] 0 16 8 17 4 18(19) 2 20 10 21 5 22 11 1 12 6 13 3 14 7 15 + [6] 0 16 8 17 4 18 19 2(24)20 10 21 5 22 11 1 12 6 13 3 14 7 15 + [7] 0 16 8 17 4 18 19 2 24 20(25)10 21 5 22 11 1 12 6 13 3 14 7 15 + + The goal is to be the player with the highest score after the last marble + is used up. Assuming the example above ends after the marble numbered 25, + the winning score is 23+9=32 (because player 5 kept marble 23 and removed + marble 9, while no other player got any points in this very short example + game). + + Here are a few more examples: + + * 10 players; last marble is worth 1618 points: high score is 8317 + * 13 players; last marble is worth 7999 points: high score is 146373 + * 17 players; last marble is worth 1104 points: high score is 2764 + * 21 players; last marble is worth 6111 points: high score is 54718 + * 30 players; last marble is worth 5807 points: high score is 37305 + + What is the winning Elf's score? + + Your puzzle answer was 394486. + +--- Part Two --- + + Amused by the speed of your answer, the Elves are curious: + + What would the new winning Elf's score be if the number of the last + marble were 100 times larger? + + Your puzzle answer was 3276488008. + + Both parts of this puzzle are complete! They provide two gold stars: ** + +References + + Visible links + . https://adventofcode.com/ + . https://adventofcode.com/2018/about + . https://adventofcode.com/2018/events + . https://adventofcode.com/2018/settings + . https://adventofcode.com/2018/auth/logout + . Advent of Code Supporter + https://adventofcode.com/2018/support + . https://adventofcode.com/2018 + . https://adventofcode.com/2018 + . https://adventofcode.com/2018/support + . https://adventofcode.com/2018/sponsors + . https://adventofcode.com/2018/leaderboard + . https://adventofcode.com/2018/stats + . https://adventofcode.com/2018/sponsors + . https://en.wikipedia.org/wiki/Marble_(toy) + . https://adventofcode.com/2018 + . https://adventofcode.com/2018/day/9/input diff --git a/go.mod b/go.mod index 3a5e158..39dfbf8 100644 --- a/go.mod +++ b/go.mod @@ -1 +1,36 @@ module aoc + +require ( + 9fans.net/go v0.0.0-20181112161441-237454027057 // indirect + github.com/alecthomas/gometalinter v2.0.11+incompatible // indirect + github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect + github.com/cosiner/argv v0.0.1 // indirect + github.com/davidrjenni/reftools v0.0.0-20180914123528-654d0ba4f96d // indirect + github.com/derekparker/delve v1.1.0 // indirect + github.com/fatih/gomodifytags v0.0.0-20180914191908-141225bf62b6 // indirect + github.com/fatih/motion v0.0.0-20180408211639-218875ebe238 // indirect + github.com/google/shlex v0.0.0-20181106134648-c34317bd91bf // indirect + github.com/josharian/impl v0.0.0-20180228163738-3d0f908298c4 // indirect + github.com/jstemmer/gotags v1.4.1 // indirect + github.com/kisielk/errcheck v1.1.0 // indirect + github.com/klauspost/asmfmt v1.2.0 // indirect + github.com/koron/iferr v0.0.0-20180615142939-bb332a3b1d91 // indirect + github.com/mattn/go-isatty v0.0.4 // indirect + github.com/mdempsky/gocode v0.0.0-20181127203757-525aa8bb282c // indirect + github.com/nicksnyder/go-i18n v1.10.0 // indirect + github.com/pelletier/go-toml v1.2.0 // indirect + github.com/peterh/liner v1.1.0 // indirect + github.com/rogpeppe/godef v1.0.0 // indirect + github.com/sirupsen/logrus v1.2.0 // indirect + github.com/spf13/cobra v0.0.3 // indirect + github.com/spf13/pflag v1.0.3 // indirect + github.com/stamblerre/gocode v0.0.0-20181204161302-e160f63d4b91 // indirect + github.com/zmb3/gogetdoc v0.0.0-20181208215853-c5ca8f4d4936 // indirect + golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045 // indirect + golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3 // indirect + golang.org/x/sys v0.0.0-20181208175041-ad97f365e150 // indirect + golang.org/x/tools v0.0.0-20181207222222-4c874b978acb // indirect + gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c // indirect + gopkg.in/yaml.v2 v2.2.2 // indirect + honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..48d51bf --- /dev/null +++ b/go.sum @@ -0,0 +1,85 @@ +9fans.net/go v0.0.0-20150709035532-65b8cf069318/go.mod h1:diCsxrliIURU9xsYtjCp5AbpQKqdhKmf0ujWDUSkfoY= +9fans.net/go v0.0.0-20181112161441-237454027057 h1:OcHlKWkAMJEF1ndWLGxp5dnJQkYM/YImUOvsBoz6h5E= +9fans.net/go v0.0.0-20181112161441-237454027057/go.mod h1:diCsxrliIURU9xsYtjCp5AbpQKqdhKmf0ujWDUSkfoY= +github.com/alecthomas/gometalinter v2.0.11+incompatible h1:toROE7pXPU/pUB4lh6ICqUKwpDtmkRCyJIr1nYqmKp0= +github.com/alecthomas/gometalinter v2.0.11+incompatible/go.mod h1:qfIpQGGz3d+NmgyPBqv+LSh50emm1pt72EtcX2vKYQk= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/cosiner/argv v0.0.1 h1:2iAFN+sWPktbZ4tvxm33Ei8VY66FPCxdOxpncUGpAXE= +github.com/cosiner/argv v0.0.1/go.mod h1:p/NrK5tF6ICIly4qwEDsf6VDirFiWWz0FenfYBwJaKQ= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidrjenni/reftools v0.0.0-20180914123528-654d0ba4f96d h1:aRvyac5PN1NEfcANJ1tfs8GMs5I9OXsVeg0FJkpXOys= +github.com/davidrjenni/reftools v0.0.0-20180914123528-654d0ba4f96d/go.mod h1:8o/GRMvsb9VyFbSEZGXfa0dkSXml4G23W0D/h9FksWM= +github.com/derekparker/delve v1.1.0 h1:icd65nMp7s2HiLz6y/6RCVXBdoED3xxYLwX09EMaRCc= +github.com/derekparker/delve v1.1.0/go.mod h1:pMSZMfp0Nhbm8qdZJkuE/yPGOkLpGXLS1I4poXQpuJU= +github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/gomodifytags v0.0.0-20180914191908-141225bf62b6 h1:iXJdM8Uob6EPOG/PFr5q0J124ysiZdJfACHqICBb3b8= +github.com/fatih/gomodifytags v0.0.0-20180914191908-141225bf62b6/go.mod h1:p2/x7bnOQsbq/deXsDIlj2yLiKFGPkD2nuoYqwn8R4Y= +github.com/fatih/motion v0.0.0-20180408211639-218875ebe238 h1:Qo4RxRMFag+fvDqQ6A3MblYBormptQUZ1ssOtV+EeQ8= +github.com/fatih/motion v0.0.0-20180408211639-218875ebe238/go.mod h1:pseIrV+t9A4+po+KJ1LheSnYH8m1qs6WhKx2zFiGi9I= +github.com/fatih/structtag v1.0.0 h1:pTHj65+u3RKWYPSGaU290FpI/dXxTaHdVwVwbcPKmEc= +github.com/fatih/structtag v1.0.0/go.mod h1:IKitwq45uXL/yqi5mYghiD3w9H6eTOvI9vnk8tXMphA= +github.com/google/shlex v0.0.0-20181106134648-c34317bd91bf h1:7+FW5aGwISbqUtkfmIpZJGRgNFg2ioYPvFaUxdqpDsg= +github.com/google/shlex v0.0.0-20181106134648-c34317bd91bf/go.mod h1:RpwtwJQFrIEPstU94h88MWPXP2ektJZ8cZ0YntAmXiE= +github.com/josharian/impl v0.0.0-20180228163738-3d0f908298c4 h1:gmIVMdGlVf5e6Yo6+ZklxdOrvtOvyrAjJyXAbmOznyo= +github.com/josharian/impl v0.0.0-20180228163738-3d0f908298c4/go.mod h1:t4Tr0tn92eq5ISef4cS5plFAMYAqZlAXtgUcKE6y8nw= +github.com/jstemmer/gotags v1.4.1 h1:aWIyXsU3lTDqhsEC49MP85p2cUUWr2ptvdGNqqGA3r4= +github.com/jstemmer/gotags v1.4.1/go.mod h1:b6J3X0bsLbR4C5SgSx3V3KjuWTtmRzcmWPbTkWZ49PA= +github.com/kisielk/errcheck v1.1.0 h1:ZqfnKyx9KGpRcW04j5nnPDgRgoXUeLh2YFBeFzphcA0= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.2.0 h1:zwsyBYgEdabg32alMful/5pRtMTcR5C5w1LKNg9OD78= +github.com/klauspost/asmfmt v1.2.0/go.mod h1:RAoUvqkWr2rUa2I19qKMEVZQe4BVtcHGTMCUOcCU2Lg= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/koron/iferr v0.0.0-20180615142939-bb332a3b1d91 h1:hunjgdb3b21ZdRmzDPXii0EcnHpjH7uCP+kODoE1JH0= +github.com/koron/iferr v0.0.0-20180615142939-bb332a3b1d91/go.mod h1:C2tFh8w3I6i4lnUJfoBx2Hwku3mgu4wPNTtUNp1i5KI= +github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mdempsky/gocode v0.0.0-20181127203757-525aa8bb282c h1:saoWWUaidAuBfvWlcGr+nhXB+MX4DKxGZ6lrux0Cq2M= +github.com/mdempsky/gocode v0.0.0-20181127203757-525aa8bb282c/go.mod h1:hltEC42XzfMNgg0S1v6JTywwra2Mu6F6cLR03debVQ8= +github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= +github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os= +github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/godef v1.0.0 h1:+3JM5juQRFS/Vifg5lMHkAtRELpcGicuZXdBmf7NIhE= +github.com/rogpeppe/godef v1.0.0/go.mod h1:FWOCnfqToTbJkUGS32JdUoCuBBjtBQ3ZawrP7InscsM= +github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/stamblerre/gocode v0.0.0-20181204161302-e160f63d4b91 h1:qbbVAmcNQXZK9o2ilqULvg++8kTyHIIm/n8Mq1szYgI= +github.com/stamblerre/gocode v0.0.0-20181204161302-e160f63d4b91/go.mod h1:EM2T8YDoTCvGXbEpFHxarbpv7VE26QD1++Cb1Pbh7Gs= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/zmb3/gogetdoc v0.0.0-20181208215853-c5ca8f4d4936 h1:+We2eeE8UuACEPcT7Ez1/yK0MN6SAqzy6S2JPxJTycQ= +github.com/zmb3/gogetdoc v0.0.0-20181208215853-c5ca8f4d4936/go.mod h1:ofmGw6LrMypycsiWcyug6516EXpIxSbZ+uI9ppGypfY= +golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045 h1:Pn8fQdvx+z1avAi7fdM2kRYWQNxGlavNDSyzrQg2SsU= +golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3 h1:x/bBzNauLQAlE3fLku/xy92Y8QwKX5HZymrMz2IiKFc= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181208175041-ad97f365e150 h1:a+Y1JYYfPXfb6xhWlOV++uijPyhhJy5Y/ROUAOZSre4= +golang.org/x/sys v0.0.0-20181208175041-ad97f365e150/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180824175216-6c1c5e93cdc1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181207195948-8634b1ecd393/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181207222222-4c874b978acb h1:YIXCxYolAiiPmVSqA4gVUVcHo8Mi1ivU7ANnK9a63JY= +golang.org/x/tools v0.0.0-20181207222222-4c874b978acb/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c h1:vTxShRUnK60yd8DZU+f95p1zSLj814+5CuEh7NjF2/Y= +gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c/go.mod h1:3HH7i1SgMqlzxCcBmUHW657sD4Kvv9sC3HpL3YukzwA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3 h1:LyX67rVB0kBUFoROrQfzKwdrYLH1cRzHibxdJW85J1c= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=