difference = (a, b) => {
let ai = new Set(a.ingredients);
let bi = new Set(b.ingredients);
let removedItems = [];
let addedItems = [];
for (let item of ai) if (!bi.has(item)) addedItems.push(item);
for (let item of bi) if (!ai.has(item)) removedItems.push(item);
let changes = [];
const replacementCount = Math.min(addedItems.length, removedItems.length);
for (let i = 0; i < replacementCount; i++) {
const removed = removedItems.pop();
const added = addedItems.pop();
changes.push({ type: "replacement", removed, added });
}
for (let added of addedItems) {
changes.push({ type: "addition", added });
}
for (let removed of removedItems) {
changes.push({ type: "removal", removed });
}
return changes;
}