이 사이트에서 약간의 시간을 보내면서 가능한 한 짧은 것을 즐기게되었습니다. 이것이 최근에 같은 문자를 두 번 이상 포함하는 문자열로 인해 기분이 상한 이유 일 수 있습니다. 다음 규칙에 따라 주어진 문자열 을 요약 하는 함수 또는 프로그램을 작성 해야합니다.
0-condensation으로 시작합니다. 즉, 0 사이의 다른 문자가있는 동일한 문자의 첫 번째 (가장 왼쪽) 쌍을 찾습니다. 이러한 쌍을 찾으면 두 문자 중 하나를 제거하고 다른 0 응축 을 수행하여 알고리즘을 다시 시작하십시오 . 해당 쌍을 찾을 수 없으면 다음 단계로 진행하십시오. 예 :
programming
-C0->programing
aabbcc
-C0->abbcc
test
-C0->test
그런 다음 1-condensation을 수행하십시오. 즉, 1 개의 다른 문자가 포함 된 첫 번째 동일한 문자 쌍을 찾으십시오. 이러한 쌍을 찾으면 그 중 하나와 그 사이의 모든 문자를 제거 하고 0-condensation으로 다시 시작하십시오 . 해당 쌍을 찾을 수 없으면 다음 단계로 진행하십시오. 예 :
abacac
-C1->acac
java
-C1->ja
계속 2 응축 하고 그래서 최대에 N-결로 와 N 원래 문자열의 길이되고, 응축 한 후 다시 시작 때마다 일부 문자를 제거했습니다. 예 :
programing
-C2->praming
abcdafg
-C3->afg
결과 문자열을 압축 이라고 하며 각 문자를 최대 한 번 포함합니다.
입력:
인쇄 가능한 ASCII 문자의 소문자 문자열입니다.
산출:
응축 위의 규칙에 따라 문자열입니다.
예 :
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
알고리즘의 작동 방식을 명확히하는 자세한 예 :
fnabnfun -C0-> fnabnfun -C1-> fnabnfun -C2-> fnfun -C0-> fnfun -C1-> fun -C0-> fun
-C1-> fun -C2-> ... -C8-> fun
abcbaccbabcb -C0-> abcbacbabcb -C0-> abcbacbabcb -C1-> abacbabcb -C0-> abacbabcb
-C1-> acbabcb -C0-> acbabcb -C1-> acbcb -C0-> acbcb -C1-> acb -C0-> acb
-C1-> ... -C12-> acb
솔루션과 알고리즘이 허용되는 모든 입력에 대해 동일한 출력을 반환하는 한 접근 방식은 위에서 알고리즘을 구현할 필요가 없습니다. 이것은 코드 골프 도전입니다.
유용한 샌드 박스 댓글에 대한 @Linus 에게 감사합니다 !