/ Home

Python Assignments

Note: 1000 Assignments

1. List

Basic

  1. Create a Python program to input 5 integers and store them in a list. Print the sum and average of the list elements.
  2. Write a function that removes duplicates from a list.
  3. Create a list of numbers and print only the even numbers.
  4. Reverse a given list using slicing and print it.
  5. Create a list of strings and check if a specific string exists in the list.

  6. Write a program to find the index of a specific element in a list.
  7. Create a program to input a list of integers and sort them in ascending order.
  8. Write a function to count the occurrences of a specific element in a list.
  9. Create a list of random numbers and print the largest and smallest values.
  10. Write a program to concatenate two lists and remove duplicates.

Intermediate

  1. Write a program to rotate a list by n positions to the left.
  2. Implement a program to merge two sorted lists into one sorted list.
  3. Find the second largest and second smallest numbers in a list.
  4. Implement a function to count the frequency of each element in a list.
  5. Create a list of tuples where each tuple contains a number and its square.

  6. Implement a program to split a list into two halves.
  7. Write a program to find the intersection of two lists.
  8. Create a program to remove all elements from a list that are greater than a given threshold.
  9. Write a function to flatten a nested list.
  10. Implement a program to group elements of a list into chunks of a specified size.

Advanced

  1. Implement a program to find all subsets of a list.
  2. Create a program to partition a list into two based on a condition (e.g., greater than a threshold).
  3. Write a program to find all unique permutations of a given list.
  4. Implement a dynamic program to find the maximum sum subarray in a list.
  5. Create a sparse matrix representation using lists and implement addition for two such matrices.

  6. Write a program to perform matrix multiplication using nested lists.
  7. Create a program to generate all possible combinations of elements in a list of length n.
  8. Implement a function to find the longest increasing subsequence in a list.
  9. Write a program to shuffle the elements of a list randomly.
  10. Design a function to merge overlapping intervals in a list of tuples.

2. IP Utils

Basic

  1. Write a program to validate an IPv4 address format.
  2. Extract the network ID from a given IP address and subnet mask.
  3. Count the number of host IPs possible in a given subnet.
  4. Check if two IP addresses belong to the same subnet.
  5. Write a program to convert an IP address into binary format.

Intermediate

  1. Create a CIDR calculator that outputs the network ID, broadcast address, and usable IP range.
  2. Develop a program to generate all possible IP addresses from a given string of digits.
  3. Write a program to find the class (A, B, C, D, or E) of an IP address.
  4. Implement a tool to compare two IP addresses and determine their relationship in terms of network hierarchy.
  5. Create a program to calculate the distance (number of bits) between two IP addresses.

Advanced

  1. Implement a program that identifies overlapping subnets from a list of CIDR notations.
  2. Create a utility to compress and expand IPv6 addresses.
  3. Build a tool to generate subnet allocation for a given IP block and required subnets.
  4. Design a program to validate and parse a mixed list of IPv4 and IPv6 addresses.
  5. Implement an IP address obfuscator and deobfuscator.

2. IP Utils

Basic

  1. Write a program to convert an IP address from dotted-decimal notation to integer format.
  2. Create a function to generate the broadcast address of a given IP and subnet mask.
  3. Write a program to check if an IP address is private or public.
  4. Develop a utility to validate if an IP belongs to a given CIDR range.
  5. Implement a program to calculate the total number of subnets possible for a given network mask.

Intermediate

  1. Write a function to split a large subnet into smaller subnets of a given size.
  2. Create a program to find the next available IP address in a subnet.
  3. Write a utility to convert an IP address into hexadecimal format.
  4. Implement a function to classify IP addresses as reserved or assignable.
  5. Create a program to validate subnet masks and ensure they are in valid CIDR format.

Advanced

  1. Develop a tool to find the longest prefix match for a given IP address in a list of CIDR blocks.
  2. Write a program to generate hierarchical IP allocation for ISPs.
  3. Implement an IP address summarization tool to aggregate multiple CIDR blocks into the smallest possible range.
  4. Create a tool to detect duplicate IPs in a large dataset.
  5. Design an advanced firewall rule simulator to test IP filtering.

3. Set

Basic

  1. Create a set of integers and perform union, intersection, and difference operations.
  2. Write a program to check if one set is a subset of another.
  3. Find the symmetric difference between two sets.
  4. Remove all duplicates from a list using a set.
  5. Write a program to check if two sets are disjoint.

