فرز البيانات على مكدس
سيجعلك هذا المشروع فرز البيانات على مكدس ، مع مجموعة محدودة من التعليمات ، باستخدام أدنى عدد ممكن من الإجراءات. لتحقيق النجاح ، سيتعين عليك معالجة أنواع مختلفة من الخوارزميات واختيار الحل الأنسب (من بين العديد) لفرز البيانات المحسّن. Version: 6 .
يمكنك قراءة الموضوع: push_swap.pdf
فرز قائمة عشوائية من الأعداد الصحيحة باستخدام أصغر عدد من الحركات ، 2 مداخن ومجموعة محدودة من العمليات.
تبدأ مع اثنين من المداخن الفارغة: أ و ب . يتم إعطاؤك قائمة عشوائية من الأعداد الصحيحة عبر وسيطات سطر الأوامر.
فقط هذه التحركات مسموح بها:
sa : مبادلة - مبادلة العناصر الأولى في الجزء العلوي من المكدس أ. لا تفعل شيئًا إذا كان هناك عنصر واحد فقط أو لا يوجد عناصر).sb : Swap B - مبادلة العناصر الأولى في الجزء العلوي من المكدس ب. لا تفعل شيئًا إذا كان هناك عنصر واحد فقط أو لا يوجد عناصر).ss : sa و sb في نفس الوقت.pa : ادفع A - خذ العنصر الأول في الجزء العلوي من B ووضعه في الجزء العلوي من A. لا تفعل شيئًا إذا كان B فارغًا.pb : Push B - خذ العنصر الأول في الجزء العلوي من A ووضعه في الجزء العلوي من ب. لا تفعل شيئًا إذا كان A فارغًا.ra : قم بتدوير A - قم بتحويل جميع عناصر المكدس A في 1. العنصر الأول يصبح الأخير.rb : قم بتدوير B - تحول جميع عناصر المكدس B بحلول 1. العنصر الأول يصبح الأخير.rr : ra و rb في نفس الوقت.rra : عكسي تدوير A - تحول جميع عناصر المكدس A في 1. العنصر الأخير يصبح الأول.rrb : عكس دوران B - تحول جميع عناصر المكدس B بمقدار 1. يصبح العنصر الأخير هو الأول.rrr : rra و rrb في نفس الوقت. في النهاية ، يجب أن يكون المكدس B فارغًا ويجب أن تكون جميع الأعداد الصحيحة في المكدس A ، مرتبة بترتيب تصاعدي.
إنشاء برنامجين: checker و push_swap .
يقرأ برنامج checker قائمة عشوائية من الأعداد الصحيحة من stdin ، ويخزنهم ، ويتحقق لمعرفة ما إذا تم فرزهم.
يحسب برنامج push_swap التحركات لفرز الأعداد الصحيحة - الدفع ، الظهور ، تبديلها وتدويرها بين المكدس A و Stack B - ويعرض تلك الاتجاهات على stdout.
يمكنك أن PIPE push_swap في checker ، وسوف يتحقق checker من أن تعليمات push_swap كانت ناجحة.
يجب على كلا البرنامجين تحليل إدخال إدخال للأخطاء ، بما في ذلك السلاسل الفارغة ، ولا توجد معلمات ، والمعلمات غير الرقمية ، والتكرارات ، والتعليمات غير الصالحة/غير الموجودة.
يجب أن تتوافق PUSH_SWAP مع القاعدة 42.
استخدام وظائف libc العادية ممنوع منعا باتا. ومع ذلك ، يُسمح للطلاب بالاستخدام: write ، read ، malloc ، free ، exit . يجب ألا يكون لديه أي تسرب ذاكرة. يجب التعامل مع الأخطاء بعناية.
لا يمكن بأي حال من الأحوال التوقف بطريقة غير متوقعة (خطأ تجزئة ، خطأ في الحافلة ، مجاني مزدوج ، إلخ).
جميع الأخطاء مثل: الأوامر الخاطئة ، والذات إلى الملفات وما إلى ذلك ، تحتاج إلى التعامل مع.
اختبار