1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <iostream> template<class T, class Op> struct bound_op : Op{ T const& lhs; mutable bool val; bound_op(T const& lhs, bool val) : lhs(lhs), val(val) {} template<class U, class Op2> bound_op const& operator()(U const& rhs, Op2 op) const{ val = op.apply(val, this->apply(lhs, rhs)); return *this; } explicit operator bool() const{ return val; } }; template<class T> struct binding_op{ T const& lhs; }; template<class T> binding_op<T> chain(T const& lhs){ return { lhs }; } struct equal_to{ template<class T, class U> bool apply(T const& lhs, U const& rhs) const{ return lhs == rhs; } }; struct not_equal_to{ template<class T, class U> bool apply(T const& lhs, U const& rhs) const{ return lhs != rhs; } }; struct logical_or{ template<class T, class U> bool apply(T const& lhs, U const& rhs) const{ return lhs || rhs; } };struct logical_and{ template<class T, class U> bool apply(T const& lhs, U const& rhs) const{ return lhs && rhs; } }; template<class T, class U> bound_op<T, not_equal_to> operator!=(binding_op<T> const& bop, U const& rhs){ return { bop.lhs, bop.lhs != rhs }; } template<class T, class U> bound_op<T, equal_to> operator==(binding_op<T> const& bop, U const& rhs){ return { bop.lhs, bop.lhs == rhs }; } template<class T, class Op, class U> bound_op<T, Op> operator||(bound_op<T, Op> const& lhs, U const& rhs){ return lhs(rhs, logical_or()); } template<class T, class Op, class U> bound_op<T, Op> operator&&(bound_op<T, Op> const& lhs, U const& rhs){ return lhs(rhs, logical_and()); } int main(){ int n = 5; if(chain(n) != 1 && 2 && 3 && 4 && 0 && 5) std::cout << "Yes - not any of 0..5!\n"; if(chain(n) == 1 || 2 || 3 || 4 || 0 || 5) std::cout << "Yes - one of 0..5!\n"; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgT3A+CnN0cnVjdCBib3VuZF9vcCA6IE9wewogIFQgY29uc3QmIGxoczsKICBtdXRhYmxlIGJvb2wgdmFsOwogIAogIGJvdW5kX29wKFQgY29uc3QmIGxocywgYm9vbCB2YWwpCiAgICA6IGxocyhsaHMpLCB2YWwodmFsKSB7fQogIAogIHRlbXBsYXRlPGNsYXNzIFUsIGNsYXNzIE9wMj4KICBib3VuZF9vcCBjb25zdCYgb3BlcmF0b3IoKShVIGNvbnN0JiByaHMsIE9wMiBvcCkgY29uc3R7CiAgICB2YWwgPSBvcC5hcHBseSh2YWwsIHRoaXMtPmFwcGx5KGxocywgcmhzKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIAogIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdHsKICAgIHJldHVybiB2YWw7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IGJpbmRpbmdfb3B7CiAgVCBjb25zdCYgbGhzOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KYmluZGluZ19vcDxUPiBjaGFpbihUIGNvbnN0JiBsaHMpewogIHJldHVybiB7IGxocyB9Owp9CgpzdHJ1Y3QgZXF1YWxfdG97CiAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KICBib29sIGFwcGx5KFQgY29uc3QmIGxocywgVSBjb25zdCYgcmhzKSBjb25zdHsKICAgIHJldHVybiBsaHMgPT0gcmhzOwogIH0KfTsKCnN0cnVjdCBub3RfZXF1YWxfdG97CiAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KICBib29sIGFwcGx5KFQgY29uc3QmIGxocywgVSBjb25zdCYgcmhzKSBjb25zdHsKICAgIHJldHVybiBsaHMgIT0gcmhzOwogIH0KfTsKCnN0cnVjdCBsb2dpY2FsX29yewogIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+CiAgYm9vbCBhcHBseShUIGNvbnN0JiBsaHMsIFUgY29uc3QmIHJocykgY29uc3R7CiAgICByZXR1cm4gbGhzIHx8IHJoczsKICB9Cn07c3RydWN0IGxvZ2ljYWxfYW5kewogIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+CiAgYm9vbCBhcHBseShUIGNvbnN0JiBsaHMsIFUgY29uc3QmIHJocykgY29uc3R7CiAgICByZXR1cm4gbGhzICYmIHJoczsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgpib3VuZF9vcDxULCBub3RfZXF1YWxfdG8+IG9wZXJhdG9yIT0oYmluZGluZ19vcDxUPiBjb25zdCYgYm9wLCBVIGNvbnN0JiByaHMpewogIHJldHVybiB7IGJvcC5saHMsIGJvcC5saHMgIT0gcmhzIH07Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+CmJvdW5kX29wPFQsIGVxdWFsX3RvPiBvcGVyYXRvcj09KGJpbmRpbmdfb3A8VD4gY29uc3QmIGJvcCwgVSBjb25zdCYgcmhzKXsKICByZXR1cm4geyBib3AubGhzLCBib3AubGhzID09IHJocyB9Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBPcCwgY2xhc3MgVT4KYm91bmRfb3A8VCwgT3A+IG9wZXJhdG9yfHwoYm91bmRfb3A8VCwgT3A+IGNvbnN0JiBsaHMsIFUgY29uc3QmIHJocyl7CiAgcmV0dXJuIGxocyhyaHMsIGxvZ2ljYWxfb3IoKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wLCBjbGFzcyBVPgpib3VuZF9vcDxULCBPcD4gb3BlcmF0b3ImJihib3VuZF9vcDxULCBPcD4gY29uc3QmIGxocywgVSBjb25zdCYgcmhzKXsKICByZXR1cm4gbGhzKHJocywgbG9naWNhbF9hbmQoKSk7Cn0KCmludCBtYWluKCl7CiAgaW50IG4gPSA1OwogIGlmKGNoYWluKG4pICE9IDEgJiYgMiAmJiAzICYmIDQgJiYgMCAmJiA1KQogICBzdGQ6OmNvdXQgPDwgIlllcyAtIG5vdCBhbnkgb2YgMC4uNSFcbiI7CiAgaWYoY2hhaW4obikgPT0gMSB8fCAyIHx8IDMgfHwgNCB8fCAwIHx8IDUpCiAgIHN0ZDo6Y291dCA8PCAiWWVzIC0gb25lIG9mIDAuLjUhXG4iOwp9
-
upload with new input
-
result: Success time: 0s memory: 2828 kB returned value: 0
Yes - one of 0..5!


