apt , 43 바이트
"Ýûÿ©ÿßY÷ß"®c s4äëAU ¬£2839¤ë4X÷d0S1U
인쇄 할 수없는 것들이 포함되어 있습니다. 온라인으로 사용해보십시오!
Tallies : 13 바이트의 압축 데이터, 9 바이트는 압축 해제, 21 바이트는 출력을 형성합니다.
설명
Ungolfed 코드 :
"Ýûÿ©ÿßY÷ß"® c s4à ¤ ëAU ¬ £ 2839¤ ë4Xà · d0S1U
"Ýûÿ©ÿßY÷ß"mZ{Zc s4} s2 ëAU q mX{2839s2 ë4X} qR d0S1U
정확히 4 개의 다른 행 가능성이 있습니다 : ( #
숫자를 나타냄)
#
#
# #
###
따라서, 각 숫자는 5 자리 4 자리 숫자로 저장 될 수 있습니다. 그런 다음 각 숫자를 10 비트로 저장할 수 있으므로 총계는 100 비트이며 13 바이트에 해당합니다. 압축 과정을 건너 뛰고 대신 압축 해제에 대해 설명하겠습니다.
mZ{Zc s4}
mZ{ } // Replace each character Z in the compressed string with the following:
Zc // Take the char-code of Z.
s4 // Convert to a base-4 string.
압축 해제 후 13 바이트 압축 문자열은 다음과 같습니다.
3131332333332111200122213333313321011121213133133133
로 시작할 0
때 선행 0이 제거 되므로 4 자리 실행이 시작되면 실패 s4
합니다. 우리는 이것을 세 번만 0
나타내며 #
, 4 자리 런의 시작에 해당하는 것은 없어서이를 고칠 수 있습니다 .
s2 // Slice off the first two chars of the result.
자, 50 자리 문자열을 4 개의 덩어리로 잘 압축하려면 두 자리를 더 추가해야했습니다. 문자열의 시작 부분에 추가하면 1 바이트로 잘라낼 수 ¤
있습니다.
ëAU // Take every 10th (A) char in this string, starting at index <input> (U).
당황하게도, Japt에는 문자열을 길이가 X 인 슬라이스로 분리 할 수있는 기능이 내장되어 있지 않습니다. 그러나 모든 X 번째 문자를 가져올 수있는 기능이 내장되어 있으므로 모든 최상위 행을 먼저 인코딩하여 모든 데이터를 저장할 수 있습니다. 두 번째 행 등
이제 만들려는 숫자를 인코딩하는 5 자리 문자열이 있습니다. 예 32223
를 들어0
.
q mX{2839s2 ë4X} qR
q // Split the resulting string into chars.
mX{ } // Replace each char X with the result of this function:
2839s2 // Convert the magic number 2839 to a binary string.
ë4X // Take every 4th char of this string, starting at index X.
qR // Join the result with newlines.
매직 넘버를 설명하려면 네 개의 다른 행을 다시 참조하십시오. 당신은 교체하는 경우 #
와 1
와
와0
, 당신은 얻을
100
001
101
111
이것을 바꾸고 단일 문자열로 합치면 101100010111
됩니다. 십진수로 변환하면 voilà는 2839입니다. 프로세스를 반대로하면 숫자 0123
가 위에 표시된 네 개의 이진 행으로 매핑 됩니다.
거의 끝났어! 이제 남은 일은 공백과 숫자를 추가하는 것입니다.
d0S1U // In the resulting string, replace 0 with " " (S) and 1 with <input> (U).
그리고 암시 적 출력은 나머지를 처리합니다. 이 설명이 너무 길어서 미안하지만 이해하기 쉽도록 골프를 칠 수있는 실제 방법을 보지 못합니다 (이해하기 쉬운 경우 ...)