Haskell、306 + 624 = 930バイト
プログラム1:仮引数を取り、文字列を返す匿名関数。
(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"İĴİóđđđÝöÝâÝæÝääē××êääē××İēÀħđĮâħēĕóİóòòĮááħááđéêâéêēááĮÀħ""(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"
オンラインでお試しください!
プログラム2:q[[40,...]]
最後は、仮引数を取り文字列を返す匿名関数です。
z~z=[[['@','0'..]!!4..]!!z]
q[x,q]_=z=<<x++q++[34,34]++x
q[[40,92,98,32,99,40,41,45,62,102,111,108,100,114,40,92,97,45,62,109,97,112,32,112,114,101,100,41,98,40,115,104,111,119,40,41,62,62,99,41,96,109,97,112,112,101,110,100,96,115,104,111,119,40,109,97,112,40,109,97,112,32,102,114,111,109,69,110,117,109,41,36,116,97,105,108,40,115,104,111,119,32,99,41,58,112,117,114,101,32,98,41,41,34],[304,308,304,243,273,273,273,221,246,221,226,221,230,221,228,228,275,215,215,234,228,228,275,215,215,304,275,192,295,273,302,226,295,275,277,243,304,243,242,242,302,225,225,295,225,225,273,233,234,226,233,234,275,225,225,302,192,295]]
オンラインでお試しください!
文字セット1(スペースを含む):
"$()-:>E\`abcdefhilmnoprstuw×ÝáâäæéêñòóöđēĕħĮİĴ
文字セット2(改行を含む):
!'+,.0123456789<=@[]_qxz~
セット1のみに非ASCII文字が含まれているため、UTF-8バイトもばらばらです。
使い方
チュートリアル、プログラム1
b
およびc
は、それぞれプログラム2および1の文字列リテラルの値であり、ラムダ式の最終引数として指定されます。()
プログラムが関数を定義するというPPCGのルールを満たすためだけの仮引数です。
foldr(\a->map pred)b(show()>>c)
またはの長さに等しい回数をb
適用map pred
することにより、プログラム2のコアコードに文字列をデコードします。show()>>c == c++c
182
tail(show c)
文字列c
をプログラム1のコアコードに変換し、最後に二重引用符を追加します。
:pure b
これをリスト内の文字列と組み合わせますb
。
map(map fromEnum)$
文字列をコードポイントのリストに変換します。
`mappend`show(...)
結果のリストのリストをシリアル化し、プログラム2のコアコードに最後に追加します。
チュートリアル、プログラム2
- トップレベル
z~z=[[['@','0'..]!!4..]!!z]
は、コードポイントを文字に変換する関数です(すべての文字toEnum
が使用できるわけではないため、記述する必要があります)。
- そのコードポイント引数も呼ばれ
z
ます。怠inessマーカー~
はこの位置では効果がありませんが、スペース文字は避けます。
['@','0'..]
は、ASCIIコード64で始まり、各ステップで16ずつジャンプする逆方向のステップリストの範囲です。
- これに適用する
!!4
と、\NUL
キャラクターが得られます。
[ ..]
範囲内でそれをラップすると、!!z
インデックス付けするすべての文字のリストが得られます。
- キャラクターは最終的にシングルトンリストにラップされます。これにより、使用できないおよびの代わりに
z
リストを使用して関数をマッピング=<<
できます。map
<$>
- トップレベル
q[x,q]_=z=<<x++q++[34,34]++x
は、クインデータリストからプログラム1を構成する関数です。
x
は、プログラム1のコアのデータ(最後の二重引用符を含む)であり、内部q
は、プログラム2のコアの難読化されたデータです_
。
x++q++[34,34]++x
2つの二重引用符を含む部分をASCIIコード34で連結します。
z=<<
z
連結をマッピングしてプログラム1を構成し、コードポイントから文字に変換します。
- 最後
q[[40,...]]
はq
、クインデータと結合する匿名関数です。