package main import ( "bufio" "flag" "fmt" "io" "os" "strconv" ) func findLoopSize(subject int, target int, debug bool) int { val := 1 loopSize := 1 for { val *= subject val %= 20201227 if debug { fmt.Printf("%d\n", val) } if val == target { break } loopSize++ } return loopSize } func transformKey(subject, loopSize int) int { val := 1 for i := 0; i < loopSize; i++ { val *= subject val %= 20201227 } return val } // Task1 ... func Task1(input []int, debug bool) int { subjectNumber := 7 loopA := findLoopSize(subjectNumber, input[0], debug) loopB := findLoopSize(subjectNumber, input[1], debug) fmt.Printf("loopSize for %d: %d\n", input[0], loopA) fmt.Printf("loopSize for %d: %d\n", input[1], loopB) a := transformKey(input[0], loopB) b := transformKey(input[1], loopA) fmt.Printf("encryption for %d@%d: %d\n", input[0], loopB, a) fmt.Printf("encryption for %d@%d: %d\n", input[1], loopA, b) if a == b { return a } return -1 } // Task2 ... func Task2(input []int, debug bool) int { return -1 } func readInput(reader io.Reader) []int { input := make([]int, 0, 10) scanner := bufio.NewScanner(reader) for scanner.Scan() { val, _ := strconv.Atoi(scanner.Text()) input = append(input, val) } return input } func main() { var debug bool flag.BoolVar(&debug, "debug", false, "debug") flag.Parse() file, _ := os.Open("input.txt") input := readInput(file) file.Close() result := Task1(input, debug) fmt.Printf("Task 1: %d\n", result) result = Task2(input, debug) fmt.Printf("Task 2: %d\n", result) }