Intermediate

  1. Implement a function to find all elements that are present in exactly one of the two sets.
  2. Write a program to generate a set of all common elements in multiple sets.
  3. Create a program to find the Cartesian product of two sets.
  4. Implement a function to find the power set of a given set.
  5. Write a program to find the longest set of consecutive integers in a list.

Advanced

  1. Implement a program to solve the set cover problem.
  2. Write a program to efficiently find minimal hitting sets for a collection of sets.
  3. Create a utility to compare two sets for structural equivalence under transformations.
  4. Build a program to generate all possible partitions of a set.
  5. Implement an algorithm to compute the difference between two sets using Bloom filters.

3. Set

Basic

  1. Write a program to find common elements between two sets of strings.
  2. Create a set from a string, removing duplicate characters.
  3. Write a program to check if one set is a proper subset of another.
  4. Implement a function to clear all elements from a set.
  5. Create a program to find the union of multiple sets.

Intermediate

  1. Write a function to find all unique combinations of elements from two sets.
  2. Create a program to determine the Jaccard similarity between two sets.
  3. Write a program to find elements that appear in at least two of three sets.
  4. Implement a program to merge two sets with priority given to one for duplicate elements.
  5. Write a program to compute the complement of a set within a universal set.

Advanced

  1. Create a program to find the maximum independent set in a graph using sets.
  2. Write a tool to solve the subset sum problem using sets.
  3. Implement a function to compare and rank multiple sets by their cardinality.
  4. Develop a tool to calculate the transitive closure of relations represented by sets.
  5. Create a program to generate all minimal covers of a set.

4. Method

Basic

  1. Write a class with instance methods to calculate the area and perimeter of a rectangle.
  2. Create a class with static methods for basic mathematical operations (addition, subtraction, multiplication, and division).
  3. Implement a class with a method that accepts a list and returns the reversed list.
  4. Write a method to convert a string to uppercase and lowercase.
  5. Implement a class method to count the number of instances created.

Intermediate

  1. Design a class with overloaded methods for handling various types of input.
  2. Write a program to define and call a private method within a class.
  3. Implement a method that accepts variable-length arguments and calculates their product.
  4. Create a class with a method to count vowels in a given string.
  5. Develop a method to validate and format phone numbers using regular expressions.

Advanced

  1. Implement a factory method pattern to create instances of various shapes.
  2. Create a class with methods for matrix operations (addition, multiplication, transposition).
  3. Write a program to implement and use the singleton design pattern.
  4. Develop a method that uses reflection to inspect methods of another class at runtime.
  5. Build a class with methods to handle file encryption and decryption.

4. Method

Basic

  1. Add a method to a class that converts an attribute value into JSON format.
  2. Write a method that checks if a number is prime.
  3. Implement a class method to compare two objects of the same class by their attributes.
  4. Write a method that calculates the area of a triangle given its base and height.
  5. Implement a method to reverse a string without using built-in functions.

Intermediate

  1. Create a method to calculate the compound interest given principal, rate, and time.
  2. Implement a class with methods to handle string encryption and decryption using a simple cipher.
  3. Add a method to a class to find the nth Fibonacci number recursively.
  4. Write a method to determine if a given year is a leap year.
  5. Implement a method to find all palindromic substrings in a given string.

Advanced

  1. Design a class with methods to parse and evaluate mathematical expressions.
  2. Implement a class method to dynamically create an instance from a dictionary of attributes.
  3. Write a program to handle method overloading using *args and **kwargs.
  4. Create a method to visualize data as a bar chart using a text-based interface.
  5. Develop a class with methods to interact with external APIs and handle JSON responses.

5. Class

Basic

  1. Create a Student class with attributes for name, roll number, and grade. Add methods to display the student details.
  2. Implement a BankAccount class with methods to deposit, withdraw, and check the balance.
  3. Write a Car class with attributes for brand, model, and year. Add a method to display the car details.
  4. Define a class with a method to calculate the factorial of a number.
  5. Implement a Person class with an introduce method.

Intermediate

  1. Design a class to represent a 2D point and implement methods for distance calculation and midpoint.
  2. Create a Book class with attributes and methods to manage a book inventory system.
  3. Write a Circle class with methods to calculate area and circumference.
  4. Implement a class with methods for handling employee payroll.
  5. Develop a Logger class to log messages with timestamps.

