Download benchmarks/python/intervals.py from SevdanurGenc/LLM-Automated-Test-Generation-Agent: direct link, hf CLI and curl.
- Browser
- Download file 1.8 kB
-
https://huggingface.co/SevdanurGenc/LLM-Automated-Test-Generation-Agent/resolve/main/benchmarks/python/intervals.py
- Command line
-
hf download hf://SevdanurGenc/LLM-Automated-Test-Generation-Agent/benchmarks/python/intervals.py
-
curl -L -o intervals.py https://huggingface.co/SevdanurGenc/LLM-Automated-Test-Generation-Agent/resolve/main/benchmarks/python/intervals.py
1.8 kB
| """Kapalı aralıklar [baş, son] üzerinde işlemler.""" | |
| from typing import List, Tuple | |
| Interval = Tuple[int, int] | |
| def validate(iv: Interval) -> None: | |
| if len(iv) != 2: | |
| raise ValueError("aralık iki elemanlı olmalı") | |
| if iv[0] > iv[1]: | |
| raise ValueError(f"geçersiz aralık: {iv}") | |
| def merge(intervals: List[Interval]) -> List[Interval]: | |
| """Çakışan veya bitişik (ör. [1,3] ve [4,5]) aralıkları birleştirir.""" | |
| for iv in intervals: | |
| validate(iv) | |
| result: List[Interval] = [] | |
| for start, end in sorted(intervals): | |
| if result and start <= result[-1][1] + 1: | |
| result[-1] = (result[-1][0], max(result[-1][1], end)) | |
| else: | |
| result.append((start, end)) | |
| return result | |
| def total_length(intervals: List[Interval]) -> int: | |
| """Birleştirilmiş aralıkların kapsadığı tam sayı adedi.""" | |
| return sum(end - start + 1 for start, end in merge(intervals)) | |
| def contains(intervals: List[Interval], x: int) -> bool: | |
| lo, hi = 0, len(merged := merge(intervals)) - 1 | |
| while lo <= hi: | |
| mid = (lo + hi) // 2 | |
| s, e = merged[mid] | |
| if x < s: | |
| hi = mid - 1 | |
| elif x > e: | |
| lo = mid + 1 | |
| else: | |
| return True | |
| return False | |
| def gaps(intervals: List[Interval], lower: int, upper: int) -> List[Interval]: | |
| """[lower, upper] içinde hiçbir aralığın kapsamadığı boşluklar.""" | |
| if lower > upper: | |
| raise ValueError("lower > upper") | |
| out: List[Interval] = [] | |
| cur = lower | |
| for s, e in merge(intervals): | |
| if e < lower or s > upper: | |
| continue | |
| if s > cur: | |
| out.append((cur, s - 1)) | |
| cur = max(cur, e + 1) | |
| if cur <= upper: | |
| out.append((cur, upper)) | |
| return out | |