41 lines
861 B
Python
41 lines
861 B
Python
from __future__ import annotations
|
|
import math
|
|
from decimal import Decimal, ROUND_HALF_UP
|
|
from typing import Iterable
|
|
|
|
|
|
MAXINT32 = 2**32
|
|
MAXINT64 = 2**64
|
|
MAXINT32_SIGNED = 2**31
|
|
MAXINT64_SIGNED = 2**63
|
|
MAXINT32_UNSIGNED = MAXINT32
|
|
MAXINT64_UNSIGNED = MAXINT64
|
|
|
|
|
|
def round_half_up(number: int | float) -> int:
|
|
"""pythons round() rounds .5 to the *even* number; 0.5 == 0"""
|
|
return int(Decimal(number).to_integral(ROUND_HALF_UP))
|
|
|
|
|
|
def get_factors(num: int) -> set:
|
|
f = {num}
|
|
for x in range(1, int(math.sqrt(num)) + 1):
|
|
if num % x == 0:
|
|
f.add(x)
|
|
f.add(num // x)
|
|
|
|
return f
|
|
|
|
|
|
def mul(ints: Iterable[int]) -> int:
|
|
"""similar to sum(), just for multiplication"""
|
|
ret = 1
|
|
for x in ints:
|
|
ret *= x
|
|
|
|
return ret
|
|
|
|
|
|
def magnitude(value: int | float) -> int:
|
|
return math.floor(math.log10(value))
|