Advanced

  1. Implement a class hierarchy with inheritance to model geometric shapes (e.g., circle, rectangle, triangle).
  2. Build a thread-safe implementation of a custom Queue class.
  3. Design a Graph class with methods for depth-first and breadth-first traversal.
  4. Implement a Database class to interact with an SQLite database.
  5. Develop a class for handling complex numbers with operator overloading.

5. Class

Basic

  1. Create a Calculator class with methods for basic arithmetic operations.
  2. Write a Shape class with attributes for color and a method to display the color.
  3. Create a Clock class with a method to display the current time.
  4. Write a Student class with a method to calculate the GPA from a list of grades.
  5. Implement a Dog class with attributes for breed, age, and methods to perform basic actions like barking.

Intermediate

  1. Create a Polygon class with methods to calculate perimeter and area for different polygons.
  2. Write a Movie class to manage a movie database with methods to add, remove, and search for movies.
  3. Implement a Bank class with methods to transfer money between accounts.
  4. Design a Weather class to fetch and display current weather using an API.
  5. Develop a Product class to manage inventory with methods for restocking and tracking sales.

Advanced

  1. Build a class hierarchy for a transportation system, including vehicles like cars, bikes, and buses.
  2. Write a Library class to manage book rentals and returns, tracking overdue books.
  3. Implement a Workflow class to model and execute tasks in a directed acyclic graph.
  4. Create a DataFrame class with methods to filter, sort, and summarize data.
  5. Design a class to simulate an event-driven system with a queue of events.

6. Logger

Basic

  1. Set up a basic logger to log messages to a file.
  2. Configure a logger to display different log levels (DEBUG, INFO, WARNING, ERROR).
  3. Write a program to log user inputs to a file.
  4. Create a logger with timestamps in each log message.
  5. Set up a rotating file logger.

Intermediate

  1. Write a logger to log API requests and responses to a file.
  2. Configure a logger to send critical logs via email.
  3. Create a hierarchical logger with multiple modules logging to different files.
  4. Add custom log formatting for better readability.
  5. Implement a logger that logs to both a file and the console.

Advanced

  1. Write a program to log exceptions and errors with traceback details.
  2. Build a logging decorator to log function calls and arguments.
  3. Implement a centralized logging system for a distributed application.
  4. Create a logger that integrates with external monitoring tools.
  5. Design a logger with dynamic log level changes at runtime.

6. Logger

Basic

  1. Set up a logger to log messages with different formats for INFO and ERROR levels.
  2. Write a logger to log function start and end times.
  3. Create a logger that logs only messages above a specific severity level.
  4. Write a program to log user login attempts to a file.
  5. Implement a logger that logs the size of the log file after every entry.

Intermediate

  1. Create a logger that archives old logs into a zip file periodically.
  2. Write a logger to track and log memory usage of a program.
  3. Develop a logger to trace the execution flow of recursive functions.
  4. Write a program to log incoming and outgoing messages in a chat application.
  5. Implement a logger with custom levels for application-specific events.

Advanced

  1. Build a distributed logger to collect logs from multiple servers into a centralized database.
  2. Create a logger to analyze and report trends in logged messages over time.
  3. Implement a logger that integrates with Elasticsearch for log storage and visualization.
  4. Write a logger that uses machine learning to identify anomalies in log patterns.
  5. Develop a logger to track and measure performance bottlenecks in a web application.

7. Decorator

Basic

  1. Write a decorator to measure the execution time of a function.
  2. Create a decorator to log function calls.
  3. Implement a decorator to validate input arguments of a function.
  4. Write a decorator to retry a function in case of failure.
  5. Design a decorator to cache the result of a function.

Intermediate

  1. Create a decorator to enforce a rate limit on function calls.
  2. Write a decorator that modifies the output of a function.
  3. Implement a decorator to convert function arguments to uppercase.
  4. Create a decorator to automatically handle exceptions in a function.
  5. Write a chainable decorator for logging and execution time measurement.

Advanced

  1. Build a class-based decorator to manage database connections.
  2. Implement a decorator for lazy evaluation in a class.
  3. Write a meta-decorator that can enhance other decorators.
  4. Develop a decorator for access control in a web application.
  5. Create a decorator to transform synchronous functions into asynchronous ones.

