"Ýûÿ©ÿßY÷ß"®c s4äëAU ¬£2839¤ë4X÷d0S1U
いくつかの印刷できないものが含まれています。オンラインでお試しください!
タリー:13バイトの圧縮データ、9バイトの圧縮解除データ、21バイトの出力形式。
説明
未ゴルフコード:
"Ýûÿ©ÿß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
4桁の実行のいずれかがで始まる場合、これは失敗することに注意してください。実行0
時に先行ゼロが省略されるs4
ためです。これを修正するに0
は#
、represent を使用します。これは、3回しか表示されず、4桁の実行の開始時に該当するものはありません。
s2 // Slice off the first two chars of the result.
さて、50桁の文字列を4つのチャンクでうまく圧縮するには、2桁追加する必要がありました。文字列の先頭に追加すると、one-byterでそれらを切り取ることができ¤
ます。
ëAU // Take every 10th (A) char in this string, starting at index <input> (U).
恥ずかしいことに、Japtには文字列を長さXのスライスに分割するための組み込み機能がありません。ただし、X番目のすべての文字を取得するための組み込み機能があります。すべての2行目など。
だから今我々は、例えばを作成したい桁エンコード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.
マジックナンバーについて説明するには、4つの異なる行を参照してください。あなたが交換した場合#
と1
して
と0
、あなたが得ます
100
001
101
111
これを転置してから単一の文字列に結合すると、が得られ101100010111
ます。10進数に変換すると、2839になります。プロセスを逆にすると、数字がマッピングされます0123
上記の4つのバイナリ行にがされます。
ほぼ完了しました!あとは、スペースと数字を追加するだけです。
d0S1U // In the resulting string, replace 0 with " " (S) and 1 with <input> (U).
そして、残りは暗黙の出力で処理されます。この説明が長すぎて申し訳ありませんが、ゴルフを理解しにくくすることなくゴルフをする本当の方法はありません(理解できる場合は...)