長い数字を短くする


10

コードゴルフで長い数値を扱う場合、コードの長さを短くすることが難しい場合があります。数値を短くして管理しやすくするためのヒントはありますか?

たとえば、次のPythコードは "Hello world"を出力しますが、44バイトでは不十分です。

Vcjkj85942000775441864767076 2 7=k+kCiN2)k

では、どうすれば長い数を短くでき85942000775441864767076ますか?

回答:


10

この質問にぴったりのタイミングです。@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)を使用して、これらの番号をコードファイルにコピーします。

hexeditのデモ

通知:

  • "文字列がコードの最後の部分である場合は、明らかに末尾のを削除します。
  • これは、数値のbase-256表現に34(バイト22)がない場合にのみ機能"します。これはcharであり、文字列を終了するためです。ただし、エスケープは機能します(5C 22)。
  • ところで、16進エディタでファイルを開くと、バイト0Aまたは0d 0a最後に表示される可能性が高く、削除できます。これは行の終わりを示すだけです。

オフラインインタープリターを自分のマシンに配置する必要がありますが、これはすばらしいです。:)
ベータ崩壊2015

1
文字列には、値のnullバイトを含めることもできません00。さらに\、、byteは5c、その後のバイトに応じて、別の ``でエスケープする必要がある場合とない場合があります。
isaacg 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.