최대 불일치 -2 시퀀스 압축


18

길이가 1160 인 이진 시퀀스를 출력하십시오.

-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++

순서

이 유한 시퀀스는 압축을위한 독특한 방법을 빌려주는 방식으로 단단히 구성되어 있습니다. 이것은 이전 도전 에서 소개되었던 Erdős 불일치 문제에서 발생합니다 .

항을 +1 및 -1로 취급하면 최대 길이의 불일치 2의 시퀀스이므로 다음을 의미합니다.

모든 양수 단계 크기 d에 대해 모든 d항 (두 항으로 시작) 을 취 d하면 결과 시퀀스의 누계 합은 -2에서 2 사이입니다.

각각 +이 한 발자국 -을 의미하고 왼쪽 발걸음을 의미 한다고 생각할 때 , 이것은 매 d번째 명령 의 도보가 시작 위치에서 2 단계 이상 이동하지 않는다는 것을 의미합니다 .

예를 들어,에 대해 d=3세 번째 항을 모두 가져 +-++--+--+-...가면 누계가 [1,0,1,2,1,0,1,0,-1,0,1,...]-3 또는 3에 도달하지 않는 시퀀스 가 됩니다.

-++-+--++-++-+--+--++-+--+--++-+--+...
  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^
  +  -  +  +  -  -  +  -  -  +  -
   1  0  1  2  1  0  1  0 -1  0  -1  ...

이 순서는 2014 년 컴퓨터 검색을 통해 발견되었습니다. 부록 B에 시퀀스가 ​​재현되어있는 이 백서를 참조하십시오 . 검색 결과 1160이 불일치 2 시퀀스의 최대 길이임을 알 수 있지만 해당 길이의 시퀀스가 ​​두 개 이상 있습니다. 2015 년에 입증 된 Erdős 불일치 문제 는 이러한 시퀀스의 최대 길이 불일치 c가 2 대신 유한 한 길이 여야한다고 말합니다 .

소요 시간

코드는 5 초 이내에 완료되어야합니다 . 이것은 무차별 강제를 제한하기위한 것입니다.

출력 형식

당신을 위해 두 고정 된 별개의 문자 나 값을 사용할 수 있습니다 +-모든 목록 형 또는 문자열과 같은 형식으로. 형식은 1160 비트 값을 직접 읽을 수있는 형식이어야합니다 (예 : 이진 표현을 통한 숫자 또는 문자 값을 통한 문자열로 인코딩되지 않음). 문자열 출력의 경우 후행 줄 바꿈이 허용됩니다.

리더 보드


누구나 알고 싶다면 길이가 1-16 인 가장 일반적인 부분 문자열
ASCII 전용

나는 압축을이기는 것이 매우 어렵다고 생각합니다 ...
Esolanging Fruit

답변:


3

젤리 , 149 바이트

