スタックでデータをソートします
このプロジェクトにより、可能な限り低いアクション数を使用して、限られた一連の命令を使用して、スタック上のデータをソートすることができます。成功するには、さまざまな種類のアルゴリズムを操作し、最適化されたデータソートに最も適切なソリューション(多くの)を選択する必要があります。 Version: 6 。
件名を読むことができます: push_swap.pdf
最小数の動き、2スタック、限られた操作セットを使用して、整数のランダムリストをソートします。
AとBの2つの空のスタックから始めます。コマンドライン引数を介して整数のランダムリストが与えられます。
これらの動きのみが許可されます:
sa :a-スワップa-スタックの上部に最初の2つの要素を交換a。要素が1つまたはまったくない場合は何もしません)。sb :スワップB-スタックの上部に最初の2つの要素を交換します。要素が1つまたはまったくない場合は何もしません)。ss : saとsb同時に。pa :Aを押します - Bの上部に最初の要素を取り、Aの上部に置きます。 Bが空であれば何もしません。pb :プッシュB- aの上部にある最初の要素を取り、bの上部に置きます。 Aが空の場合は何もしません。ra :回転a-スタックaのすべての要素を1 xシフトします。最初の要素が最後の要素になります。rb :回転b-スタックBのすべての要素を1 x 1シフトします。最初の要素が最後の要素になります。rr : raとrb同時に。rra :逆回転a-スタックaのすべての要素を1 xシフトします。最後の要素が最初の要素になります。rrb :逆回転b-スタックBのすべての要素を1 x 1でシフトします。最後の要素が最初の要素になります。rrr : rraとrrb同時に。最後に、スタックBは空になっている必要があり、すべての整数がスタックAに並んで、昇順でソートされている必要があります。
checkerとpush_swap 2つのプログラムを作成します。
checkerプログラムは、stdinの整数のランダムなリストを読み取り、それらを保存し、それらがソートされているかどうかを確認します。
push_swapプログラムは、整数をソートするための動きを計算します -プッシュ、ポップ、スワッピング、スタックBの間でそれらを回転させ、STDOUTにそれらの方向を表示します。
push_swap checkerにパイプすることができ、 checker push_swapの指示が成功したことを確認します。
どちらのプログラムも、空の文字列、パラメーターなし、非数値パラメーター、重複、および無効/存在しない命令など、エラーの入力を強制的に解析する必要があります。
Push_Swapは42 Normに準拠する必要があります。
通常のlibc関数を使用することは、厳密に禁止されています。ただし、学生は使用することができます: write 、 read 、 malloc 、 free 、 exit 。メモリリークがないはずです。エラーは慎重に処理する必要があります。
予想外の方法でやめることはできません(セグメンテーション障害、バスエラー、ダブルフリーなど)。
誤ったコマンド、ファイルへの許可など、すべてのエラーは、処理する必要があります。
テスター