에서는 팬케이크 정렬 만 허용하는 동작 시퀀스의 일부 요소 프리픽스의 역이다. 또는 팬케이크 스택을 생각해보십시오. 스택 어딘가에 주걱을 넣고 주걱 위의 모든 팬케이크를 뒤집습니다.
예를 들어, 서열은 6 5 4 1 2 3
제 반전 처음으로 분류 될 수 6
중간 결과를 산출 요소 (전체 순서) 3 2 1 4 5 6
다음, 제 뒤집기 3
에 도착 소자 1 2 3 4 5 6
.
하나의 연산 만이 있기 때문에, 전체 분류 프로세스는 일련의 정수로 설명 될 수 있으며, 여기서 각 정수는 pr 플립을 포함하는 요소 / 팬케이크의 수이다. 위의 예에서 정렬 순서 는입니다 6 3
.
다른 예 : 4 2 3 1
로 정렬 할 수 있습니다 4 2 3 2
. 중간 결과는 다음과 같습니다.
4 2 3 1
flip 4: 1 3 2 4
flip 2: 3 1 2 4
flip 3: 2 1 3 4
flip 2: 1 2 3 4
작업:
정수 목록을 가져와 유효한 팬케이크 정렬 순서를 인쇄하는 프로그램을 작성하십시오.
정렬 할 목록은 stdin과 공백으로 구분 된 목록이거나 명령 줄 인수 일 수 있습니다. 읽기 쉬운 목록이라면 편리하게 목록을 인쇄하십시오.
이것은 codegolf입니다!
편집하다:
의견에서 말했듯 이 출력을 최적화 할 필요가 없습니다 (가장 짧은 시퀀스를 찾는 것은 NP-hard입니다 ). 그러나 , 나는 당신이 원하는 결과를 얻을 때까지 ([new?] 유형의 bogosort) 임의의 숫자를 버리는 것이 싼 해결책이라는 것을 깨달았습니다. 지금까지 아무도 대답 을하지 않았 으므로 이제 알고리즘이 (의사) 임의성에 의존해서는 안된다고 선언 합니다 .
모두 자신을 차는 동안 Ruby 2.0 (60 문자)의 bogopancakesort 변형이 있습니다.
a=$*.map &:to_i
a=a[0,p(v=rand(a.size)+1)].reverse+a[v..-1]while a!=a.sort
4 3 2 1
대신4 2 3 1