コードゴルフで長い数値を扱う場合、コードの長さを短くすることが難しい場合があります。数値を短くして管理しやすくするためのヒントはありますか?
たとえば、次のPythコードは "Hello world"を出力しますが、44バイトでは不十分です。
Vcjkj85942000775441864767076 2 7=k+kCiN2)k
では、どうすれば長い数を短くでき85942000775441864767076
ますか?
コードゴルフで長い数値を扱う場合、コードの長さを短くすることが難しい場合があります。数値を短くして管理しやすくするためのヒントはありますか?
たとえば、次のPythコードは "Hello world"を出力しますが、44バイトでは不十分です。
Vcjkj85942000775441864767076 2 7=k+kCiN2)k
では、どうすれば長い数を短くでき85942000775441864767076
ますか?
回答:
この質問にぴったりのタイミングです。@isaacgは本日、そのような数を大幅に短縮できる新機能を追加しました。
基本的な方法は、数値を256に変換し、それを文字に変換することです。これを行うには、コードを使用します++NsCMjQ256N
。次に、結果の文字列をと組み合わせて使用できますC
。これは、正反対の動作をします(charをintに変換し、結果を256進数として解釈します)。したがって、13文字になりますC"2ìÙ½}ü¶d"
。一部の文字は印刷できません。
しかし、バイトではなく13文字と言ったことに注意してください。文字をコピーしてhttps://mothereff.in/byte-counterでカウントすると、13文字と18バイトと表示されます。これは文字の文字エンコーディングによるもので、デフォルトではUTF-8です。また、UTF-8では2 ^ 7種類の1バイト文字しか使用できません。実際のをc
持つすべての文字はord(c) > 127
、1バイトではなく2バイトを使用して格納されます。
そして、@ isaacgの新機能が登場します。彼はデフォルトのコード形式をUTF-8からiso-8859-1に変更しました。iso-8859は、1バイトのみで256文字を表すことができます。したがって、実際には13バイトに到達できます。これは標準コンパイラでのみ可能ですが、オンラインコンパイラでは機能しません。
最初に、次のスクリプトを使用して数値を16進値に変換しますjdm.[2.Hd"0"jQ256
。これはあなたに与えます 12 32 ec d9 bd 07 7d fc b6 64
。その後、16進エディター(例:Linuxのhexedit)を使用して、これらの番号をコードファイルにコピーします。
通知:
"
文字列がコードの最後の部分である場合は、明らかに末尾のを削除します。34
(バイト22
)がない場合にのみ機能"
します。これはcharであり、文字列を終了するためです。ただし、エスケープは機能します(5C 22
)。0A
または0d 0a
最後に表示される可能性が高く、削除できます。これは行の終わりを示すだけです。00
。さらに\
、、byteは5c
、その後のバイトに応じて、別の ``でエスケープする必要がある場合とない場合があります。