====== binsearch.py ======
* [[ps:teflib:binsearch (old)|이전 버전 코드]]
===== minimum_valid_integer =====
==== 코드 ====
# N minimum_valid_integer
# I {"version": "2.0", "import": ["bisect"], "abc": ["Callable"]}
def minimum_valid_integer(beg: int, end: int, is_valid: Callable[[int],
bool]) -> int:
"""Returns the minimum int X in [beg, end) where is_valid(X) is true."""
if not is_valid(end - 1):
raise ValueError
return bisect.bisect_left(
type('X', (), {'__getitem__': lambda self, x: is_valid(x)})(), True,
beg, end - 1)
==== 설명 ====
* [[:ps:이진_검색#파라메트릭 서치]]와 [[:ps:이진_검색#bisect 모듈을 이용한 파라메트릭 서치 구현]]을 참고
==== 이 코드를 사용하는 문제 ====
---- struct table ----
schema: ps
cols: site, prob_id, %title%, prob_level
filter: teflib ~ *[minimum_valid_integer]*
csv: 0
----
===== maximum_valid_integer =====
==== 코드 ====
# N maximum_valid_integer
# I {"version": "2.0", "import": ["bisect"], "abc": ["Callable"]}
def maximum_valid_integer(beg: int, end: int, is_valid: Callable[[int],
bool]) -> int:
"""Returns the maximum int X in [beg, end) where is_valid(X) is true."""
if not is_valid(beg):
raise ValueError
return bisect.bisect_right(
type('X', (), {'__getitem__': lambda self, x: not is_valid(x)})(),
False, beg, end - 1) - 1
==== 설명 ====
* [[:ps:이진_검색#파라메트릭 서치]]와 [[:ps:이진_검색#bisect 모듈을 이용한 파라메트릭 서치 구현]]을 참고
==== 이 코드를 사용하는 문제 ====
---- struct table ----
schema: ps
cols: site, prob_id, %title%, prob_level
filter: teflib ~ *[maximum_valid_integer]*
csv: 0
----