“×GOẈ*m¬¿3d{ẋạ⁻@Ɓ]ZĊỵINBƬḊṿẊ*N¹Ẹ÷ƲẋɼoṬḳ£®⁾ƙŒọ¡[P1&ạ€ẊʠNỌXḢṖėÐß⁹Ụṗ¬⁹E#ụḷḌṁżżR=Ɗѳıɲ-ṭỌṾɲẎĿỴ⁶€ḋtɦÐ\ỵƒ⁾ƒụṫṡĊKpƭẏkaṪ,Ẋȧ⁻ḅMɓ%YḷsƲƭl¤æĊbṬ9D6ẎƘẓ^Œ⁷Ɲḷḷ€ḟ1g’B

예를 들어 시퀀스를 8로 자르면 256 길이 8 개의 이진 문자열 중 81 개만 존재하지만 어떤 패턴을 사용했는지는 알지 못합니다. 이진 목록으로 변환 된 250 압축

온라인으로 사용해보십시오! 바닥 글은 쉽게 비교할 수 있도록 이진 목록을 문자열로 형식화합니다.


3

파이썬 2 , 269 259 256 247 245 243 바이트

r=[1]
c=int('bmqnh8j8rdo4mirjos6uxbfthu8t39pjy6up43axryzwbwcu5d528nsakitjwqbo6dnnozy0oybhk6jduaoc53lqkzdb04opj5t50a24w9he5y7qbgd2',36)
while c:t=sum(sum(r[::-k])/3for k in range(1,264)if len(r)%k<1);r[-1:]=cmp(0,t)or c%2*2-1,1;c>>=t==0
print r

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


3

자바 스크립트 (ES6), 263 (253) 252 바이트

페이로드 데이터를 최대한 줄이려고했습니다. 슬프게도 놀랍지는 않지만 많은 압축 해제 코드가 필요합니다.

고장:

  • 페이로드 데이터 : 75 바이트, 100 자 Base64 문자열로 인코딩
  • 번호 : 163 153 152 바이트

아래는 데이터가없는 형식화 된 버전입니다. 원시 코드는 데모 스 니펫에 있습니다.

f = (a = Array(264).fill(n = p = 0)) =>
  n++ < 1160 ?
    '+/-'[
      p += !a.some((v, i) =>
        n % i | v * v - 4 ?
          0
        :
          r = v / 2,
        r = atob`...`.charCodeAt(p / 8) >> p % 8 & 1 || -1
      ),
      r + 1
    ] +
    f(a.map((v, i) => n % i ? v : v - r))
  :
    ''

어떻게?

우리 는 모든 i 번째 항의 누계 a [i] 를 추적합니다 . 이 합이 하한 -2에 도달 할 때마다 다음 항이 + 라는 것을 알고 있습니다 . 동일한 논리가 상한에 적용됩니다. 이것은 i = 264 까지 유용하며 그 이상으로 여분의 바이트를 저장하지 않습니다.

이로 인해 추측 할 수없는 599 개의 용어가 남습니다. 100 자 Base64 문자열로 인코딩 된 ⌈599 / 8⌉ = 75 바이트 로 저장합니다 .

데모


3

젤리 , 110 (109) 107 바이트

;1mS€:3o/Nȯ®Ṫṭḷ
“ĖṄẋ{Xṛ-İIṗ®6⁼Ḟ2a⁻!Ċẉȥ+¡Ƒ¥mvrẓsṘ×⁴ç&$nỴỤ)M7?ẊẎḅ=ṠƈTṙḌȥụẋXḌ⁵Ḣ⁺ḲL÷æTƥĿv€%ḟ¢®!Ė’BḤ’©ṛ⁽¡ɠÆD€Nç/

TIO에서는 시간이 너무 오래 걸리지 만 데스크탑 컴퓨터에서 3 초 안에 완료됩니다.

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


3

젤리 , 135 133 130 129 105 104 바이트

42“I=İėZP*ðEḄẈṆ'mBƝėŻƝ6®Ṇɼḥ[bȦėṡV£(6ṘɱX)Ṅẹ6~K7°ȤÄỴ¥ƝÇ5prḳġŻ£ƭṗṄFṾḃ{©@ɼ’ḃÄċL
L+Ø.ÆDm@NÇ¡§§No¥/Ṡo-ṭ
Ç⁽¡ɠ¡Ḋ

시퀀스의 이전 요소를 기반으로 알고리즘은 다음 요소가 무엇인지 알 수 있습니다. 이것은 99 개를 제외한 모든 요소에 적용되며, 인덱스가 하드 코딩되어 해당 요소를 교체 할 수 있습니다.

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


2

MATL , 224 바이트

862:o'$Te]BQHoHxkw!-CEjv(j=zGp.8_C{\?wkH{t&%W.:ja#7=+>"/,=0wDJ+"2BREtgh9_2I%1>+99T3kPrknzlJ}&8kUR(S!pX]C]05u{"6MHA7"gg(M6\5Vp.k.18Y(c~m&wroTrN)sf" |>\,Lg80C:nUez|l;<h~m(%]4xx6?`=qGtZ):d"*"@~1M.T}jJ)Bl7>Ns >9$8R1MlkG'F3:qZaY"

OUPUT의 형식은 1 0 0 1 0 ..., 1에 대응 '-'하고 0에 대응한다 '+'.

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

설명

시퀀스는 런-렝스 인코딩되었습니다. 모든 720 런의 길이는 1, 2, 3 또는 4이며 3 또는 4는 덜 일반적입니다. 따라서 각 3은 2, 0, 1 (2의 런, 다른 기호의 0의 런, 1의 런)으로 대체되었으며 비슷하게 각 4는 2, 0, 2로 대체되었습니다. 길이가 862 인 삼항 배열을 제공합니다.

이 배열은 base-94 인코딩으로 변환되며 코드 ( '$Te...kG')에 표시된 긴 문자열 입니다. Base 94 인코딩은 작은 따옴표 (이스케이프되어야 함)를 제외한 95 개의 인쇄 가능한 ASCII 문자를 모두 사용합니다.

이 코드는 해당 문자열을 밑 (94)에서 밑 (3)으로 변환하고 결과를 사용하여 기호 [1 0 1 0 ... 0](길이 862의 배열)의 길이를 디코딩합니다 .


2

젤리 , 95 바이트

“qạʂṅs⁽fØʋZ%BÞġı½.m0&u⁺TsƝȧAuỴż⁶3uÞ$+ȷ@4Ṣ’BḤC©µmLÆD$§SṠȯ®ṪNLḟ“⁶ .£µ+£gÐ9Ц.ñ×µ¥¤®‘ÄḤ¤ɗ}¡ṭø⁽¡ɠ¡Ḋ

