チャレンジ
あなたの仕事は整数をASCII文字の文字列としてエンコードし、その文字列がランダムにシャッフルされた後にそれを正常にデコードすることです。
EncoderおよびDecoderと呼ばれる2つのプログラム/関数を作成します。
エンコーダー
- 入力:範囲整数。
- 出力:文字列のアスキー文字(必ずしも印刷可能ではありません)。
デコーダ
- 入力:文字列ランダムな順列。
- 出力:整数。
得点
ましょである最大長ののすべての可能な値を横切る。エンコーダが非決定的に動作する場合(これは許可されています。以下を参照)、は発生する可能性ある最大長になります(おそらく)。
してみましょうあることの長さエンコーダバイトでの長さデコーダバイトインチ
スコアはです。
最優秀得点の提出に対して勝利が授与されます。
制限時間
単一のテストケースのエンコーダーとデコーダーの両方の実行時間には、1分というやや任意の時間制限があります(つまり、単一の値)。
目標は、特定のプロパティを持つすべてのシーケンスを列挙することにより、ブルートフォースエンコーディングを見つけるソリューションを回避することです。あなたのソリューションがそれよりも賢い何かをするなら、それはおそらく時間の制約に適合し、有効と見なされます。同様に、ランダムに選択された値に対してTIOで機能する場合、有効と見なされます。それ以外の場合は、マシンでテストしますが、ソリューションが純粋なブルートフォースの場合、ほぼ確実に失敗することに注意してください。
ルール
- エンコーダとデコーダはで記述する必要があり、同じ言語。
- デコーダを出力しなければならない正しい整数あらゆる可能な順列のためのの文字列のによって返さエンコーダ。
- エンコーダとデコーダはされていないに許さ株式情報(グローバル変数やファイルによって、例えば)どのような方法インチ
- エンコーダーの出力は確定的である必要はありません(つまり、エンコーダーが複数回実行される場合、同じ入力は異なる出力文字列を生成する可能性があります)が、デコーダーは常に正しい整数推測する必要があります。n
- エンコーダおよびデコーダは取り、整数を返すことができるに任意の便利な方法(例えば、もしの入力がされることが結構です、または)。n = 14
14
"14"
[1,4]
- エンコーダ出力してもよいストリングのいずれかによって印刷の上にまたはによって返却文字列を、文字のリスト/配列または範囲内の整数のリスト/配列。そのノートデコーダは、入力としての順列受け取るで返されるエンコーダがストリング受け入れるべきであるので、において同じフォーマットとして。[ 0 、127 ] S 、S 'の
stdout
- 標準的な抜け穴は禁止されています。
- 可能であれば、コードの仕組みと、主張するスコアが正しい理由を説明してください。
例
と仮定します。
- エンコーダは、受信
14
入力として。出力される場合があります"qwerty"
。- デコーダは、の順列受信
"qwerty"
例えば、入力としての"tweyqr"
。14
(便利な形式で)出力する必要があります。
エンコーダは、戻ってきた可能性があり[113,119,101,114,116,121]
、その場合に、同様にデコーダは、(例えば)を受信したであろう[116,119,101,121,113,114]
。
エンコーダから返される文字列には、印刷できないASCII文字が含まれる場合があります(ただし、常に範囲内にあります[0x00, ..., 0x7F]
)。