navred61's picture
copied from private space
99a41ea
import math
import random
from typing import List, Tuple
def calculate_factorial(n: int) -> int:
"""Calculate factorial of a number recursively."""
if n <= 1:
return 1
return n * calculate_factorial(n - 1)
def fibonacci_sequence(n: int) -> List[int]:
"""Generate fibonacci sequence up to n terms."""
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
sequence = [0, 1]
for i in range(2, n):
sequence.append(sequence[i-1] + sequence[i-2])
return sequence
def is_prime(num: int) -> bool:
"""Check if a number is prime."""
if num < 2:
return False
if num == 2:
return True
if num % 2 == 0:
return False
for i in range(3, int(math.sqrt(num)) + 1, 2):
if num % i == 0:
return False
return True
def find_primes_in_range(start: int, end: int) -> List[int]:
"""Find all prime numbers in a given range."""
primes = []
for num in range(start, end + 1):
if is_prime(num):
primes.append(num)
return primes
def calculate_statistics(numbers: List[float]) -> dict:
"""Calculate basic statistics for a list of numbers."""
if not numbers:
return {"error": "Empty list provided"}
n = len(numbers)
mean = sum(numbers) / n
sorted_nums = sorted(numbers)
# Calculate median
if n % 2 == 0:
median = (sorted_nums[n//2 - 1] + sorted_nums[n//2]) / 2
else:
median = sorted_nums[n//2]
# Calculate variance and standard deviation
variance = sum((x - mean) ** 2 for x in numbers) / n
std_dev = math.sqrt(variance)
return {
"count": n,
"mean": mean,
"median": median,
"min": min(numbers),
"max": max(numbers),
"variance": variance,
"std_deviation": std_dev
}
def monte_carlo_pi(iterations: int) -> float:
"""Estimate Pi using Monte Carlo method."""
inside_circle = 0
for _ in range(iterations):
x, y = random.random(), random.random()
if x*x + y*y <= 1:
inside_circle += 1
return 4 * inside_circle / iterations
def process_data_pipeline(data: List[int]) -> dict:
"""Complex data processing pipeline demonstrating function calls."""
# Step 1: Filter for positive numbers
positive_data = []
for x in data:
if x > 0:
positive_data.append(x)
# Step 2: Find primes in the data
primes_in_data = []
for x in positive_data:
if is_prime(x):
primes_in_data.append(x)
# Step 3: Calculate statistics
positive_data_floats = []
for x in positive_data:
positive_data_floats.append(float(x))
stats = calculate_statistics(positive_data_floats)
# Step 4: Generate fibonacci sequence up to max value
max_val = max(positive_data) if positive_data else 0
fib_count = min(max_val, 20) # Limit to reasonable size
fib_sequence = fibonacci_sequence(fib_count)
# Step 5: Calculate factorials for small numbers
small_numbers = []
for x in positive_data:
if x <= 10:
small_numbers.append(x)
factorials = {}
for x in small_numbers:
factorials[x] = calculate_factorial(x)
return {
"original_count": len(data),
"positive_count": len(positive_data),
"primes_found": primes_in_data,
"statistics": stats,
"fibonacci_sequence": fib_sequence,
"factorials": factorials,
"pi_estimate": monte_carlo_pi(1000)
}
def main():
"""Main function demonstrating the pipeline."""
sample_data = [1, 2, 3, 5, 8, 13, 21, -1, 0, 17, 19, 23]
result = process_data_pipeline(sample_data)
print(f"Processing complete: {len(result)} metrics calculated")
return result
if __name__ == "__main__":
main()