더블 런-길이 인코딩


9

실행 길이 인코딩이 무엇인지 모두 알고 있습니다. 이미 많은 코드 골프 과제의 주제였습니다. 특정 변형을 살펴 보겠습니다.

Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322

괄호 안의 숫자는 이전 기호가 발생한 횟수를 지정합니다. 이 예에서는 5 자 이상의 문자 만 인코딩되었습니다. 인코딩 횟수가 4 이하이면 문자 수가 향상되지 않기 때문입니다.

도전

이러한 변형 된 런 길이 인코딩을 구현하는 함수 / 프로그램을 작성하고 두 심볼의 런도 인코딩 할 수 있습니다. 두 기호의 런도 괄호로 묶어야합니다. 그룹도 괄호로 묶습니다. 프로그램은 문자열을 입력으로 승인하고 수정 된 문자열을 수정하여 문자열을 단축시켜야합니다.

Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123

노트

  • 111인코딩 ( 1(3))이 짧지 않기 때문에 인코딩 되지 않았습니다.
  • 문자열 444111은 3 번 발생하므로 인코딩됩니다.
  • 676767((67)(4))이전보다 길었으므로 인코딩되지 않았습니다 .
  • 222222277777222222277777로 인코딩되지 않았습니다 ((222222277777)(2)). 왜? 때문에 222222277777그 자체가 감소 될 수있다 2(7)7(5).
  • 123123123123 프로그램이 세 개가 아닌 두 개의 기호 실행을 처리해야하기 때문에 인코딩되지 않았습니다.

이것은 가장 짧은 코드가 승리합니다. 타이 브레이커는 조기 제출입니다.


내가 놓친 것이 있거나 확실하지 않은 경우 의견에 저에게 알려주십시오.


그러나 4 67초가 있습니다.
Leaky Nun

441444144414-> 처리해야 ((4414)(3))할까요?
Leaky Nun

나는 그것을 고쳤다.
ericw31415

@KennyLau 아니오, 당신은하지 않습니다. 4414기술적으로 4의 시리즈입니다. 내 말은 단지 나쁘다.
ericw31415

? 111111111로 인코딩 할 수 있습니다 (1)(9)
CalculatorFeline

답변:


2

레티 나, 162 바이트

+{`((\d)\2*(?!\2)(\d)\3*|\d)(?<1>\1)+
<<$1><$#1>>
<<([^<>]{1,7})><2>>
$1$1
<<([^<>]{1,3})><3>>
$1$1$1
<<([^<>]{1,2})><4>>
$1$1$1$1
}`<<(.)><(\d+)>>
$1($2)
T`<>`()

온라인으로 사용해보십시오!


입력 한 경우 10101010100100100100100, 출력은 ((10)(5))0((100)(4))아직 ((10)(4))((100)(5))한 문자 짧아 질 것입니다.
Marv

그런 한계 테스트 케이스를 정말로 사용해야합니까? ...
Leaky Nun

네, 그게 다 재미 있어요! : ^)
Marv

이것이 현재 유일하게 유일한 답변이라는 것은 재밌습니다.
ericw31415
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.