이전의 두 가지 접근법 사이의 중간 지점.

이 코드는 시퀀스의 842 개 요소를 추측하려고 시도하고 나머지 318 개 요소를 하드 코딩합니다. 추측 중 19 개가 올바르지 않으며 하드 코드 된 색인 목록을 통해 되돌려 야합니다.

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

작동 원리

“qạʂṅs⁽fØʋZ%BÞġı½.m0&u⁺TsƝȧAuỴż⁶3uÞ$+ȷ@4Ṣ’

380009100940380065412452185545474826295694594854898450166594167299196720639075810827320738450934©

BḤC©

BC1±1

µmLÆD$§SṠȯ®ṪNLḟ“⁶ .£µ+£gÐ9Ц.ñ×µ¥¤®‘ÄḤ¤ɗ}¡ṭ

0

mLÆD$§SṠȯ®ṪNLḟ“⁶ .£µ+£gÐ9Ц.ñ×µ¥¤®‘ÄḤ¤ɗ}¡ṭ  Monadic chain. Arument: A (array)

 LÆÐ$                                       Compute all divisors of the length of A.
m                                           For each divisor d, generate the subarray
                                            of each d-th element.
     §                                      Take the sum of each subarray.
      S                                     Take the sum of the sums.
       Ṡ                                    Take the sign of the sum.
        ȯ®                                  If the result is 0, replace it with the
                                            array in the register.
          Ṫ                                 Tail; pop and yield the last element,
                                            modifying the register for a zero sum.
                                            This is a no-op for a non-zero sum.
              “⁶ .£µ+£gÐ9Ц.ñ×µ¥¤®‘ÄḤ¤      Yield all indices of incorrect guesses.
           NLḟ                        ɗ¡    If the length of A doesn't appear among
                                            the indices, negate the result.
                                        ṭ   Append the result to A.
ø⁽¡ɠ¡Ḋ

0⁽¡ɠ11600


산술 인코딩은 일부 항목을 수동으로 변경하는 것보다 간단합니다. 그것을 시도 했습니까, 아니면 Jelly가 적합하지 않습니까?
lirtosiast

23 바이트로 인코딩 된 19 개의 항목 만 변경해야합니다. 산술 디코더는 적어도 관련 데이터로 그보다 길 것이라고 생각합니다.
Dennis

1

, 150 바이트

”a∧∨~℅¹÷Oμ6fCC⁼∕⁵^;Ÿ‘«·T:∕D_=v§AHŒ,—<Pr¢E!◨±L^|.τ"NO“šþŽ∧<n`bÞE÷β$+Z⟦5⁶⁻.λ‹ζd⧴X>w,⊞?‹⟧⌈⪪-h÷³N“K⁺L¿>ρ@P⟲↘3νηKx÷?>™Ž¿•:8V¦£œεG↧x℅7¶	NRü"m”⟦)&¶bE“Yv”

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

Charcoal의 내장 문자열 압축을 사용합니다. 및 에 사용 .합니다 .-!+


1

CJam, 153 바이트

