문제

내 주요 문제는 예를 들어 다음과 같이 자동으로 회전하기위한 적절한 솔루션을 찾는 것입니다.

d+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+

이것으로 :

[d+c+d+f+]4

즉, 서로 옆에서 복제를 찾은 다음이 복제 중에서 더 짧은 "루프"를 만듭니다. 지금까지 나는 이것에 대한 적절한 해결책을 찾지 못했고 응답을 기대합니다. 추후 혼란을 피하기 위해, 위에서 언급 한 샘플만이 "루핑"이 필요한 것은 아니며 파일마다 다릅니다. 아, 그리고 이것은 C ++ 또는 C# 프로그램을위한 것입니다. 다른 제안에도 열려 있지만 괜찮습니다. 또한 주요 아이디어는 모든 작업이 프로그램 자체에 의해 수행되며 파일 자체를 제외하고는 사용자 입력이 없다는 것입니다. 다음은 참조를위한 전체 파일입니다. 스트레칭 페이지에 대한 사과드립니다. #0 @16 v225 Y10 W250 T76

l16 $ ed $ ef $ a9 p20,20> ecegb> d u003Cbgbgecgecu003Cgn> D+ u003Cb>D+F+A+> C+u003C/b> u003Ca+f+a+f+d+u003Cb> u003Cb>f+d+u003C/b>u003Cbf+n> u003Cb>C u003Ca>CEGBGEGECu003C/a> u003Ca>ECu003C/a>u003C/b>u003Caen> u003Cb>u003Ca>D+C+D+F+D+D+C+D+F+D+D+D+F+D+C+D+F+R1^1u003C/a>u003C/b>

/ L8 R1R1R1 F+u003Ca+> F+G+CG+R4 A+C+A+G+CG+R4F+u003Ca+> F+G+CG+R4 A+C+A+G+CG+R4F+u003Ca+> F+G+CG+R4 A+C+A+G+CG+R4 F+u003Ca+> F+G+CG+R4 A+C+A+G+R4G+16F16C+A+2^G+F+G+4 FF+4FD+F4 D+C+D+4C+Cu003Ca+2^4n> C4D+u003Cg+2^4r4^na+> C+D+4G+4A+4 R1^2^4^A+2^G+F+G+4 F+FF+4FD+F4 D+C+D+4C+Cu003Ca+2^4n> C4D+u003Cg+2^4r4^na+> c+d+4g+4a+4 r1^2^4^ r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1

#4 @22 V250 Y10

L8 O3 RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+RG+ / r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1

#2 @4 V155 Y10

L8 $ ed $ F8 $ 8F O4 R1R1R1 D+4F4F+4G+4 A+4R1^4^2 / D+4^FR2 F+4^FR2D+4^FR2 F+4^FR2D+4^FR2 F+4 ^fr2d+4^fr2 f+4^fr2> d+4^fr2 f+4^fr2d+4^fr2 f+4^fr2 <f+4^g+r2 f+4^fr2f+4^g+r2 F+4^fr2f+4^g+r2 f+4^fr2f+4^g+r2 f+4^fr2f+4^g+r2 f+4^fr2f+4^g+r2 f+4^fr2f+ 4^g+r2 f+4^fr2f+4^g+r2 f+4^fr2> a+4^g+r2 f+1a+4^g+r2 f+1 f+4^fr2 d+1 f +4^fr2 d+2^d+4^ r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1r1

#3 @10 V210 Y10

R1^1 O3 C8R8D8R8 C8R8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8R8C8R8 C8@10D16D16@21 C8@10D16D16@21 C8@10D16D16@21 / C4@10D8@10D8@10D8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8 c4@10d8@21c8u003Cb8> @10d16d16d16d16d16r16 C4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8c4@10d8@21c8u003Cb8> C8@10d8@21c8 c4@10d8@21c8@10b16b16> c16c16

#7 @16 V230 Y10

L16 $ ed $ ef $ a9 cceeggbbggeecceeu003Cbb> D+D+F+F+A+A+A F+F+D+D+u003Cbb> D+D+u003Caa> CCEEGGEECCu003Caa> CCu003Cg+g+bb> D+D+FFD+D+

#5 @4 V155 Y10

L8 $ ed $ F8 $ 8F O4 R1R1R1R1 D+4R1^2^4 /u003Ca+4^> CR2 C+4^CR2u003Ca+4^> CR2 C+4^CR2u003Ca+4^> CR2 C+4^CR2u003Ca+4^> CR2 C+4^CR2 A+4^> CR2 C+4^CR2u003Ca+4^> Cr2 C+4^C R1R1R1R1R1R1R1R1R1R1R1R1R1R1R1 R2 F+4^FR2 D+1F+4^FR2 D+1 C+4^CR2u003Ca+1n> C+4^CR2

도움이 되었습니까?

해결책

이것이 당신이 찾고있는 것인지 확실하지 않습니다.

I took the string "testtesttesttest4notaduped+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+testtesttest" and converted it to [test]4 4notadupe[ D+C+D+F+] 4 [테스트] 3 "

전체 파일을 처리 할 때 약간 느리기 때문에 누군가가 더 효율적인 솔루션이 더 나을 것이라고 확신합니다. 다른 답변을 기대합니다.

        string stringValue = "testtesttesttest4notaduped+c+d+f+d+c+d+f+d+c+d+f+d+c+d+f+testtesttest";

        for(int i = 0; i < stringValue.Length; i++)
        {
            for (int k = 1; (k*2) + i <= stringValue.Length; k++)
            {
                int count = 1;

                string compare1 = stringValue.Substring(i,k);
                string compare2 = stringValue.Substring(i + k, k);

                //Count if and how many duplicates
                while (compare1 == compare2) 
                {
                    count++;
                    k += compare1.Length;
                    if (i + k + compare1.Length > stringValue.Length)
                        break;

                    compare2 = stringValue.Substring(i + k, compare1.Length);
                } 

                if (count > 1)
                {
                    //New code.  Added a space to the end to avoid [test]4 
                    //turning using an invalid number ie: [test]44.
                    string addString = "[" + compare1 + "]" + count + " ";

                    //Only add code if we are saving space
                    if (addString.Length < compare1.Length * count)
                    {
                        stringValue = stringValue.Remove(i, count * compare1.Length);
                        stringValue = stringValue.Insert(i, addString);
                        i = i + addString.Length - 1;
                    }
                    break;
                }
            }
        }

다른 팁

Smith-Waterman 알고리즘을 사용하여 로컬 정렬을 수행하여 문자열을 자체와 비교할 수 있습니다.

http://en.wikipedia.org/wiki/smith-waterman_algorithm

편집 : 자체 정렬에 대한 알고리즘을 조정하려면 대각선의 값을 0으로 강제해야합니다. 그러면 "두 번째 최고"정렬이 대신 나타납니다. 이것은 가장 긴 두 개의 일치하는 하위 문자가 될 것입니다. 점차 더 짧은 일치하는 하위 문자열을 찾기 위해 동일한 종류의 것을 반복하십시오.

LZW 도움이 될 수 있습니다 : 접두사 사전을 사용하여 반복적 인 패턴을 검색하고 이러한 데이터를 이전 항목에 대한 참조로 대체합니다. 나는 당신의 요구에 맞게 조정하는 것이 어렵지 않아야한다고 생각합니다.

그냥 사용하지 않는 이유는 무엇입니까? System.io.compression?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top