Skip to content

Instantly share code, notes, and snippets.

@webxoss
Last active July 30, 2017 14:38
Show Gist options
  • Save webxoss/4a0cd5b046900abb33085d738c3848bb to your computer and use it in GitHub Desktop.
Save webxoss/4a0cd5b046900abb33085d738c3848bb to your computer and use it in GitHub Desktop.
function logArray(arr) {
arr.forEach((value, index) => console.log(`${index.toString(2).padStart(Math.log2(arr.length), '0')}: ${value}`))
}
function newArray(len) {
if (typeof Uint8Array !== 'undefined') {
return new Uint8Array(len)
}
return new Array(len)
}
function checkEner(items, requirements) {
var n = requirements.length
var len = 1 << n
var arr = newArray(len)
for (var i = 0; i < len; i++) {
// 第 i 条不等式
var filters = []
for (var j = 0; j < n; j++) {
if (i & (1 << j)) {
filters.push(requirements[j].filter)
}
}
for (var j = 0; j < items.length; j++) {
var item = items[j]
if (filters.some(function (filter) {
return filter(item)
})) {
arr[i]++
}
}
}
logArray(arr)
for (var i = 0; i < len; i++) {
let amount = 0
for (var j = 0; j < n; j++) {
if (i & (1 << j)) {
amount += requirements[j].count
}
}
if (arr[i] < amount) {
return false
}
}
return true
}
var items = [
'红蓝',
'红',
'蓝',
'蓝',
'蓝',
'蓝',
]
var requirements = [
{
count: 1,
filter: item => item.includes('红'),
},
{
count: 2,
filter: item => item.includes('蓝'),
},
]
checkEner(items, requirements)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment