55 lines
962 B
Go
55 lines
962 B
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
start := time.Now()
|
|
partOne()
|
|
duration := time.Since(start)
|
|
fmt.Printf("p1: %s, p2: n/a\n", duration)
|
|
}
|
|
|
|
func partOne() {
|
|
f, _ := os.Open("input")
|
|
reader := bufio.NewReader(f)
|
|
scanner := bufio.NewScanner(reader)
|
|
|
|
scanner.Scan()
|
|
doorPubKey, _ := strconv.Atoi(scanner.Text())
|
|
scanner.Scan()
|
|
cardPubKey, _ := strconv.Atoi(scanner.Text())
|
|
|
|
subjectNumber := 7
|
|
value := 1
|
|
magicPrime := 20201227
|
|
loopCount := 1
|
|
doorLoopCount := 0
|
|
cardLoopCount := 0
|
|
for {
|
|
value = (value * subjectNumber) % magicPrime
|
|
if value == doorPubKey {
|
|
doorLoopCount = loopCount
|
|
}
|
|
if value == cardPubKey {
|
|
cardLoopCount = loopCount
|
|
}
|
|
loopCount = loopCount + 1
|
|
if doorLoopCount != 0 && cardLoopCount != 0 {
|
|
break
|
|
}
|
|
}
|
|
|
|
value = 1
|
|
subjectNumber = cardPubKey
|
|
for i := 0; i < doorLoopCount; i = i + 1 {
|
|
value = (value * subjectNumber) % magicPrime
|
|
}
|
|
fmt.Println(value)
|
|
}
|