스택에 데이터를 정렬하십시오
이 프로젝트는 가능한 가장 낮은 작업을 사용하여 제한된 지침 세트와 함께 스택에 데이터를 정렬 할 수 있습니다. 성공하려면 다양한 유형의 알고리즘을 조작하고 최적화 된 데이터 분류를 위해 가장 적합한 솔루션 (많은 것 중에서)을 선택해야합니다. Version: 6 .
push_swap.pdf 주제를 읽을 수 있습니다
가장 작은 수의 이동, 2 개의 스택 및 제한된 작업 세트를 사용하여 임의의 정수 목록을 정렬하십시오.
두 개의 빈 스택으로 시작합니다 : a 와 b . 명령 줄 인수를 통해 임의의 정수 목록이 제공됩니다.
이러한 움직임 만 허용됩니다.
sa : SWAP A- 스택 상단에있는 첫 2 가지 요소를 스왑하십시오. 요소가 하나만 있거나 전혀없는 경우 아무것도하지 않습니다).sb : SWAP B- 스택 상단에있는 처음 2 개의 요소를 스왑하십시오. b. 요소가 하나만 있거나 전혀없는 경우 아무것도하지 않습니다).ss : sa 및 sb 동시에.pa : A -A- B의 상단에서 첫 번째 요소를 가져 와서 A의 상단에 넣습니다. B가 비어 있으면 아무것도하지 마십시오.pb : 푸시 B- A의 상단에서 첫 번째 요소를 가져 와서 b의 상단에 넣습니다. A가 비어 있으면 아무것도하지 마십시오.ra : 회전 A- 스택 A의 모든 요소를 1 x 1 씩 이동합니다. 첫 번째 요소는 마지막 요소가됩니다.rb : 회전 B- 스택 B의 모든 요소를 1 씩 이동합니다. 첫 번째 요소는 마지막 요소가됩니다.rr : ra 와 rb 동시에.rra : 리버스 회전 a- 스택 a의 모든 요소를 1 x 1로 이동합니다. 마지막 요소는 첫 번째 요소가됩니다.rrb : 리버스 회전 B- 스택 B의 모든 요소를 1 씩 아래로 이동하십시오. 마지막 요소는 첫 번째 요소가됩니다.rrr : rra 및 rrb 동시에. 결국, 스택 B는 비어 있어야하며 모든 정수는 오름차순 순서로 정렬 된 A 에 있어야합니다.
checker 와 push_swap 의 두 가지 프로그램을 만듭니다.
checker 프로그램은 Stdin의 임의의 정수 목록을 읽고 저장하고 정렬되었는지 확인합니다.
push_swap 프로그램은 정수를 정렬하여 스택 A 와 스택 B 사이에서 밀고 튀어 나오는, 교환 및 회전 - 정수를 정렬하고 STDOUT에 해당 방향을 표시합니다.
push_swap checker 에 파이프로 파이프 할 수 있으며 checker push_swap 의 지침이 성공했는지 확인합니다.
두 프로그램 모두 빈 문자열, 매개 변수, 숫자가 아닌 매개 변수, 복제 및 무효/존재하지 않는 지침을 포함한 오류에 대한 입력을 의무적으로 구문 분석해야합니다.
push_swap은 42 규범을 준수해야합니다.
정상적인 libc 함수를 사용하는 것은 엄격히 금지됩니다. 그러나 학생들은 사용할 수 있습니다 : write , read , malloc , free , exit . 메모리 누출이 없어야합니다. 오류는 신중하게 처리해야합니다.
결코 예상치 못한 방식으로 종료 할 수는 없습니다 (분할 오류, 버스 오류, 이중 무료 등).
잘못된 명령, 파일에 대한 허가 등과 같은 모든 오류는 처리해야합니다.
시험 장치