パーツの数と各パーツが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++)