This commit is contained in:
parent
323f810fcd
commit
91ba8ec86f
16
src/holt59/aoc/2015/day25.py
Normal file
16
src/holt59/aoc/2015/day25.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import re
|
||||||
|
from typing import Any, Iterator
|
||||||
|
|
||||||
|
from ..base import BaseSolver
|
||||||
|
from ..tools.math import pow_mod
|
||||||
|
|
||||||
|
|
||||||
|
class Solver(BaseSolver):
|
||||||
|
def solve(self, input: str) -> Iterator[Any]:
|
||||||
|
m = re.search(r"row\s*([0-9]+)\s*,\s*column\s*([0-9]+)", input)
|
||||||
|
assert m is not None
|
||||||
|
|
||||||
|
row, col = int(m.group(1)), int(m.group(2))
|
||||||
|
n = (row * (row - 1)) // 2 + col * (col + 1) // 2 + (row - 1) * (col - 1)
|
||||||
|
|
||||||
|
yield (20151125 * pow_mod(252533, n - 1, 33554393)) % 33554393
|
1
src/holt59/aoc/inputs/holt59/2015/day25.txt
Normal file
1
src/holt59/aoc/inputs/holt59/2015/day25.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
To continue, please consult the code grid in the manual. Enter the code at row 3010, column 3019.
|
1
src/holt59/aoc/inputs/tests/2015/day25.txt
Normal file
1
src/holt59/aoc/inputs/tests/2015/day25.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
To continue, please consult the code grid in the manual. Enter the code at row 6, column 5.
|
0
src/holt59/aoc/tools/__init__.py
Normal file
0
src/holt59/aoc/tools/__init__.py
Normal file
21
src/holt59/aoc/tools/math.py
Normal file
21
src/holt59/aoc/tools/math.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
def pow_mod(b: int, e: int, m: int):
|
||||||
|
"""
|
||||||
|
Compute (b ** e) % m using right-to-left binary method.
|
||||||
|
|
||||||
|
See https://en.wikipedia.org/wiki/Modular_exponentiation.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
b: Base to exponentiate.
|
||||||
|
e: Exponent.
|
||||||
|
m: Modulus.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
(b ** e) % m.
|
||||||
|
"""
|
||||||
|
r = 1
|
||||||
|
while e > 0:
|
||||||
|
if e % 2 == 1:
|
||||||
|
r = (r * b) % m
|
||||||
|
e >>= 1
|
||||||
|
b = (b * b) % m
|
||||||
|
return r
|
Loading…
Reference in New Issue
Block a user