エンコードの仕組み
ビットのリストが与えられた場合:
- プライムを保持する(で始まる
2
) - リストを持っている
- 入力の各ビットに対して
- 前のビットと同じ場合、保持している素数をリストに追加します
- 異なる場合は、次の素数を保持してリストに追加します
- リスト内のすべての数値の積を返します
- 最初のビットについては、前のビットが
0
注:これらの手順は説明のみを目的としており、従う必要はありません。
例
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
さらにいくつかの例:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
チャレンジ
このエンコード方式のエンコーダーとデコーダーを作成します。
(デコーダーはエンコーダーのプロセスを逆にします)。
入出力
エンコーダーは整数または文字列のいずれかを出力する必要があります
デコーダーは、エンコーダーの出力と同じ形式で入力を取得する必要があります
デコーダーは、エンコーダーが入力として受け取るのと同じ形式を出力する必要があります
言い換えると decoder( encoder( input ) ) === input
ノート
- デコーダーは、その入力がデコード可能であると想定する場合があります
- あなたの答えは、あなたの言語がネイティブ(使用しなくてもサポートできることを整数に対処しなければならない
long
、bigInt
あなただけの1にint型をサポートしている言語ならば、合理的である、など)、多分答えを投稿再考
得点
スコアは、エンコーダーとデコーダーのバイト単位の長さの合計です。
モジュールをインポートする必要がある場合、エンコーダーとデコーダーが同じファイルに共存して再利用できる場合(関数など)、インポートは1回しかカウントできません。
デフォルトの抜け穴は禁止されています。
これはコードゴルフなので、すべての言語の最短スコアが勝ちます。