56 lines
967 B
Go
56 lines
967 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
input := stdinToStringSlice()
|
||
|
var partOne, partTwo string
|
||
|
for j := range input[0] {
|
||
|
freq := make(map[byte]int)
|
||
|
for i := range input {
|
||
|
freq[input[i][j]]++
|
||
|
}
|
||
|
partOne += getTopByte(freq)
|
||
|
partTwo += getBottomByte(freq)
|
||
|
}
|
||
|
fmt.Println("Answer to Part 1: " + partOne)
|
||
|
fmt.Println("Answer to Part 2: " + partTwo)
|
||
|
}
|
||
|
|
||
|
func getTopByte(f map[byte]int) string {
|
||
|
var topByte byte
|
||
|
var topByteCnt int
|
||
|
for k, v := range f {
|
||
|
if v > topByteCnt {
|
||
|
topByteCnt = v
|
||
|
topByte = k
|
||
|
}
|
||
|
}
|
||
|
return string(topByte)
|
||
|
}
|
||
|
|
||
|
func getBottomByte(f map[byte]int) string {
|
||
|
var botByte byte
|
||
|
var botByteCnt int
|
||
|
for k, v := range f {
|
||
|
if v < botByteCnt || botByte == 0 {
|
||
|
botByteCnt = v
|
||
|
botByte = k
|
||
|
}
|
||
|
}
|
||
|
return string(botByte)
|
||
|
}
|
||
|
|
||
|
func stdinToStringSlice() []string {
|
||
|
var input []string
|
||
|
scanner := bufio.NewScanner(os.Stdin)
|
||
|
for scanner.Scan() {
|
||
|
input = append(input, scanner.Text())
|
||
|
}
|
||
|
return input
|
||
|
}
|