Skip to main content
Loading...

More Python Posts

def format_timestamp(timestamp_epoch):
    """
    Convert epoch timestamp to formatted datetime string without using datetime package.
    
    Args:
        timestamp_epoch (int/float): Unix epoch timestamp (seconds since 1970-01-01 00:00:00 UTC)
        
    Returns:
        str: Formatted datetime string in 'YYYY-MM-DD HH:MM:SS' format
    """
    # Constants for time calculations
    SECONDS_PER_DAY = 86400
    SECONDS_PER_HOUR = 3600
    SECONDS_PER_MINUTE = 60
    
    # Handle negative timestamps and convert to integer
    timestamp = int(timestamp_epoch)
    
    # Calculate days since epoch and remaining seconds
    days_since_epoch = timestamp // SECONDS_PER_DAY
    remaining_seconds = timestamp % SECONDS_PER_DAY
    
    # Calculate hours, minutes, seconds
    hours = remaining_seconds // SECONDS_PER_HOUR
    remaining_seconds %= SECONDS_PER_HOUR
    minutes = remaining_seconds // SECONDS_PER_MINUTE
    seconds = remaining_seconds % SECONDS_PER_MINUTE
    
    # Calculate date (simplified, ignoring leap seconds)
    year = 1970
    days = days_since_epoch
    while days >= 365:
        is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
        days_in_year = 366 if is_leap else 365
        if days >= days_in_year:
            days -= days_in_year
            year += 1
    
    # Month lengths (non-leap year for simplicity, adjusted later for leap years)
    month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        month_lengths[1] = 29
    
    month = 0
    while days >= month_lengths[month]:
        days -= month_lengths[month]
        month += 1
    
    # Convert to 1-based indexing for month and day
    month += 1
    day = days + 1
    
    # Format the output string
    return f"{year:04d}-{month:02d}-{day:02d} {hours:02d}:{minutes:02d}:{seconds:02d}"

# Example timestamp (Unix epoch seconds)
timestamp = 1697054700
formatted_date = format_timestamp(timestamp)
print(formatted_date + " UTC")  # Output: 2023-10-11 18:45:00
import random
import time

def generate_maze(width, height):
    """Generate a random maze using depth-first search"""
    maze = [[1 for _ in range(width)] for _ in range(height)]
    
    def carve(x, y):
        maze[y][x] = 0
        directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
        random.shuffle(directions)
        
        for dx, dy in directions:
            nx, ny = x + dx*2, y + dy*2
            if 0 <= nx < width and 0 <= ny < height and maze[ny][nx] == 1:
                maze[y + dy][x + dx] = 0
                carve(nx, ny)
    
    carve(1, 1)
    maze[0][1] = 0  # Entrance
    maze[height-1][width-2] = 0  # Exit
    return maze

def print_maze(maze, path=None):
    """Print the maze with ASCII characters"""
    if path is None:
        path = []
    
    for y in range(len(maze)):
        for x in range(len(maze[0])):
            if (x, y) in path:
                print('◍', end=' ')
            elif maze[y][x] == 0:
                print(' ', end=' ')
            else:
                print('▓', end=' ')
        print()

def solve_maze(maze, start, end):
    """Solve the maze using recursive backtracking"""
    visited = set()
    path = []
    
    def dfs(x, y):
        if (x, y) == end:
            path.append((x, y))
            return True
        
        if (x, y) in visited or maze[y][x] == 1:
            return False
            
        visited.add((x, y))
        path.append((x, y))
        
        for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
            if dfs(x + dx, y + dy):
                return True
                
        path.pop()
        return False
    
    dfs(*start)
    return path

# Generate and solve a maze
width, height = 21, 11  # Should be odd numbers
maze = generate_maze(width, height)
start = (1, 0)
end = (width-2, height-1)

print("Generated Maze:")
print_maze(maze)

print("\nSolving Maze...")
time.sleep(2)
path = solve_maze(maze, start, end)

print("\nSolved Maze:")
print_maze(maze, path)