Skip to content

ykasaca/pushswap

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This project has been created as part of the 42 curriculum by yuscengi, yukasaca

PushSwap

Açıklama

Bu proje, push_swap olarak adlandırılan bir algoritma uygulamasıdır. Hedef, iki yığın (stack A ve B) kullanarak verilen bir dizi sayıyı artan sırada sıralamaktır. Proje, sınırlı sayıda işlem (swap, push, rotate, reverse rotate) kullanarak en az adımda sıralama yapmayı amaçlar. Program, yığının boyutuna ve karışıklık derecesine göre farklı algoritmalar seçer: basit sıralama (küçük yığınlar için), orta sıralama (chunk tabanlı) ve karmaşık sıralama (radix sort benzeri). Kısa bir genel bakış: Kullanıcı argüman olarak sayıları verir, program işlemleri stdout'a yazar ve benchmark modu ile performans analiz eder.

Talimatlar

Derleme

Projeyi derlemek için aşağıdaki komutu çalıştırın:

make

Bu, push_swap executable'ını ve gerekli libft kütüphanesini oluşturacaktır.

Yürütme

Programı çalıştırmak için:

./push_swap [seçenekler] [sayılar]

Seçenekler:

  • --simple: Basit sıralama algoritmasını kullanır (küçük yığınlar için, O(n²)).
  • --medium: Orta sıralama algoritmasını kullanır (chunk tabanlı, O(n√n)).
  • --complex: Karmaşık sıralama algoritmasını kullanır (radix sort, O(n log n)).
  • --adaptive: Karışıklık derecesine göre otomatik algoritma seçimi.
  • --bench: Benchmark modu, işlem sayılarını ve raporları stderr'e yazar.

Örnekler:

./push_swap 3 1 4 1 5
./push_swap --bench --adaptive 10 9 8 7 6 5 4 3 2 1

Kurulum

Projede kullanılan libft kütüphanesi otomatik olarak derlenir. Ek bağımlılık yoktur. Program, verilen sayıların geçerli tamsayılar olmasını ve tekrar etmemesini bekler; aksi halde "Error" mesajı verir.

Kaynaklar

  • Sorting Algorithms: Genel sıralama algoritmaları hakkında bilgi (insertion sort, radix sort vb.).
  • Stack Veri Yapısı: Yığın veri yapısı açıklaması.
  • Chunk Sorting: Chunk tabanlı sıralama teknikleri.
  • Gemini.
  • Öğreticiler: YouTube'da push_swap algoritmaları üzerine çeşitli videolar ve 42 öğrencilerinin paylaşımları mevcuttur.

AI kullanımı

Bu projede AI, kod yazımında yardımcı oldu. Özellikle, algoritma tasarlama (örneğin, disorder hesaplama ve adaptive seçim), hata ayıklama ve kod optimizasyonu aşamalarında öneriler sağladı. Benchmark modu ve raporlama özelliği için de AI fikir verdi. Ana kod yapısı manuel olarak geliştirildi, ancak AI README.md'nin hazırlanmasında ve dokümantasyonunda kullanıldı.

Özellikler

  • Çoklu Algoritmalar: Basit (3'e kadar eleman), orta (chunk tabanlı) ve karmaşık (bit sıralaması) algoritmalar.
  • Adaptive Mod: Yığının karışıklık derecesine (%0-100) göre otomatik algoritma seçimi.
  • Benchmark Modu: İşlem sayılarını sayar, toplamı ve her işlem türünü raporlar (sa, sb, pa vb.).
  • Hata Yönetimi: Geçersiz girişler için "Error" mesajı ve temiz çıkış.
  • Libft Entegrasyonu: Özel string parsing, liste işlemleri ve utility fonksiyonları için.
  • Performans Analizi: Disorder metriği ile yığının ne kadar karışık olduğunu hesaplar.

Kullanım Örnekleri

  • Basit sıralama: ./push_swap --simple 2 1 3
  • Orta sıralama: ./push_swap --medium 5 4 3 2 1 6 7 8
  • Karmaşık sıralama: ./push_swap --complex 100 rastgele sayılar
  • Adaptive: ./push_swap --adaptive 10 9 8 7 6 5 4 3 2 1 (karışıklığa göre seçer)
  • Benchmark: ./push_swap --bench --adaptive 3 1 4 1 5 (rapor stderr'e yazılır)

Teknik Seçimler

  • Dil: C, performans ve düşük seviye kontrol için.
  • Veri Yapısı: Çift yönlü bağlı liste (t_stack), yığın işlemleri için optimize edilmiş.
  • Kütüphane: Libft (özel ft_split, ft_atol vb. için), standart dışı fonksiyonlar için.
  • Algoritmalar:
    • Basit: Selection sort benzeri, min elemanı bulup push.
    • Orta: Chunk'lara bölme (16'ya bölerek +12), rotate ile pozisyonlama.
    • Karmaşık: Radix sort, bit bit sıralama.
  • Benchmark: Singleton pattern ile global bench struct, işlem sayımı için.
  • Disorder: İnverson sayısı / toplam çiftler, karışıklık metriği (0: sıralı, 1: ters sıralı).

About

42 School pushswap

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 97.4%
  • Makefile 2.6%