문자열 배열 압축
업데이트 : 이 팁에 소개 된 도구는 재 작성되고 개선되었으며 Japt 인터프리터에 통합되었습니다 . 최상의 결과를 얻으려면 아래 링크 된 압축기보다 압축기를 사용하는 것이 좋습니다. 시간이 더 있으면이 팁을 다시 방문하여 새 압축기를 염두에두고 다시 작성하겠습니다.
소개
코드에 문자열 배열이있는 경우 압축하는 가장 확실한 방법은 각 문자열 을 실행 하는 것입니다.Oc
개별적 입니다. 이 팁의 목적을 위해 ["lollipop","marshmallow","nougat","oreo"]
, 처음에는 42 바이트의 무게 를 갖는 array 작업을 수행 할 것 입니다. 각 문자열을 통해 실행 Oc
하면 다음 을 얻을 수 있습니다.
[`lo¥ipop`,`Ú\hÚaow`,`Í`,`eo`]
이제 33 바이트가 절약되었습니다.
1 단계
그러나 우리는 더 잘할 수 있습니다. 배열을 개행으로 구분 된 문자열에 결합하면 대괄호, 쉼표 및 불필요한 백틱을 제거하고 개행으로 분할하여 배열을 얻을 수 있습니다. 이를 예제 배열에 적용하면 다음과 같은 결과를 얻을 수 있습니다.
`lo¥ipop
Ú\hÚaow
Í
eo`·
지금은 26 바이트로 줄었습니다.
2 단계
그러나 여전히 더 잘할 수 있습니다! 압축에 포함될 수있는 줄 바꿈 대신 소문자를 사용하여 문자열을 구분할 수 있습니다. z
우리의 어떤 문자열에도 사용되지 않습니다.
`lo¥ipopzÚ\hÚaowzÍzeo`qz
아, 견과류-거기에 개선이 없습니다. 우리의 바이트 수는 1 씩 증가했습니다! 사용할 수있는 다른 문자가있을 수 있지만 문자열에 따라 시도해야 할 것이 몇 가지 있습니다 b,c,d,f,j,k,q,v,x,y,z
. 각각을 시도하는 것은 꽤 지루할 것입니다. 도구를 사용 이 편리한 도구 가 제공됩니다. 줄 바꿈으로 구분 된 문자열을 공급하면 문자열에 포함되지 않은 각 문자로 문자열을 구분하여 출력하려고합니다.
- 가장 짧은 압축 문자열
- 사용하는 구분자
- 길이.
샘플 문자열을 통해 실행 b
하면 최상의 결과를 얻을 수 있습니다.
`lo¥ipáæqrÚaowbÍÞo`qb
그리고 당신은 그것을 가지고 있습니다. 우리는 24 바이트로 줄었습니다.
3 단계
그러나 , 우리는 할 수 있습니다 , 심지어 더 나은! 배열의 문자열 순서가 중요하지 않은 경우 다른 구분 기호와 결합 된 다른 순열이 더 짧아 질 수 있습니다. 하지만 각각의 가능성을 시도하는 것은 훨씬 더 지루할 것입니다. 4 개의 문자열을 사용하면 24 가지 순열을 시도 할 수 있습니다. 264 개가 될 수있는 11 개의 가능한 글자들과 함께! 바로이 도구 가 사용됩니다. 다시 줄 바꿈으로 구분 된 문자열을 입력하면 모든 순열과 모든 구분 문자의 모든 조합을 시도하여 다음을 출력합니다.
- 가장 짧은 압축 문자열의 문자열 순서
- 압축 된 문자열
- 사용하는 구분 기호
- 길이.
그것을 통해 우리의 샘플 문자열을 실행하면 보여줍니다 "nougat","oreo","lollipop","marshmallow"
으로 b
구분 단지 (23)의 최종 바이트 수로, 최상의 결과를 제공으로 :
`ÍÞo½o¥ipáæqrÚaow`qb
보너스 팁 : 정수 배열 압축
각각을 더 높은 염기로 변환하여 정수 배열에 동일한 원리를 적용 할 수 있습니다. 이 샘플을 사용하여 36 바이트 배열 :
[588181,156859,595676,475330,680474]
먼저 기본 32 문자열의 배열로 변환 한 다음 첫 번째 압축 프로그램을 통해 실행하여 29 바이트로 줄일 수 있습니다.
`huclt4p5r5ÛÊg62tkogq`qt mnH
또는 두 번째 프로그램을 사용하여 27 바이트만큼 낮습니다.
`4p5Ïcl5ÛÊg62tkogq`qt mnH
정수 변환을 이미 배열에서 실행중인 메소드로 이동하여 다른 바이트 또는 2를 저장할 수 있습니다.
노트
- 1 바이트 또는 2 바이트의 추가
q<letter>(<space>)
비용 을 고려하는 것을 잊지 마십시오 ·
. 구분 기호에 따라 유니 코드 바로 가기 중 하나를 사용 하여 바이트를 다시 가져올 수 qÊ
있지만ql<space>
예 : ).
- 마지막 도구를 사용할 때주의해야 할 말 : 문자열이 많을수록 더 많은 순열이 발생하고 프로그램이 느리게 실행될 때까지 프로그램이 느리게 실행됩니다. 위에서 설명한 바와 같이, 4 개의 샘플 문자열과 11 개의 가능한 문자를 사용하면 264 개의 가능한 조합이 가능하고 동일한 11 개의 문자로 문자열 수를 1 씩 늘릴 수 있으며 이미 시도 할 1320 개의 조합이 있습니다. 원하는 경우이 도구 를 사용 하여 조합 수를 계산할 수 있습니다 .
크레딧
- 이 팁에서 찾은 도구를 만드는 데 영감을 준 Oliver.
- 교정을위한 ETH 프로덕션.