"Ke²ÉLº[
O%2¹d²Ý,Éeñlr[´KeÙ.Y­K-iZ[*Të
ÊYl°Ý
ËeËd¼Y%³l69,ÖÉmÙ¤¶ÉcN9<il²S3ÄÏ#8õ$¯d¶Ë%Õ¦Õ(Öѣɦ]-2ËEd¶)/4¦YLºXõ2É-°çR5©Ä"256b2b

및 에 사용 1합니다 .-0+

인쇄 할 수없는 것을 포함합니다. 온라인으로 사용해보십시오!

이것은 매우 간단합니다. 긴 시퀀스를 기본 256에서 기본 2로 변환합니다.


1

파이썬 3 , 236232 바이트

4 바이트를 절약 해 준 Mego 에게 감사

#coding:437
print(bin(int.from_bytes('ûKe▓╔L║[\rûO%2╣d▓▌,û╔eè±lr[\x1a┤KeÆ┘Ä.Y¡\x16K-ûiZû[*Tδ\r╩Yl░▌\rÆ╦eÆ╦d╝YÄû¥%│\x0bl69,╓╔m\x12┘ñ╢╔cûN9<il▓S3─╧#8⌡$»\x19d╢╦%Ü╒\x0eª╒(╓╤úû╔£ª]-2╦EÜìd╢¥)û/4ªYL║X⌡2╔-░τRì5⌐─'.encode('437'),'big'))[2:])

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

CP-437 인코딩을 사용합니다. 오류를 지적한 Dennis 에게 감사합니다 .


437의 별칭 cp437이므로 cp비트가 발생할 때마다 비트를 제거하여 4 바이트를 줄일 수 있습니다.
Mego

0

파이썬 2 , 364 250 바이트

114 바이트를 절약 해 준 Jonathan Allan 에게 감사 합니다.

print bin(int('28x0lphxjx8ze4uuhtdzo0oebr25amtmuxm62cbit0ibdwjm2sf50clh2ejq0a73ndseo5tove8uqca6nf66bo4abbkg867woh2b435at0o3pddvqmsqp29b6as5bd4eo28xgwkkj607gp66icba1q4n9fc13dltp45j340mpzbc56wsrbb3oejnczsbzfgh82xdi8aku8m4wlmwuxkgy4yaew7pu4p1g',36))[2:]

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


0

C # , 385 바이트


데이터

  • 입력 없음
  • 출력 String 척된 결과.

골프

()=>{var s="i´\u009aM6³E¤òi°ÚÍF\u009bM\"Ói6\u009au\u000e\u0093\u008d¤åK´\u009am&qѦRé´Òi\u0096¥i¤Õ«\u0014ò5¦\u0093O\"òm4\u009am4\u009bC¦qibÚLô\u0093ÉÆÓ)6\u0092í&[I6\u009ci±ÆÃ\u0096\u0093M¬Ì;0ÜÇ\nÛPæ\u009bI4Úe*ñY*×).\\i6cY¢ÒÍ4ºer\u009bIbÖiÐËY¦³E§\nÍ6ÒO\u0018­rÊV;";var o="";foreach(var c in s)foreach(var b in Convert.ToString(c,2).PadLeft(8,'0'))o+=(char)(43+(49-(int)b)*2);return o;};

언 골프

() => {
    var s = "i´\u009aM6³E¤òi°ÚÍF\u009bM\"Ói6\u009au\u000e\u0093\u008d¤åK´\u009am&qѦRé´Òi\u0096¥i¤Õ«\u0014ò5¦\u0093O\"òm4\u009am4\u009bC¦qibÚLô\u0093ÉÆÓ)6\u0092í&[I6\u009ci±ÆÃ\u0096\u0093M¬Ì;0ÜÇ\nÛPæ\u009bI4Úe*ñY*×).\\i6cY¢ÒÍ4ºer\u009bIbÖiÐËY¦³E§\nÍ6ÒO\u0018­rÊV;";
    var o = "";

    foreach( var c in s )
        foreach( var b in Convert.ToString( c, 2 ).PadLeft( 8, '0' ) )
            o += (char) ( 43 + ( 49 - (int) b ) * 2 );

    return o;
};

전체 코드

using System;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
        Func<String> f = () => {
            var s = "i´\u009aM6³E¤òi°ÚÍF\u009bM\"Ói6\u009au\u000e\u0093\u008d¤åK´\u009am&qѦRé´Òi\u0096¥i¤Õ«\u0014ò5¦\u0093O\"òm4\u009am4\u009bC¦qibÚLô\u0093ÉÆÓ)6\u0092í&[I6\u009ci±ÆÃ\u0096\u0093M¬Ì;0ÜÇ\nÛPæ\u009bI4Úe*ñY*×).\\i6cY¢ÒÍ4ºer\u009bIbÖiÐËY¦³E§\nÍ6ÒO\u0018­rÊV;";
            var o = "";

            foreach( var c in s )
                foreach( var b in Convert.ToString( c, 2 ).PadLeft( 8, '0' ) )
                    o += (char) ( 43 + ( 49 - (int) b ) * 2 );

            return o;
        };

        Console.WriteLine( $" Input: <none>\nOutput: {f()}\n" );

        Console.ReadLine();
      }
   }
}

자료

  • V1.0 - 385 bytes- 초기 솔루션입니다.

노트

  • 없음

0

05AB1E , 149 바이트