7. Decorator

Basic

  1. Write a decorator to add timestamps to log messages.
  2. Create a decorator to validate the data type of function arguments.
  3. Write a decorator to automatically retry a function upon failure, with exponential backoff.
  4. Develop a decorator to memoize the results of expensive functions.
  5. Create a decorator to log the arguments and return values of a function.

Intermediate

  1. Write a decorator to limit the execution of a function to once every n seconds.
  2. Implement a decorator that checks for required permissions before executing a function.
  3. Write a decorator to handle timeout for long-running functions.
  4. Create a decorator to throttle API calls to a specific rate.
  5. Write a decorator to enable lazy evaluation of function results.

Advanced

  1. Create a decorator to profile and visualize function execution time.
  2. Write a decorator to dynamically modify class methods based on runtime conditions.
  3. Implement a decorator for distributed locking using Redis.
  4. Develop a decorator for transactional operations with automatic rollback on failure.
  5. Build a decorator to enforce input and output constraints using Python type hints.

8. Dateutil

Basic

  1. Parse a date string into a datetime object.
  2. Add 7 days to the current date and print the result.
  3. Calculate the difference between two dates.
  4. Write a program to get the day of the week for a given date.
  5. Format a date in multiple formats using strftime.

Intermediate

  1. Parse and handle ISO 8601 date strings.
  2. Generate a list of all dates between two given dates.
  3. Implement a program to find the next weekday after a given date.
  4. Write a program to calculate the number of weekends in a year.
  5. Create a recurring event scheduler with customizable intervals.

Advanced

  1. Write a program to handle time zone conversions.
  2. Create a program to calculate the date of Easter for any given year.
  3. Implement a utility to parse and calculate relative time deltas (e.g., “2 weeks ago”).
  4. Build a date range merging tool.
  5. Write a tool to normalize dates in text using dateutil.

8. Dateutil

Basic

  1. Write a program to determine the number of days in a month for a given year.
  2. Create a utility to add or subtract months from a given date.
  3. Write a program to find the difference in time between two given timestamps.
  4. Create a program to display the last day of the current month.
  5. Implement a program to parse and validate dates in multiple formats.

Intermediate

  1. Write a program to calculate the age of a person given their birthdate.
  2. Implement a program to find the number of weekdays between two dates.
  3. Create a scheduler to trigger events every nth day.
  4. Write a program to handle daylight saving time transitions.
  5. Implement a function to find all holidays in a given date range.

Advanced

  1. Write a tool to convert between different calendar systems (Gregorian, Julian, etc.).
  2. Create a program to schedule recurring tasks with custom intervals (e.g., every 3rd Tuesday).
  3. Build a date range overlap detection utility for bookings or reservations.
  4. Write a program to synchronize and normalize dates across time zones.
  5. Develop a program to calculate accurate durations across leap seconds.

9. Argsparser

Basic

  1. Create a script that accepts a name and age as arguments and prints a greeting.
  2. Write a program to handle optional arguments with default values.
  3. Implement a script to accept a file path as an argument and print the file content.
  4. Add a flag to a script to enable verbose output.
  5. Write a script to accept a list of numbers and print their sum.

Intermediate

  1. Implement a script with subcommands for addition, subtraction, multiplication, and division.
  2. Add a custom help message to a script using argparse.
  3. Create a script to accept multiple arguments and validate their types.
  4. Write a script to parse and handle a configuration file path as an argument.
  5. Implement argument groups for better organization of command-line options.

Advanced

  1. Create a script with nested subcommands for complex workflows.
  2. Implement a CLI tool with dynamic argument parsing based on a configuration file.
  3. Write a program to generate and validate argument constraints (e.g., number range).
  4. Develop a CLI tool with integration for auto-completion.
  5. Build a fully-featured command-line tool with custom error handling.

9. Argsparser

Basic

  1. Write a script to accept a list of file paths and print their existence.
  2. Create a CLI tool with options for verbose and silent modes.
  3. Write a script to accept user credentials (username, password) as arguments.
  4. Implement a program to display help text and argument defaults.
  5. Create a tool to accept multiple file extensions and filter a directory’s files.

