1. rterm (windows: unsafe)
Create a terminal similar to sh/bash that implements the following commands:
- copy/move/delete files and directories
- list/create/modify/delete registry keys (only on Windows)
- list/kill running processes
The terminal will try to immitate a Unix terminal as far as possible, including the name of the commands.
Tip: Use a VM to test registry modification functionalities.
2. calculator
Write an app that will receive a mathematical expression from the command line and print the calculation process step by step.
The calculator will have the following operations: addition, subtraction, multiplication, division, exponentiation, square root, logarithm, trigonometric functions, paranthesis.
Have different steps for lexing, parsing, and resolving.
Example input: 2 * (3 + 5 / 4) - (5 ^^ 2 + 8) / 11
Example output:
= 2 * (3 + 1.25) - (5 ^^ 2 + 8) / 11
= 2 * 4.25 - (5 ^^ 2 + 8) / 11
= 8.5 - (5 ^^ 2 + 8) / 11
= 8.5 - (25 + 8) / 11
= 8.5 - 33 / 11
= 8.5 - 3
= 5.5
3. splitter
Make an application can receive big files and split them in several smaller files. This is useful for sending a big file over a channel that only allows a small chunk of data to be sent at a time. The application must be also be able to put the original file together given all the small files.
The application must be also be able to receive the max size for a chunk at cmdline. Known size suffixes: b, kb, mb, gb. No suffix means bytes
Example:
./splitter split a.zip -s 1M
# Will result in the tool writing a.zip.part0001.split, a.zip.part0002.split, etc. all with size of 1mb except the last one
./splitter unsplit a.zip
# The app will seach all the a.zip.part*.split files and put them togheter.
The application should be able to tell if not all the files are present, and if any was corrupted.
Useful crates: ureq for downloading over http, serde_json for json, chrono.
4. connect four
Implement a TUI/GUI application featuring the Connect Four game. The game must support both local two-player matches and single-player modes against the computer and automatically highlight the connecting four discs visually when a winning condition (horizontal, vertical, or diagonal) is met.
5. recursive_grep
Create a tool that searches for a substring in every file in a directory and every subdirectory, and print the name of the file and the relevant line with its line number.
Command line options:
- string to search for
- max number of lines (after which the application exits) (default: infinite)
- ignore case (default: no)
- only count (print only the number of matches per file, without the lines) (default: no)
- option to enable regex searching.
6. tar
Implement a tool that can work with files in the tar format. The tool must be able to pack all files in a directory recursively, and unpack all the files in a tarball. The tool must also support gzipped files (.tar.gz) for both operations.
Example commands:
./tar pack path/ -c
./tar unpack x.tar
./tar unpack x.tar.gz
7. wiki_stats
Download the dataset from here.
Make a tool that reads the zip archive provided, and extract the below information from all the data in all the jsons. The output will be written to a file.
- a frequency list of all the words as written
- a frequency list of all the words as lowercase
- the title, the json path in the zip, and the size of the longest article
- the title, the json path in the zip, and the size of the longest title
8. crates_stats
Clone the crates.io index repo.
Read the information about all the crates. Take into consideration only the most recent version of a crate. Print to a file the following information:
- the crate with the most dependencies (and the dependencies)
- the crate with the most dependants (and the dependants)
- the crate with the most features (and the features)
- the crate with the most versions
9. two_thousand_and_forty_eight
Implement the 2048 game. The game must either use a GUI interface, or a TUI one. If the user closes the game, the game must save the state, and restore it at the next start, unless the game was finished.
10. my_ssh
Implement a client/server pair capable of encrypted authentication and communication. The server will execute commands from the client and return their output to the client. The commands are executable from the path with any number of arguments; cd and pwd will function normally. Multiple commands can be executed sequentially or redirected using: |, <, >, &&, ||, ; with the same semantics as bash.
11. snake
Develop a GUI/TUI game where players control a snake that increases in movement speed as it consumes food and grows. The game map should incluse obstacles in addition to standard border walls. It persists high scores to a local file to display alongside the current session's score and includes a pause menu to suspend and resume the game loop.
12. battleship
Create a terminal-based Battleship game where two players connect (P2P) via IP addresses to compete. The interface should be a split-screen TUI:
- one grid showing the player's own fleet placement and hits taken
- a "radar" grid tracking shots fired at the opponent.
Once connected, users place ships with rotation controls and compete under a time limit, where each player has a total bank of 5 minutes for the entire match; depleting this time results in an automatic loss regardless of the board state.
13. redditor
Download the news feed from a subreddit from Reddit (ex) and print the following information for each post: creation date, title, and link to post.
Command line options:
- the name of the subreddit
- the sort order: hot, new, top (default: hot)
Print only the new posts every N seconds (keep a list of posts that have already been printed).
14. Spotify controller
Build a terminal-based Spotify player that gives users full control over their music without leaving the command line. The application must be implement the following features:
- display a live dashboard showing the current track, volume, and a dynamic progress bar
- browse saved playlists and Liked Songs
- search for new tracks to add to the queue
- switch playback between active devices (like phone or PC)
The application must implement the API communication manually, building the integration from scratch without using existing Spotify libraries. Spotify Web API
15. sudoku
Create a terminal Sudoku game generates unique 9x9 Sudoku puzzles; The game must be able to:
- generate puzzle based on Easy, Medium, or Hard difficulty
- support keyboard navigation for data entry
- validate and higlights errors immediately
- tracks solving duration with an integrated timer
16. YouTube analytics reporter
Implement a command-line tool that takes a YouTube Channel ID and gathers comprehensive channel data, outputting a report in HTML format. The report must include the following information:
- number of subscribers, total views, video count
- detailed breakdown of popular videos by views, likes, and comments
- performance metrics: average views per video, like-to-view ratio, and engagement rate (likes + comments / views) for top content
- channel creation date and upload frequency (videos per week/month) References: Youtube API
17. json validator
Develop a CLI mini JSON validator that allows users to accept a text input and validate if it's proper JSON. The validator should return a message indicating if the JSON is valid or not and where the error is.