2015 day 25.
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Mikaël Capelle 2024-12-14 21:02:23 +01:00
parent 323f810fcd
commit 91ba8ec86f
5 changed files with 39 additions and 0 deletions

View 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

View File

@ -0,0 +1 @@
To continue, please consult the code grid in the manual. Enter the code at row 3010, column 3019.

View File

@ -0,0 +1 @@
To continue, please consult the code grid in the manual. Enter the code at row 6, column 5.

View File

View 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