•19GÈRÕŸ
pт6½÷Ü;вVåΔĀÈ₄¤Ü³Aʒм5[¦PŠÅøœ^‚₆賦ìóV“LÛ'ßq;αÎΩªî»(2∍©däf×5 V5Ú”gÜ/\^(Ã∊Ƶ!3šÍ3°(§A΄ǝ₂È₅ç£6óàÖCsa*zƒÚ¥Î\ªD¹,n∊ðˆ.ëçPαǝƒ.É∍¯ü₂³Λ‘g∍Θþ“‚œΔи‹•b

매우 지루한. 압축 된 숫자입니다. 및 에 사용 1합니다 .-0+

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


0

PHP, 276 바이트

<?=gzinflate(base64_decode("dVJRFgMgCDoQj/tfb2+boqj9VJohQgQI8rv+D1yHuIIytGLsYh6vwAlYIMS62mVCiWMm56vfHiGOuTwjiMHQEC7OVlkNzzK0LZFTN8l0gavGdX4wOfJDsZpXZS0csig0l13wEsoRlvKzhYHMv+F9MnxaCXHWrC2Kx4UqQ8o4qmgNcsjbzA5lZG7LE6LdNMlt2sRKFpNhk/sL59N6DSMKp4No7vP2QcP0c2XWb6nPblqYfJBfHw=="));

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


0

루비 , 245 바이트

puts"%b"%"28x0lphxjx8ze4uuhtdzo0oebr25amtmuxm62cbit0ibdwjm2sf50clh2ejq0a73ndseo5tove8uqca6nf66bo4abbkg867woh2b435at0o3pddvqmsqp29b6as5bd4eo28xgwkkj607gp66icba1q4n9fc13dltp45j340mpzbc56wsrbb3oejnczsbzfgh82xdi8aku8m4wlmwuxkgy4yaew7pu4p1g".to_i(36)

+의 경우 0을,-의 경우 1을 출력합니다.

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


0

펄, 164 바이트

print unpack'b*','-Y²lÍ¢%O
[³bÙ²DËlY®pɱ%§Ò-Y¶deJ-Ki¥%«Õ(O¬eÉòDO¶,Y¶,ÙÂeF[2/ÉcËlI·dÚl9cÃiɲ53Ü;ãPÛ
gÙ,[¦TTët:lÆEK³,]¦NÙFkÓeÍ¢åP³lKòµNSjÜ'

16 진 덤프 :

00000000: 7072 696e 7420 756e 7061 636b 2762 2a27  print unpack'b*'
00000010: 2c27 962d 59b2 6ccd a225 4f96 0d5b b362  ,'.-Y.l..%O..[.b
00000020: d9b2 44cb 966c 59ae 70c9 b125 a7d2 2d59  ..D..lY.p..%..-Y
00000030: b664 8e8b 654a 972d 4b96 69a5 9625 abd5  .d..eJ.-K.i..%..
00000040: 284f ac65 c9f2 444f b62c 59b6 2cd9 c265  (O.e..DO.,Y.,..e
00000050: 8e96 465b 322f c993 63cb 946c 49b7 64da  ..F[2/..c..lI.d.
00000060: 926c 3996 8d63 c369 c9b2 3533 dc0c 3be3  .l9..c.i..53..;.
00000070: 50db 0a67 d992 2c5b a654 8f9a 54eb 9474  P..g..,[.T..T..t
00000080: 3a96 6cc6 9a45 4bb3 2c5d a64e d992 466b  :.l..EK.,].N..Fk
00000090: 960b d39a 65cd a2e5 50b3 6c4b f218 b54e  ....e...P.lK...N
000000a0: 536a dc27                                Sj.'

명백하고 지루한 해결책 : 모든 비트를 이진 문자열 (바이트 당 8 비트)에 넣으십시오. -에 0을, +에 1을 사용합니다. 나는 이것을 좀 더 골프하려고 노력할 것이다.


0

레티 나 333 바이트


ADG-RMCGHQFDLEM+-FAG-CADGPAKBBLHBCH-EGHJBORGEH-HB-FJOBPRCA+JAG-A+A+NJHQLIB-R+Q-OQPRAGP-HBEH-CGNCDGEH+BCCHQH-PDJCEGOGECDGCPK-FNH-EDLHCRIEELHDELEKE-HLJDDA+LHFGCFADJJBK+-JDCJBI+JCOOLGEDELMCGNAGKBEJKJEGCNCIF+BLECMMCAKLJDFDGCH+-E-JIQDJJNHD¶
R
GF
Q
+C
P
EA
O
CK
N
D-
M
I-A
L
--
K
D+
J
CB
I
A++
H
E+
G
AB
F
-AD
E
C+
D
B+
C
-B
B
-+
A
-++-+-

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.