diff options
author | Vincent Ambo <tazjin@google.com> | 2020-05-08T17·55+0100 |
---|---|---|
committer | Vincent Ambo <tazjin@google.com> | 2020-05-08T17·55+0100 |
commit | e33627f960c767c7408a4885a0061ade2703c9f9 (patch) | |
tree | 781e936efd78f7856ef33dcedb5b98d7789c9fd8 /fun/dt/dt.cc | |
parent | 28a36a2b70e31f9b8bf90085cf1b70fe038e9ff6 (diff) |
feat(fun/dt): Implement useful utility r/707
Diffstat (limited to 'fun/dt/dt.cc')
-rw-r--r-- | fun/dt/dt.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/fun/dt/dt.cc b/fun/dt/dt.cc new file mode 100644 index 000000000000..895dc34051da --- /dev/null +++ b/fun/dt/dt.cc @@ -0,0 +1,56 @@ +#include <iostream> + +#include "absl/flags/flag.h" +#include "absl/flags/parse.h" +#include "absl/hash/hash.h" +#include "absl/time/time.h" +#include "absl/time/clock.h" +#include "absl/strings/str_cat.h" +#include "farmhash.h" + +ABSL_FLAG(std::string, one, "", "first word"); +ABSL_FLAG(std::string, two, "", "second word"); +ABSL_FLAG(int, range, 100, "operating range"); + +void which(std::string one, std::string two) { + if (util::Fingerprint64(one) > util::Fingerprint64(two)) { + std::cout << one << std::endl; + } else { + std::cout << two << std::endl; + } +} + +std::string decide(std::string one, std::string two) { + auto date = absl::FormatTime("%Y%m%d", absl::Now(), absl::UTCTimeZone()); + auto base = util::Fingerprint64(absl::StrCat(date, one, two)) + % (absl::GetFlag(FLAGS_range) + 1); + + if (base % 10 == 0) { + return "c2"; + } else if (base % 9 == 0) { + which(one, two); + return "c1"; + } else if (base % 8 == 0) { + return "e2"; + } else if (base % 7 == 0) { + which(one, two); + return "e1"; + } else if (base % 3 == 0) { + return "skip"; + } + + return "nope"; +} + +int main(int argc, char *argv[]) { + absl::ParseCommandLine(argc, argv); + auto one = absl::GetFlag(FLAGS_one); + auto two = absl::GetFlag(FLAGS_two); + + if (one.empty() || two.empty()) { + std::cerr << "both are required!" << std::endl; + return 1; + } + + std::cout << decide(one, two) << std::endl; +} |