Skip to content

Commit d0ca306

Browse files
Add flexsearch module and sample program with edge case handling
1 parent 9ee0214 commit d0ca306

3 files changed

Lines changed: 125 additions & 7 deletions

File tree

Lib/flexsearch.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# File: Lib/flexsearch.py
2+
3+
def parse_numbers(s):
4+
"""
5+
Parse a string of numbers separated by spaces or commas.
6+
"""
7+
return [int(x) for x in s.replace(',', ' ').split()]
8+
9+
def sort_numbers(arr, mode):
10+
"""
11+
Sort array based on mode:
12+
a -> ascending
13+
d -> descending
14+
min -> min to max
15+
max -> max to min
16+
"""
17+
if mode in ('a', 'min'):
18+
arr.sort()
19+
elif mode in ('d', 'max'):
20+
arr.sort(reverse=True)
21+
else:
22+
raise ValueError(f"Unknown sort mode: {mode}")
23+
return arr
24+
25+
def binary_search(arr, target):
26+
"""
27+
Perform binary search on arr (auto-detect ascending/descending).
28+
Returns index of target, or -1 if not found.
29+
"""
30+
if not arr:
31+
return -1
32+
asc = arr[0] < arr[-1]
33+
l, r = 0, len(arr) - 1
34+
while l <= r:
35+
m = (l + r) // 2
36+
if arr[m] == target:
37+
return m
38+
if (asc and arr[m] < target) or (not asc and arr[m] > target):
39+
l = m + 1
40+
else:
41+
r = m - 1
42+
return -1
43+
44+
if __name__ == "__main__":
45+
# User input
46+
numbers = input("Enter numbers separated by space or comma: ")
47+
mode = input("Enter sort mode (a(ascending)/d(descending)/min/max): ").strip()
48+
target_str = input("Enter target number for search: ").strip()
49+
50+
# Convert target to int
51+
try:
52+
target = int(target_str)
53+
except ValueError:
54+
print("Invalid target number. Exiting.")
55+
exit(1)
56+
57+
arr = parse_numbers(numbers)
58+
sorted_arr = sort_numbers(arr, mode)
59+
idx = binary_search(sorted_arr, target)
60+
61+
print("\nInput string:", numbers)
62+
print("Sorted array:", sorted_arr)
63+
print(f"Target {target} found at index:", idx)

Programs/python.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
/* Minimal main program -- everything is loaded from the library */
1+
/* Minimal embedding example: start Python interpreter from C */
22

33
#include "Python.h"
44

5-
#ifdef MS_WINDOWS
6-
int
7-
wmain(int argc, wchar_t **argv)
5+
#ifdef _WIN32 /* Windows entrypoint */
6+
int wmain(int argc, wchar_t **argv)
87
{
8+
/* Call into the main Python interpreter loop */
99
return Py_Main(argc, argv);
1010
}
11-
#else
12-
int
13-
main(int argc, char **argv)
11+
#else /* Linux/macOS entrypoint */
12+
int main(int argc, char **argv)
1413
{
14+
/* Py_BytesMain handles UTF-8 encoded argv */
1515
return Py_BytesMain(argc, argv);
1616
}
1717
#endif

Programs/samplebinarysearch.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# File: Programs/samplebinarysearch.py
2+
3+
import sys
4+
import os
5+
6+
# Add Lib/ folder to path dynamically (so import works)
7+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'Lib'))
8+
import flexsearch
9+
10+
def main():
11+
while True:
12+
# User input
13+
numbers = input("\nEnter numbers separated by space or comma (or '-1' to quit): ").strip()
14+
if numbers.lower() == '-1':
15+
break
16+
if not numbers:
17+
print("No numbers entered. Try again.")
18+
continue
19+
20+
mode = input("Enter sort mode (a/d/min/max): ").strip().lower()
21+
if mode not in ('a', 'd', 'min', 'max'):
22+
print("Invalid sort mode. Try again.")
23+
continue
24+
25+
target_str = input("Enter target number for search: ").strip()
26+
try:
27+
target = int(target_str)
28+
except ValueError:
29+
print("Invalid target number. Try again.")
30+
continue
31+
32+
# Parse numbers safely
33+
try:
34+
arr = flexsearch.parse_numbers(numbers)
35+
if not arr:
36+
print("No valid numbers found. Try again.")
37+
continue
38+
except ValueError:
39+
print("Invalid number format. Try again.")
40+
continue
41+
42+
# Sort and search
43+
sorted_arr = flexsearch.sort_numbers(arr, mode)
44+
idx = flexsearch.binary_search(sorted_arr, target)
45+
46+
# Output results
47+
print("\nInput string:", numbers)
48+
print("Sorted array:", sorted_arr)
49+
if idx == -1:
50+
print(f"Target {target} not found in the array.")
51+
else:
52+
print(f"Target {target} found at index:", idx)
53+
54+
if __name__ == "__main__":
55+
main()

0 commit comments

Comments
 (0)