2017-01-30 8 views
0

私はスポーツプログラミングサービスの初心者です。なぜスポーツ番組でビット演算子が普及しているのですか

ここは例です。

2つの 配列の間に違いがある(1つの要素によって異なるとみなす)関数を作成します。

ソリューションは、次のとおりです。

let s = x => ~eval(x.join`+`); 
let findDiff = (a, b) => s(b) - s(a); 

let findDiff = (a, b) => eval(a.concat(b).join`^`); 

私が知りたいのですが:

  1. これら二つの例(ビット単位の部分)の説明を。
  2. 10進数にビット演算子を使用する利点は何ですか?
  3. これは通常のビット演算ではなくビット単位の演算で高速に処理できますか?

更新: 私の質問は~~ vs parseIntに重複としてマークされ、なぜ私は完全には理解していませんでした。それは、なぜこの演算子がparseIntを置き換え、おそらくスポーツプログラミングに役立つかを知っておくとよいでしょう。しかし、それは私の質問に答えることはありません。

+1

必ずしも高速である必要はありません。彼らは簡潔です(そして、通常、読むのは難しいですが、それは副作用です)。コードゴルフはビット単位の演算子に焦点を絞らず、コードの長さについてです。このような種類の質問では、SOの代わりに[該当するコミュニティ](http://codegolf.stackexchange.com/questions/2682/tips-for-golfing-in-javascript)をご検討ください。 – estus

+0

私の例では '~~' parseInt?](http://stackoverflow.com/questions/10841204/vs-parseint) – estus

+0

@estusの複製があります。 –

答えて

1

コードゴルフはビット単位の演算子に焦点を当てていませんが、コードの長さについてです。

ビット単位の演算子は高速である必要はありませんが、一般的には十分高速です。彼らは簡潔です(そして、通常、読むのは難しいですが、それは副作用です)。

~~は、parseIntwith a considerable number of remarksのほうが短く(通常はより予備形成された)代替品です。通常の(ゴルフではない)コードでは、それがparseIntより望ましい動作を提供する場合、またはパフォーマンス重視のコンテキストでのみ使用する必要があります。

~aは、おおよそparseInt(a) * -1 - 1に等しい。この具体例では~~aのより短い代替として、* -1 - 1部分が除去されているので(記号を考慮に入れる必要がある)、これをs(b) - s(a)として使用することができます。

+0

ここに対応するコミュニティがありますhttp://codegolf.stackexchange.com/questions/2682/tips-for-golfing-in-javascript –

関連する問題