Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "strconv"
- "strings"
- )
- func GammaRate(values []string) (g string) {
- c := make([]int, len(values[0]))
- for _, s := range values {
- for i, v := range s {
- if v == '1' {
- c[i]++
- }
- }
- }
- for _, v := range c {
- if v >= len(values)/2 {
- g += "1"
- } else {
- g += "0"
- }
- }
- return
- }
- func EpsilonRate(g string) (e string) {
- for _, v := range g {
- if v == '1' {
- e += "0"
- } else {
- e += "1"
- }
- }
- return
- }
- func PartOne(values []string) int {
- gs := GammaRate(values)
- es := EpsilonRate(gs)
- g, _ := strconv.ParseInt(gs, 2, 64)
- e, _ := strconv.ParseInt(es, 2, 64)
- return int(g * e)
- }
- func OxygenGeneratorRating(s []string, seed string) []string {
- // condizione finale ambigua
- if len(s) == 2 {
- if s[0] > s[1] {
- return []string{s[0]}
- }
- return []string{s[1]}
- }
- // conta il valore in prevalenza nella posizione len(seed)
- var one, zero int
- for _, v := range s {
- if v[len(seed)] == '1' {
- one++
- } else {
- zero++
- }
- }
- if one >= zero {
- seed += "1"
- } else {
- seed += "0"
- }
- // filtra gli elementi che iniziano con seed
- f := make([]string, 0)
- for _, v := range s {
- if strings.HasPrefix(v, seed) {
- f = append(f, v)
- }
- }
- // fine
- if len(seed) == len(s[0]) {
- return f
- } else {
- return OxygenGeneratorRating(f, seed)
- }
- }
- func CO2ScrubberRating(s []string, seed string) []string {
- // condizione finale ambigua
- if len(s) == 2 {
- if s[0] < s[1] {
- return []string{s[0]}
- }
- return []string{s[1]}
- }
- // conta il valore in prevalenza nella posizione len(seed)
- var one, zero int
- for _, v := range s {
- if v[len(seed)] == '1' {
- one++
- } else {
- zero++
- }
- }
- if one >= zero {
- seed += "0"
- } else {
- seed += "1"
- }
- // filtra gli elementi che iniziano con seed
- f := make([]string, 0)
- for _, v := range s {
- if strings.HasPrefix(v, seed) {
- f = append(f, v)
- }
- }
- // fine
- if len(seed) == len(s[0]) {
- return f
- } else {
- return CO2ScrubberRating(f, seed)
- }
- }
- func PartTwo(values []string) int {
- ogr := OxygenGeneratorRating(values, "")[0]
- csr := CO2ScrubberRating(values, "")[0]
- o, _ := strconv.ParseInt(ogr, 2, 64)
- c, _ := strconv.ParseInt(csr, 2, 64)
- return int(c * o)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement