/** * Revision to PR #35 where I implemented bullshit thinking of * new breakthrough :D */ class TwoStacks { constructor(capacity) { this.data = []; this.top1 = -1; this.top2 = capacity; this.overflow = new Error('Overflow: Stack is full'); this.capacity = capacity; } push1(value) { if (this.top1 < this.top2 - 1) { this.top1 += 1; this.data[this.top1] = value; } else { throw this.overflow; } } push2(value) { if (this.top1 < this.top2 - 1) { this.top2 -= 1; this.data[this.top2] = value; } else { throw this.overflow; } } pop1() { if (this.top1 >= 0) { const item = this.data[this.top1]; delete this.data[this.top1]; this.top1 -= 1; return item; } return -1; } pop2() { if (this.top2 < this.capacity) { const item = this.data[this.top2]; delete this.data[this.top2]; this.top2 += 1; return item; } return -1; } } module.exports = TwoStacks; /** Test cases */ /* const s = new TwoStacks(4); s.push1('a'); console.log(s.data); s.push2('a2'); console.log(s.data); s.push1('b'); console.log(s.data); s.push2('b2'); console.log(s.data); s.push2('d2'); console.log(s.data); s.push2('c23'); console.log(s.data); console.log(s.pop2()); console.log(s.data); console.log(s.pop1()); console.log(s.data); */