Skip to content

4n4k1n/42-Projects

Repository files navigation

42 Projects Collection

A comprehensive collection of projects completed as part of the 42 School curriculum, showcasing progression from basic C programming to advanced system programming and software architecture.

Overview

This repository contains all my completed projects from the 42 programming curriculum. Each project builds upon concepts learned in previous projects, creating a structured learning path through fundamental computer science and software engineering concepts.

Project Structure

The projects are organized by difficulty level and learning objectives:

Level 0-1: Foundation Projects

Project Description Key Concepts
0-libft Custom C standard library implementation Memory management, string manipulation, linked lists
1-get_next_line Line-by-line file reading function Static variables, file descriptors, buffer management
1-printf Custom printf function implementation Variadic functions, format parsing, type conversion

Level 2: System Programming & Algorithms

Project Description Key Concepts
2-fractol Interactive fractal explorer Computer graphics, complex mathematics, event handling
2-pipex Unix pipe simulation program Process management, inter-process communication, file descriptors
2-push_swap Efficient stack sorting algorithm Algorithm optimization, data structures, performance analysis

Level 3: Advanced Systems Programming

Project Description Key Concepts
3-minishell Simplified bash shell implementation Shell programming, parsing, signal handling, process orchestration

Learning Progression

Phase 1: C Programming Fundamentals (Level 0-1)

  • Memory Management: Understanding pointers, malloc/free, and memory safety
  • String Processing: Implementing string manipulation functions from scratch
  • File I/O: Working with file descriptors and system calls
  • Function Design: Creating modular, reusable code with proper interfaces

Phase 2: Algorithms & Graphics (Level 2)

  • Algorithm Implementation: Designing efficient sorting and mathematical algorithms
  • System Programming: Process creation, pipes, and inter-process communication
  • Computer Graphics: Rendering mathematical visualizations in real-time
  • Performance Optimization: Minimizing operations and optimizing for speed

Phase 3: Complex System Design (Level 3)

  • Parser Implementation: Building lexical analyzers and command parsers
  • Shell Architecture: Creating a complete command-line interface
  • Signal Handling: Managing system signals and process control
  • Software Architecture: Designing maintainable, modular systems

Technical Skills Developed

Programming Languages & Tools

  • C Programming: Advanced C with strict coding standards (42 Norm)
  • Makefiles: Build automation and dependency management
  • Git: Version control and repository management
  • Unix/Linux: System programming and command-line proficiency

Core Computer Science Concepts

  • Data Structures: Arrays, linked lists, stacks, trees
  • Algorithms: Sorting, searching, recursive algorithms, optimization
  • Memory Management: Dynamic allocation, leak prevention, pointer arithmetic
  • System Programming: Process management, file operations, signal handling
  • Computer Graphics: Pixel manipulation, mathematical visualization, event-driven programming

Software Engineering Practices

  • Modular Design: Clean separation of concerns and reusable components
  • Error Handling: Robust error checking and graceful failure handling
  • Code Organization: Well-structured projects with clear hierarchies
  • Documentation: Comprehensive README files and code comments
  • Testing: Thorough testing strategies and edge case handling

Project Highlights

<Æ Most Challenging: Minishell

The shell implementation required integrating all previously learned concepts into a cohesive, complex system with:

  • Multi-stage parsing pipeline
  • Process orchestration and signal handling
  • Memory management across multiple modules
  • Unix shell compatibility

<¨ Most Creative: Fract-ol

The fractal explorer combined mathematics and graphics programming to create:

  • Real-time mathematical visualizations
  • Interactive user controls and smooth animations
  • Multiple fractal algorithms (Mandelbrot, Julia, Burning Ship)
  • Color palette systems and visual effects

¡ Most Optimized: Push_swap

The sorting algorithm project focused on efficiency and optimization:

  • Minimizing operations through algorithmic analysis
  • Multiple sorting strategies for different input sizes
  • Performance benchmarking and optimization techniques
  • Custom algorithm design and implementation

Repository Statistics

  • Total Projects: 7
  • Lines of Code: ~10,000+ (estimated)
  • Languages Used: C (primary), Makefiles
  • External Libraries: MLX42 (graphics), custom libft implementations
  • Coding Standard: 42 Norm (strict C coding standards)

Getting Started

Each project directory contains its own README with specific compilation and usage instructions. To explore a project:

  1. Navigate to the project directory
  2. Read the project-specific README.md
  3. Compile using the provided Makefile
  4. Follow the usage examples

General Compilation Pattern

cd [project-directory]
make
./[executable] [arguments]

Key Features Across Projects

Code Quality

  • No memory leaks: All projects pass valgrind checks
  • Error handling: Robust error checking and recovery
  • 42 Norm compliance: Follows strict coding standards
  • Modular design: Clean, organized code structure

Functionality

  • Full feature implementation: All mandatory requirements met
  • Bonus features: Additional functionality where applicable
  • Edge case handling: Comprehensive testing and validation
  • Performance optimization: Efficient algorithms and resource usage

Learning Outcomes

This collection of projects demonstrates proficiency in:

  • Low-level Programming: Direct memory management and system calls
  • Algorithm Design: Custom implementations of fundamental algorithms
  • System Architecture: Designing complex, multi-component systems
  • Unix Programming: Process management, signals, and file operations
  • Graphics Programming: Real-time rendering and interactive applications
  • Software Engineering: Clean code, documentation, and testing practices

42 School Context

The 42 School curriculum emphasizes:

  • Peer Learning: Collaborative problem-solving and code review
  • Project-Based Learning: Practical application of theoretical concepts
  • Self-Directed Study: Independent research and problem-solving
  • Industry Standards: Real-world programming practices and tools

Each project was completed following the 42 methodology:

  • No external libraries (except where specified)
  • Strict coding norms and standards
  • Comprehensive error handling
  • Peer evaluation and code review

Contact & Contributions

This repository serves as a portfolio of my 42 School journey and demonstrates the progression from basic programming concepts to advanced system design. Each project represents significant learning milestones and practical application of computer science fundamentals.


This repository represents my personal journey through the 42 curriculum and showcases the practical application of computer science concepts through hands-on project development.

About

All my projects of the 42 school.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published