パーツの数と各パーツが2の累乗であり、パーツのサイズと数がJavaScriptで制限されているパーティションN
数値を取り込むJavaScript関数を作成する必要があります。関数は、次のルールに従って数値をチャンクに分割する必要があります-
-
チャンクの数は2の累乗である必要があります
-
各チャンクには、2の累乗の数のアイテムも必要です(サイズは最大2の累乗になるため、1、2、4、8、16、32、32が最大になります)
したがって、たとえば、8つを1つのバケットに分割できます-
[8]
9は-
である可能性があります[8, 1]
これは、両方の数値が2の累乗であり、配列のサイズが2(これも2の累乗)であるために機能します。
11を試してみましょう-
[8, 2, 1]
いいえ、機能しません。
配列のサイズは3であるため、11に追加されますが、2の累乗ではありません。
[4, 4, 2, 1]
それはうまくいきます! 2の累乗である4つの要素です。
例
このためのコードは-
になりますfunction permuteCombinations(n, maximum){
const maxPowerOf2 = 1 << maximum;
const m = ~~(n / maxPowerOf2);
const A = new Array(maximum + 1).fill(0);
A[maximum] = m;
let num = n − m * maxPowerOf2;
let p = 0;
let bitCount = 0;
while (num){
if (num & 1){
bitCount += 1;
A[p] = 1;
}
num >>= 1;
p += 1;
}
const min = m + bitCount;
let target = 1;
while (target < min)
target *= 2;
if (target > n)
return −1;
if (target == min)
return A.map((c, p) => [1 << Number(p), c]);
if (target == n)
return [n];
target = target − min;
let i = m ? maximum : p;
while (target && i > 0){
if (!A[i]){
i −= 1;
continue;
}
const max = Math.min(target, A[i]);
A[i] −= max;
A[i−1] += 2*max;
target −= max;
i −= 1;
}
return target ? −1 : A.map((c, p) => [1 << Number(p), c]);
};
console.log(permuteCombinations(11, 5)); 出力
そして、コンソールの出力は-
になります[ [ 1, 1 ], [ 2, 1 ], [ 4, 2 ], [ 8, 0 ], [ 16, 0 ], [ 32, 0 ] ]
-
JavaScriptで幅と画面サイズの比率(幅:高さ)に基づいて高さを見つける
問題 画面の幅を最初の引数として、アスペクト比(w:h)を2番目の引数として受け取るJavaScript関数を作成する必要があります。これらの2つの入力に基づいて、関数は画面の高さを返す必要があります。 例 以下はコードです- const ratio = '18:11'; const width = 2417; const findHeight = (ratio = '', width = 1) => { const [w, h] = ratio .split(':')
-
JavaScriptで素数の累乗と積として数を表す
問題 正の整数をとるJavaScript関数を作成する必要があります。私たちの関数は、この数を素数の累乗の合計として表す必要があります。 したがって、数値nの場合、関数は次のような文字列を返す必要があります- n = "(p1**n1)(p2**n2)...(pk**nk)" ここで、p1、p2、p3..pkは素数であり、n1、n2、.. nkはそれらの非負の累乗であり、**bは累乗bを表します。 例 以下はコードです- const isPrime = num => { for(let i = 2; i < num; i++)