코드 골프에 적합한 것으로 알려진 덜 알려진 프로그래밍 패러다임 중 하나는 OPP (Overlapping Oriented Programming) *입니다. 부분적으로 동일한 코드를 작성할 때 단순히 동일한 부분을 겹치고 두 개의 원래 코드 행이 시작되는 방식을 기억하여 많은 바이트를 절약 할 수 있습니다. 당신의 작업은 두 작성하는 것입니다 중복의 프로그램 또는 기능 compress
및 decompress
다음과 같은 사양을 :
* 아마도 프로덕션 코드에는 사용하지 마십시오.
compress
compress
편리한 형식으로 두 개의 문자열을 사용하고 가능한 한 겹칩니다. 즉, s
입력 문자열이 모두의 하위 문자열이되도록 최소 길이 의 문자열 이 반환 s
됩니다. 또한 두 문자열의 시작 및 끝 인덱스를 식별하는 일부 출력이 반환됩니다.
예 : (정확한 IO 형식은 사용자에게 달려 있습니다)
compress("abcd", "deab") -> "deabcd" ((2,5),(0,3))
compress("abcd", "bc") -> "abcd" ((0,3),(1,2))
compress("abc", "def") -> "abcdef" ((0,2),(3,5)) or "defabc" ((3,5),(0,2))
decompress
decompress
의 역함수를 계산합니다 compress
. 즉, 문자열과 두 개의 시작 및 끝 색인 (에서 반환되는 형식으로)이 주어지고 두 compress
개의 원래 문자열을 반환합니다. 유효한 입력 만 처리하면됩니다. 다음 평등은 모든 문자열을 유지해야한다 s1
, s2
:
(s1, s2) == decompress (compress (s1, s2))
예 : ( 예와 반대 compress
)
decompress "deabcd" ((2,5),(0,3)) -> "abcd" "deab"
decompress "abcd" ((0,3),(1,2)) -> "abcd" "bc"
decompress "abcdef" ((0,2),(3,5)) -> "abc" "def"
or (whichever version your "compress" generates)
decompress "defabc" ((3,5),(0,2)) -> "abc" "def"
채점
점수는을 호출하여 반환 된 문자열의 크기입니다 compress("<code of compress>", "<code of decompress>")
. 이것이 코드 골프 이기 때문에 점수가 낮을수록 좋습니다.
예:
함수 의 코드 compress
는 is c=abcd
이고 코드는 decompress
입니다 d=efghi
. 그런 다음 compress("c=abcd", "d=efghi")
수익률 "c=abcd=efghi"
(및 지수, 그러나 점수에는 영향을 미치지 않음)이 표시되므로 점수는 length "c=abcd=efghi" = 12
입니다.
추가 규칙
- 이 도전의 정신에서, 당신
compress
과 적어도 하나의 성격에decompress
겹쳐 야합니다 . 주석을 추가하여 간단하게이 작업을 수행 할 수 있지만 그렇게하면 점수가 높아지고 본질적으로 겹치는 코드를 사용하는 솔루션이 더 짧을 수 있습니다. compress
및decompress
인쇄 가능한 ASCII 문자가 포함 된 문자열뿐 아니라 사용자가 정의하는 데 사용되는 모든 문자를 처리 할 수 있어야합니다compress
및decompress
.- 인덱스는 0 또는 1 인덱스 일 수 있습니다.
- 귀하의 프로그램이나 기능은 실제로 이름이 필요가 없습니다
compress
와decompress
.