Intermediate

  1. Write a program to accept arguments for connecting to a database (host, port, user, password).
  2. Implement a script with mutually exclusive arguments.
  3. Create a CLI for a calculator with arguments for operation type and operands.
  4. Write a script that parses arguments for configuring logging levels and formats.
  5. Implement a tool to parse nested configuration options.

Advanced

  1. Write a program to generate a dynamic argument parser from a JSON configuration file.
  2. Develop a script that supports dynamic subcommands based on plugins.
  3. Create a CLI tool that uses argument validation with custom error messages.
  4. Implement a program that stores and retrieves arguments from a cache file.
  5. Build a CLI tool that allows argument combinations and dependencies.

10. Caching

Basic

  1. Implement a simple in-memory cache using a dictionary.
  2. Write a program to cache the results of a function using functools.lru_cache.
  3. Create a program to cache API responses for a fixed duration.
  4. Implement a manual caching system with expiration using a dictionary.
  5. Write a program to count cache hits and misses.

Intermediate

  1. Create a decorator-based caching mechanism with custom eviction policies.
  2. Implement a program to save and load cache data to/from a file.
  3. Write a multi-layered caching system with memory and disk layers.
  4. Build a caching mechanism for database queries.
  5. Write a program to implement a Least Recently Used (LRU) cache.

Advanced

  1. Implement a distributed caching system using Redis.
  2. Write a caching library with support for different backend stores (e.g., memory, file, Redis).
  3. Create a utility to cache function outputs based on input arguments.
  4. Develop a cache-aware API client with support for stale-while-revalidate caching.
  5. Build a program to analyze cache performance metrics in real-time.

10. Caching

Basic

  1. Write a program to cache user preferences in a dictionary.
  2. Create a simple caching mechanism with time-based invalidation.
  3. Implement a caching system for storing and retrieving website session data.
  4. Write a program to cache the results of a function with default and custom keys.
  5. Create a script to preload and cache configuration data for a tool.

Intermediate

  1. Implement a caching mechanism that writes to disk when memory usage exceeds a threshold.
  2. Write a program to manage a shared cache for concurrent threads.
  3. Build a utility to cache API responses with support for cache invalidation by URL pattern.
  4. Create a program to manage a cache with a size limit and eviction policy (FIFO).
  5. Develop a function-level cache decorator that tracks hits, misses, and evictions.

Advanced

  1. Build a distributed cache system using Memcached.
  2. Implement a hierarchical cache system with local and remote cache layers.
  3. Create a program to serialize and store cache data in a database.
  4. Design a caching system with predictive prefetching based on usage patterns.
  5. Develop a tool to measure and optimize cache hit rates for performance tuning.







1. List

Basic

  1. Create a list of integers and replace all odd numbers with -1.
  2. Write a program to count how many times a particular element appears in a list.
  3. Reverse a list without using slicing or the reverse() method.
  4. Write a function to double each element in a list.
  5. Create a list from a string, where each character is an element.
  6. Write a program to find the sum of all elements in a list using a loop.
  7. Create a program to append one list to another.
  8. Write a program to find the index of the maximum element in a list.
  9. Generate a list of square numbers for the first 10 integers.
  10. Write a function to remove all occurrences of a specific element from a list.

Intermediate

  1. Implement a function to find the longest consecutive subsequence in a list.
  2. Write a program to rotate a list n positions to the right.
  3. Create a list of tuples where each tuple contains a number and its factorial.
  4. Write a function to merge overlapping intervals in a list of ranges.
  5. Implement a program to generate a list of prime numbers within a range.
  6. Write a function to find the union of two lists without duplicates.
  7. Create a program to partition a list into sublists of a given size.
  8. Write a function to split a list into a list of even and odd numbers.
  9. Implement a function to remove every nth element from a list.
  10. Write a program to find the three largest numbers in a list.

Advanced

  1. Create a program to efficiently find all distinct triplets in a list that sum up to a given value.
  2. Write a program to generate all possible subsets of a list and count how many subsets have an even sum.
  3. Implement a function to convert a list of integers into their Roman numeral representations.
  4. Write a function to find the most frequent element in a list.
  5. Design a program to perform polynomial addition using lists of coefficients.
  6. Create a sparse matrix using nested lists and implement its addition and multiplication.
  7. Write a program to convert a list of nested dictionaries into a flat dictionary.
  8. Create a function to find the longest common subsequence between two lists.
  9. Write a program to rearrange a list so that all negative numbers appear before positive ones, without changing their relative order.
  10. Implement a program to sort a list of custom objects based on multiple attributes.

