Fannkuch 는 고전적인 벤치 마크 프로그램입니다. 이 이름은 팬케익 스택을 뒤집는 것과 알고리즘의 유사성을 위해 독일 "Pfannkuchen"-팬케이크에서 유래했습니다. Fannkuch 일련의 숫자 는 다음과 같이 구성됩니다.
{1 ..... n}의 순열을 취하십시오 (예 : {4,2,1,5,3}). 첫 번째 요소 (여기서는 4)를 가져 와서 첫 번째 4 개 요소의 순서를 바꾸십시오 : {5,1,2,4,3}. 첫 번째 요소가 1이 될 때까지이 과정을 반복하므로 뒤집어도 더 이상 변경되지 않습니다 : {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
알파벳 문자 문자열에 대한 Fannkuch와 유사한 시퀀스를 계산하는 프로그램이나 함수를 작성해야합니다. 매번 뒤집어 야 할 요소 수를 나타내는 데 숫자를 사용하는 대신 알파벳에서 글자의 위치를 사용해야합니다. 예를 들어, 선행 c
은 처음 세 요소의 순서를 반대로해야한다는 a
것을 나타내고 , 선행 은 시퀀스가 완료되었음을 나타냅니다.
입력
입력은 stdin을 통해 문자열로 제공되거나 함수 인수로 제공됩니다. 문자열은 1-26 개의 소문자를 포함합니다. 문자열은 동등한 색인으로 인해 Fannkuch 알고리즘이 존재하는 것보다 많은 요소를 뒤집는 문자를 포함하지 않습니다.
산출
프로그램 또는 함수는 a
초기 문자열을 포함하여 선행 이 발생할 때까지 Fannkuch 알고리즘을 적용하여 생성 된 용어 시퀀스를 나타 내기 위해 반환하거나 인쇄해야 합니다. 예를 들어, 입력이 인 bca
경우 다음을 인쇄 할 수 있습니다.
bca
cba
abc
인쇄 된 결과에는 합리적인 구분 기호, 줄 바꿈 등을 사용할 수 있습니다. 여백을 선택할 수 있습니다.
다른 예로, 입력 한 경우 다음을 eabdc
반환 할 수 있습니다.
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
규칙과 채점
이것은 코드 골프입니다 -가장 짧은 프로그램이 승리합니다. 표준 허점은 허용되지 않습니다.
proc fcmp
여기서 많이 가지 않습니다 .