Skip to content

This repository contains all the projects that I am currently developing as a student at 42 Málaga

License

Notifications You must be signed in to change notification settings

jandrana/42-Cursus

Repository files navigation

Cursus banner

Static Badge

Welcome to my 42Cursus repository! This is where I'll be sharing all the projects I work on during my time as a student in 42Malaga.

The purpose of this repository is to keep track of my journey as a coding student at 42. Here, you'll find the projects I develop as part of my 42 experience.

Feel free to explore, provide feedback, and follow along!

Table of content

📁 Cursus Tables

Projects
Level Project Grade Submission
0 libft bonus
Libft
125/100 18/09/2023
1 printf
ft_printf
100/100 25/09/2023
get_next_line bonus
get_next_line
125/100 02/10/2023
born2beroot bonus
Born2beroot
125/100 17/10/2023
2 push_swap bonus
push_swap
125/100 14/03/2024
so_long bonus
so_long
125/100 15/04/2024
minitalk bonus
minitalk
125/100 19/04/2024
3 minishell in progress
minishell
philosophers in progress
Philosophers
Badge Colours - Legend
⚫️ In progress 🔵 Finished ⭐️ Finished + bonus
in progress completed completed bonus
Exams
Level Exam
Submission(s) Grade
2 Exam Rank 02 19/10/2023 100/100 🌟
3 Exam Rank 03 03/05/2024 100/100 🌟
Remember that in order to pass an exam you have to get the maximum grade (100)

🧩 Project Descriptions

Level 2

Level 2: push_swap 🔄

The push_swap project is a fundamental algorithmic challenge where you have to sort data in the most effective way possible. You're given a stack of integers, two stacks to manipulate, and a limited set of actions. The objective is to write a C program called push_swap that calculates and displays the smallest set of actions necessary to sort the initial stack. Developed within the project's guidelines, my program efficiently sorts the provided input.

Being able to complete this project meant a big step forward in my learning path since I consider it to be much more difficult that any other projects that I have developed in C so far. I believe it is the project I learnt the most from and it is definitely the one I have enjoyed most so far.

Things to highlight as learnt with this project:

  • Development, optimization and implementation of sorting algorithms
  • Utilization and deeper comprehension of data structures (double linked lists)

Level 2: so_long 🎮

The so_long project is a small 2D game development project that makes use of the MLX42 library (Codam 42 Students "own fixed, functioning and open-source alternative to the MiniLibX"). The objective of the project is to create a simple game where a player moves through a map with the goal of collecting all the items available by avoiding obstacles and enemies before reaching the exit.

Completing this project required thoroughly parsing map files to meet specific critieria, ensuring they were valid and correctly rendered. This project taught me basic game mechanics, graphics rendering and event handling in C.

General steps taken for completing the project:

  • Implemented MLX42 for graphics rendering
  • Ensured map validation and error handling
  • Created a functional 2D game environment based on parsed map data
  • Ensured the complete project was leak free.

Level 2: minitalk 💬

The minitalk project involves creating a data exchange program using UNIX signals. It consists of a server and a client executable, where the client sends messages to the server via SIGUSR1 and SIGUSR2 signals. The server reconstructs the message and displays it.

This project deepened my understanding of inter-process communication and signal handling in UNIX, and taught me about reliable data transfers, error handling and managing Unicode characters.

Key achievements:

  • Implemented server confirmation for each received signal
  • Added support for Unicode characters
  • Enhanced skills in data transfer reliability and error handling
Level 1

Level 1: get_next_line 📜

The get_next_line project focuses on developing a function that reads content from a file descriptor line by line. With this project I got the opportunity to really understand how to prevent memory leaks and how to allocate just the neccessary space in order to increase the optimization of the code. Furthermore, with the bonus files, not only you can read content from one but from as many file descriptor as you want without losing track of what line you have to return next.

Level 1: ft_printf 📠

In the ft_printf project, I replicated the functionality of the standard printf function in C. The main challenge of this project was to learn how variadic functions work and how to use them, which involved handling the formatting and printing of text with different data types. Completing this project made possible adding it to my "libft" library for future use.

