CodeSense / codesense /rules.py
Yooshiii's picture
Upload 36 files
f8a39f0 verified
def detect_algorithm(features: dict) -> dict:
result = {
"pattern": "Unknown",
"category": "Unknown"
}
total_loops = features.get("for_loops", 0) + features.get("while_loops", 0)
# ===============================
# Dynamic Programming
# ===============================
if features.get("memoization_pattern"):
return {"pattern": "Memoization", "category": "Dynamic Programming"}
if features.get("tabulation_pattern"):
return {"pattern": "Tabulation", "category": "Dynamic Programming"}
# ===============================
# Heap
# ===============================
if features.get("heap_pattern"):
return {"pattern": "Heap-Based Algorithm", "category": "Data Structure Based"}
# ===============================
# Search
# ===============================
if features.get("binary_search_pattern"):
return {"pattern": "Binary Search", "category": "Search Algorithm"}
# ===============================
# Graph
# ===============================
if features.get("bfs_pattern"):
return {"pattern": "Breadth-First Search", "category": "Graph Algorithm"}
if features.get("dfs_pattern"):
return {"pattern": "Depth-First Search", "category": "Graph Algorithm"}
# ===============================
# Pointer Techniques
# ===============================
if features.get("sliding_window_pattern"):
return {"pattern": "Sliding Window", "category": "Pointer Technique"}
if (
len(features.get("pointer_variables", [])) >= 2
and features.get("pointer_updates", 0) >= 2
and features.get("while_loops", 0) >= 1
):
return {"pattern": "Two-Pointer Technique", "category": "Pointer Technique"}
# ===============================
# Sorting Algorithms
# ===============================
if features.get("bubble_sort_pattern"):
return {"pattern": "Bubble Sort", "category": "Sorting Algorithm"}
if features.get("insertion_sort_pattern"):
return {"pattern": "Insertion Sort", "category": "Sorting Algorithm"}
if features.get("merge_sort_pattern"):
return {"pattern": "Merge Sort", "category": "Sorting Algorithm"}
if features.get("quick_sort_pattern"):
return {"pattern": "Quick Sort", "category": "Sorting Algorithm"}
# ===============================
# Recursive Patterns
# ===============================
if features.get("divide_and_conquer"):
return {"pattern": "Recursive Divide-and-Conquer", "category": "Divide-and-Conquer"}
if features.get("recursion") and features.get("recursive_call_count", 0) >= 2:
return {"pattern": "Recursive (Exponential)", "category": "Recursive Pattern"}
if features.get("recursion"):
return {"pattern": "Recursive (Linear)", "category": "Recursive Pattern"}
# ===============================
# Iterative Patterns
# ===============================
if features.get("max_loop_depth", 0) >= 2:
return {"pattern": "Nested Iterative", "category": "Iterative Pattern"}
if total_loops == 1:
return {"pattern": "Linear Iterative", "category": "Iterative Pattern"}
if total_loops == 0:
return {"pattern": "Constant-Time", "category": "Direct Computation"}
return result