====== 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 ----