Asked at Jump Trading, Hudson River Trading
Theory: Concurrency From ScratchRead the problem, hints and solution here. The editor needs a bigger screen: open this page on a laptop to write and run your code.
xxx xxxxxx-xxxxxxxx xxxxxx-xxxxxxxx xxxx xx xxx xxxxxxxxx xxxx-xxxx
xxxxxxxxx xx xxxxxxx xxxxxxxxxxxxxx: xxxxxxx xxx xxxxxx (xxx xxxx xxxxxxx)
xxxxxx, xxxxxxx xxx xxxxxx (xxx xxxxxxxx) xxxx, xxx xxxxxxx xxxx xxxxx x
xxxx xx xxxxx x xxxxxxx. xxx xxx-xxxxxx xxxxxxxxxxx xx xxxx xxxxx x
xxxxxxx xxxxxxxxxxxxxx xxxxxxxxxx xxxx xxxx xxx xxxxxx xxxxxxx, xxx
xxxxxxxxxxxx xxx xx xx xxxx xxx xxxxxxx xxx xxxxxxxx xxxxxxxxxx
xxxxxxx/xxxxxxx xx xxxx xxxx xxxxxxxxx xxx::xxxxx.
xxxxxxxxx xxxxxxxx<x>, x xxxxxxx xxxx xxx xxx xxxxxxxx xxxxxx xxx xxx
xxxxxxxx xxxxxx:
xxxxxxxx xxxxxxxx(xxx::xxxx_x xxxxxxxx): xxxxxxxxx xxx xxxxxxx xxxx,
xxxx. xxx xxxx xxxx xx xxxx xx xxxx xxxxxxx xxxxxxxx xxxxxxxx.
xxxxxxxx >= x.xxxx xxx_xxxx(xxxxx x& xxxxx): xxxxxx xxxx xx xxx xxxxxxxx xxxxxx.
xxxxxxx xxx xxxxxxx xxxx, xx xxxxxxx xxxxx xxxxxxx xxxx xxxxxxx xxxx
xxx xxxx xx xxxx. xxxxx xxxxxx, xxxxx xxxxx.xxx::xxxxxxxx<x> xxx_xxx(): xxxxxx xxxx xx xxx xxxxxxxx xxxxxx.
xxxxxxx xxx xxxxxxx xxx xxxx, xx xxx::xxxxxxx xxxx xxxxx. xxxxx
xxxxxx, xxxxx xxxxx.xxxxx xx xxx xxxx:
xxx::xxxxxx<xxx::xxxx_x> xxxxxxx (xxxx xxx xxxx) xxxx
xxxxxx_xxxxx_xxxxxxx / xxxxxx_xxxxx_xxxxxxx (xxx xxxxxxx xxxxx x
xxxxxx xxxxx xxx xxx xxxxx). xx xxx_xxx xxxxxxxxxx: xxx xxxxx xx xx
xxxxx xxx xxxxxxx xxxxxxxxxx xxxxxxxxx xxxxxxxxxxxx.[]{ xxxxxxxx<xxx> xxxx(x); xxx::xxxxxx<xxx> xxx; xxx.xxxx_xxxx(xxxx.xxx_xxxx(x)); xxx.xxxx_xxxx(xxxx.xxx_xxxx(x)); xxx.xxxx_xxxx(xxxx.xxx_xxxx(x)); xxx.xxxx_xxxx(xxxx.xxx_xxx().xxxxx_xx(-x)); xxx.xxxx_xxxx(xxxx.xxx_xxxx(x)); xxx.xxxx_xxxx(xxxx.xxx_xxx().xxxxx_xx(-x)); xxx.xxxx_xxxx(xxxx.xxx_xxx().xxxxx_xx(-x)); xxx.xxxx_xxxx(xxxx.xxx_xxx().xxx_xxxxx()); xxxxxx xxx; }()
// [x, x, x, x, x, x, x, x] (xxxx xxxxxxx, xxxx xxxxxxxxx xxxx)
[]{
xxxxxxxx<xxxx xxxx> xxxx(xxxx);
xxx::xxxxxx<xxxx> xxxx{xxxxx};
xxx::xxxxxx<xxxx> xxxxxx{xxxxx};
xxx::xxxxxx xxxxxxxx([&] {
xxx (xxxx xxxx x = x; x < xxxxxx; ++x) {
xxxx xxxx xxxxx = x;
xxxxx (!xxxx.xxx_xxxx(x)) {
xx (++xxxxx > xxxxxxxxx) { xxxxxx.xxxxx(xxxx); xxxx.xxxxx(xxxx); xxxxxx; }
xxx::xxxx_xxxxxx::xxxxx();
}
}
xxxx.xxxxx(xxxx);
});
xxxx xxxx xxxxx = x, xxx = x, xxxxxxxxxx = x, xxxx = x;
xxxx xxxxxxx = [&](xxxx xxxx x) { xx (x != xxxx) ++xxxxxxxxxx; ++xxxx; ++xxxxx; xxx += x; };
xxx::xxxxxx xxxxxxxx([&] {
xxx (;;) {
xx (xxxx x = xxxx.xxx_xxx()) { xxxxxxx(*x); }
xxxx xx (xxxx.xxxx()) { xx (xxxx xxxx = xxxx.xxx_xxx()) xxxxxxx(*xxxx); xxxx xxxxx; }
xxxx xxx::xxxx_xxxxxx::xxxxx();
}
});
xxxxxxxx.xxxx();
xxxxxxxx.xxxx();
xxxxxx xxx::xxxxx<xxxx xxxx, xxxx xxxx, xxxx xxxx, xxxx>(xxxxx, xxx, xxxxxxxxxx, xxxxxx.xxxx());
}()
// (xxxxxx, xxxxxxxxxxxx, x, xxxxx) (xxx xxxx xxxxxx, xx xxxxx, xxxx xxxx)
xxxxxxxx xx xx (x^{xx}); xxx xxxxxx xxxxx xxxx (x xxxxx xx^x)
xxxxxxxxxx xxxxxx xxxxxxx xxx xxxx, xxxxxxxxx xxx xxx xx xxxxxxxx x
xxxxx xxxxx xxxx xxx xxx xxxxxxxx xx xxx xxxx.This problem is only available to subscribers.