Level 1: born2beroot 💻

With the born2beroot project I learned to create and configure a VM with Debian (without graphical interface). After installing the VM I got to install and configure the following programs/services: sudo (including commands logs), ssh, ufw, wordpress (mariadb, php, openlitespeed). The project also included the development of a sh script that showed general information of the virtual machine every 10 minutes. Information like: VM architecture, RAM load, CPU load, ip and MAC address, number of: vCPU, TCP connections, sudo commands done...

Level 0

Level 0: libft 📖

The libft project is the first one of my journey as a 42 student and has played a crucial role in upcoming assignments, since the library created here is used in upcoming projects. Here, I created my very first C library from scratch.

This project pushed me to deeply understand how the original replicated functions work, helping me develop a more comprehensive understanding of their inner workings and how to enhance them. It's not just about meeting project requirements; it's about making the best possible library since it will become the base of many other projects.

🔖 Exams

The Exam folder contains my own solutions to various exam questions present in the 42 experience. Each solution is documented with with explanations about the approach and methodology used to arrive to the answer. They cover a variety of topics and are designed to test comprehensive understanding and problem-solving skills. Some solutions were developed for practice, study and mentoring purposes. While I am confident in their functionality, some have not been verified in an offical exam environment.

Tip

These answers are meant for teaching and mentoring; never rely on someone else's code to pass an exam. Focus on understanding the solutions rather than memorizing them.

🔨 42Utils

The 42Utils folder contains a collection of scripts I have developed to help students with various tasks, with the objective of improving productivity. Repositories that you can find in the 42Utils folder include:

  • 42cleaner: Script designed to clean cache and temporary files for 42 students using Linux/Ubuntu. It helps to free up disk space and maintain system performance.
  • 42python_install: Script designed to automate the task of installing a user version of Python using "pyenv" without needing root/sudo permissions.

📑 Usage

To make use of the projects in this repository, you'll need access to a compatible development environment. The following instructions provide a general guideline:

  1. Operating System Compatibility: The projects in this repository are primarily designed for Unix-like operating systems. It is recommended to use macOS or a Linux distribution (e.g., Ubuntu) for optimal compatibility.

  2. Prerequisites: Ensure that you have the necessary tools and compilers installed, such as gcc for C projects. You may also need specific libraries or dependencies, which will be documented within each project's directory.

  3. Compilation: Check if the project you want to compile contains a Makefile. If there's a Makefile present, navigate to the project's directory and use the make command to build it. If there is no Makefile, compile as preferred. For example:

    cd project_folder
    make
    

Please note that these are general guidelines, and each project may have its own specific setup and testing requirements. Check on the project's individual README for detailed instructions on how to test the project.

✨ Feedback

I warmly welcome feedback and contributions to this repository. If you find any issues, have suggestions for improvements, or would like to collaborate, please don't hesitate to reach out.

  • You can open an issue to report problems or propose enhancements.
  • Additionally, feel free to contact me directly if you have any questions or ideas to share.

📬 Contact me

LinkedIn Badge

42 Login Badge

Mail Badge

Feel free to contact me!

💌 Acknowledgments

I would like thank all the following individuals and resources who have contributed to the development of the projects in this repository:

  • The 42 Students Community: I would like to thank to all the 42 students who have supported and guided from my very first day in 42Malaga.

  • Francinette: A comprehensive project tester that helped ensure the robustness of my code.

  • 42make: An inspiration and reference for creating efficient Makefiles for my projects.

  • ASCII Art Generator: A helpful online tool for creating stylish headers and drawings for the Makefiles.


Important Notes ❗

Note

This repository is continuously updated as I progress through each project. Latest projects may be unfinished or contain errors (check Projects Table for status).

Caution

This repository is a learning resource tracking my personal progress. Use it to enhance your understanding and skills, but do not copy the code for your 42 projects. Misuse can lead to a cheating grade and hinder your academic growth.


About

This repository contains all the projects that I am currently developing as a student at 42 Málaga

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages