Urutkan data pada tumpukan
Proyek ini akan membuat Anda mengurutkan data pada tumpukan, dengan serangkaian instruksi terbatas, menggunakan jumlah tindakan serendah mungkin. Untuk berhasil, Anda harus memanipulasi berbagai jenis algoritma dan memilih solusi yang paling tepat (dari banyak) untuk penyortiran data yang dioptimalkan. Version: 6 .
Anda dapat membaca subjek: push_swap.pdf
Urutkan daftar bilangan bulat acak menggunakan jumlah gerakan terkecil, 2 tumpukan dan satu set operasi terbatas.
Anda mulai dengan dua tumpukan kosong: A dan B. Anda diberi daftar bilangan bulat acak melalui argumen baris perintah.
Hanya gerakan ini yang diizinkan:
sa : Pertukaran A - Pertukaran 2 elemen pertama di bagian atas tumpukan a. Tidak melakukan apa pun jika hanya ada satu atau tidak ada elemen).sb : Pertukaran B - Pertukaran 2 elemen pertama di bagian atas tumpukan b. Tidak melakukan apa pun jika hanya ada satu atau tidak ada elemen).ss : sa dan sb pada saat yang sama.pa : Dorong A - Ambil elemen pertama di bagian atas B dan letakkan di bagian atas a. Tidak melakukan apa pun jika B kosong.pb : Dorong B - Ambil elemen pertama di bagian atas A dan letakkan di bagian atas b. Tidak melakukan apa pun jika A kosong.ra : Putar A - Geser ke atas semua elemen Stack A oleh 1. Elemen pertama menjadi yang terakhir.rb : Putar B - Geser semua elemen tumpukan B oleh 1. Elemen pertama menjadi yang terakhir.rr : ra dan rb pada saat yang sama.rra : Reverse Rotate A - Geser ke bawah semua elemen Stack A oleh 1. Elemen terakhir menjadi yang pertama.rrb : Rotate Balik B - Geser ke bawah semua elemen tumpukan B oleh 1. Elemen terakhir menjadi yang pertama.rrr : rra dan rrb pada saat yang sama. Pada akhirnya, Stack B harus kosong kosong dan semua bilangan bulat harus berada di tumpukan A , diurutkan dalam urutan naik.
Buat dua program: checker dan push_swap .
Program checker membaca daftar bilangan bulat acak dari Stdin, menyimpannya, dan memeriksa untuk melihat apakah mereka diurutkan.
Program push_swap menghitung gerakan untuk mengurutkan bilangan bulat - mendorong, bermunculan, bertukar dan memutarnya di antara Stack A dan Stack B - dan menampilkan arah tersebut pada stdout.
Anda dapat menyalakan push_swap ke checker , dan checker akan memverifikasi bahwa instruksi push_swap berhasil.
Kedua program secara wajib mem-parsing input untuk kesalahan, termasuk string kosong, tidak ada parameter, parameter non-numerik, duplikat, dan instruksi yang tidak valid/tidak ada.
Push_swap harus sesuai dengan 42 norma.
Menggunakan fungsi libc normal dilarang secara ketat. Namun siswa diizinkan untuk digunakan: write , read , malloc , free , exit . Itu tidak boleh memiliki kebocoran memori. Kesalahan harus ditangani dengan cermat.
Sama sekali tidak dapat berhenti dengan cara yang tidak terduga (kesalahan segmentasi, kesalahan bus, bebas ganda, dll).
Semua kesalahan seperti: perintah yang salah, izin ke file dan dll, perlu ditangani.
Penguji