2. IP Utils

Basic

  1. Write a program to calculate the network prefix length from a subnet mask.
  2. Create a program to list all possible IP addresses in a /24 subnet.
  3. Write a program to classify an IP address as unicast, multicast, or reserved.
  4. Create a function to determine the last usable host IP in a subnet.
  5. Write a program to extract the octets of an IP address and print them.
  6. Implement a function to count the number of bits set in an IP address.
  7. Write a program to check if a given IP address is valid.
  8. Implement a function to calculate the wildcard mask of a given subnet.
  9. Create a tool to extract the network address from an IP address and subnet mask.
  10. Write a program to find the next higher subnet that can include a given IP range.

Intermediate

  1. Create a program to merge two or more IP ranges into the smallest set of ranges.
  2. Write a tool to determine the overlap between two IP ranges.
  3. Create a function to find the first n usable host IPs in a subnet.
  4. Write a program to calculate the percentage of usable IPs in a given range.
  5. Create a program to generate a list of random IP addresses in a given subnet.
  6. Write a program to identify all broadcast addresses in a given range of subnets.
  7. Implement a function to determine the CIDR notation of an IP range.
  8. Create a program to calculate the total number of networks possible for a given mask length.
  9. Write a program to sort a list of IP addresses numerically.
  10. Implement a function to check if an IP is valid based on specific custom rules (e.g., not starting with certain octets).

Advanced

  1. Build a tool to perform IP subnet optimization, grouping smaller subnets into larger ones.
  2. Write a program to simulate an IP address allocation system for a data center.
  3. Create a utility to parse and validate a configuration file containing mixed IPv4/IPv6 ranges.
  4. Design a function to convert between IPv4-mapped IPv6 addresses and standard IPv4.
  5. Implement an IP tracking tool to detect duplicates and unused addresses in a dynamic environment.
  6. Write a tool to generate a heatmap of subnet usage from a list of IP allocations.
  7. Create an IP conflict resolution utility to suggest alternate ranges.
  8. Build a tool to calculate and visualize subnet hierarchy for a given CIDR block.
  9. Implement an advanced firewall rule simulator to test packet acceptance based on IP filtering.
  10. Write a program to detect and classify rogue subnets from a list of routing table entries.

3. Set

Basic

  1. Write a program to check if a given set is empty.
  2. Create a program to add multiple elements to a set.
  3. Write a function to return the elements in one set but not in another.
  4. Create a program to remove the smallest element from a set of numbers.
  5. Implement a function to find all elements common to two sets.
  6. Write a program to find the length of a set.
  7. Create a program to clear all elements from a set.
  8. Write a function to copy the contents of one set to another.
  9. Create a program to find the maximum element in a numeric set.
  10. Write a program to check if two sets are equal.

Intermediate

  1. Implement a program to determine if two sets have any common elements.
  2. Write a function to find all subsets of a set.
  3. Create a program to compute the symmetric difference between multiple sets.
  4. Write a program to generate the Cartesian product of three sets.
  5. Create a utility to identify the smallest set from a list of sets.
  6. Write a program to remove all elements from a set that are present in another set.
  7. Implement a function to find the union of an arbitrary number of sets.
  8. Create a tool to find the intersection of multiple sets.
  9. Write a program to create a frozen set and demonstrate its immutability.
  10. Implement a function to compare two sets for structural equivalence.

Advanced

  1. Build a program to compute the transitive closure of a relation represented as sets.
  2. Write a function to solve the k-set partitioning problem.
  3. Create a tool to determine if a collection of sets is disjoint.
  4. Write a program to efficiently compute the difference between sets using hash-based methods.
  5. Implement a function to generate all distinct partitions of a set.
  6. Design a set-based caching mechanism to track unique API calls.
  7. Create a tool to detect redundant elements in a collection of overlapping sets.
  8. Write a program to compute the union-find structure of disjoint sets.
  9. Implement a set similarity tool using Jaccard or Cosine similarity measures.
  10. Develop an algorithm to solve the minimal covering set problem for a collection of subsets.

Let me know if you’d like me to continue with the remaining subtopics!