2017-11-13 7 views
2

昨日私は質問Algorithm to create costum Template/Code from Stringを読んだ。質問がうまく定式化されていなかったので、すぐに棄却されました。しかし、質問自体は私の意見ではそれほど悪くはないので、私はこの質問のうまくいったバージョンをもう一度尋ねることにしました。文字列暗号化 - Spotifyコードのようなユニークなパターンを生成する

[OK]を、私はどのように文字列の暗号化が不思議です。新しいSpotifyコードが動作しています。私はJavaScriptでこのパターンの暗号化のようなものを実装することが可能となる程度でスーパー興味がある

Spotify Codes

:下の画像を参照してください。

Spotifyのコード - Iはすでに上述してきたが - 異なるサイズのバーに分割されている行で構成されています。

24行に分割された行があり、すべての行のサイズが '3'、 '5'、 '7'または '9'であるとします。

string = 'hello' --> pattern = '3,3,5,7,9,3,7,9,9,3,3,5,3,9,5,3,3,7,5,9,3,9,3,9' 


その後戻って、文字列として読み込んもコンバーチブルであることを、ユニークなパターンに文字列(が5つの文字を言うことができます)を変換するための良い方法/簡単な方法は何ですか?

これまで私が開発したコードですが、このコードでは10種類の可能性(バーサイズ)を持つキー配列を使用しましたが、私は4種類のサイズが好きです。


説明:

私はハロー「私の文字列を変換する 『』バイナリ形式にし、このような何かを得るために最大3のグループにアップした文字列を分割する:[ 『001』、 『110』、」 0 ']。

その後、上記の結果配列を使用して、下のキー配列で一致するものを見つけて、インデックスを取得して(10種類の異なるインデックス付き - > 10種類の異なるインデックス)、バーサイズとして使用します。

しかし、文字列を一意のパターンに変換する方法がより効率的でなければなりません。私は誰かが私の小さなアルゴリズムを改善するのに役立つことを願っています。百万円前払いありがとうございます。

var key = ['0', '1', '000','001','010','100','110','101','011','111'] 
 

 

 
String.prototype.encode = function() { 
 
    var code = this, result = [],encryped_string=[] 
 
    for (var i=0; i<code.length;i++) result.push(code[i].charCodeAt(0).toString(2).match(/.{1,3}/g)); 
 
    for (var i=0; i<result.length; i++) for (var j=0; j<result[i].length; j++) encryped_string.push(key.indexOf(result[i][j])) 
 
    return encryped_string 
 
} 
 

 

 

 
var code = 'hello'; 
 
console.log(code.encode())

+0

1. 10は何ですか?最初の2つのエントリは必要ありません。 2. Unicodeを処理する場合は、各バイトの8ビットと文字ごとの複数バイトを処理する必要がありますが、おそらくUTF-8が最適です。世界と絵文字のほとんどには、Unicodeが必要です。 – zaph

答えて

3

あなたが示すのグラフィックに文字列「コーヒー」から直接マッピングがあることを前提に作っていることが表示されます。その前提はほとんど間違いです。

まず、「コーヒー」と呼ばれる2つの異なる曲がある場合どうなるかを考えます。あなたの提案したアルゴリズムは、それらの両方に同じコードを割り当てます。それは不合理なようだ。あなたはのコードにの曲を一意に識別させたいと思っています。

第2に、曲名は任意に長くすることができます。たとえば、ピンクフロイドの「洞窟で一緒に集められた小規模な毛むくじゃらの動物のいくつかの種」と「ピクトを使って溝を開ける」という曲があります。あなたのエンコーディングアルゴリズムはおそらくそれを24のバーに収めることはできません。可能な場合でも、私はいつもより長い曲のタイトルを見つけることができます。

文字a-zが与えられた場合、11,881,376文字の可能な5文字の文字列があります。可能な限りすべてを一意にエンコードする場合は、わずか23ビットで行うことができます。文字列を基数26として扱い、変換を行います。

ほとんどの場合、Spotifyは各曲に一意の番号を割り当て、その番号をエンコードしています。文字列 "Coffee"と画面上に表示されるグラフィカルコードとの間には直接のマッピングはありません。

+0

Downvoter?あなたはダウンボートの理由を分かち合いたいですか? –

関連する問題