From 08bf951fb7f9d976bb9f2d9ffd7376fab2b764cf Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Thu, 2 Jan 2020 22:19:39 +0100 Subject: Let abbrgen work in Docker --- modules/abbrgen/abbreviation_gen.cpp | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 modules/abbrgen/abbreviation_gen.cpp (limited to 'modules') diff --git a/modules/abbrgen/abbreviation_gen.cpp b/modules/abbrgen/abbreviation_gen.cpp new file mode 100644 index 0000000..708bfdf --- /dev/null +++ b/modules/abbrgen/abbreviation_gen.cpp @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +int main(int argc, char **argv) { + if (argc != 2 && argc != 3) { + cout << "Usage: " << argv[0] << " [number of answers]" << endl; + return 1; + } + + char *abbr = argv[1]; + int abbrlen = strlen(abbr); + transform(abbr, abbr+abbrlen, abbr, ::tolower); + for (int i = 0; i < abbrlen; i++) { + if (abbr[i] < 'a' || abbr[i] > 'z') { + cout << "Abbreviation cannot contain '" << abbr[i] << "'!" << endl; + return 1; + } + } + + struct timeval tv; + gettimeofday(&tv, NULL); + srand(1000000 * tv.tv_sec + tv.tv_usec); + int numanswers = 1; + if (argc == 3) { + numanswers = strtol(argv[2], nullptr, 10); + if (numanswers <= 0) return 0; + } + + vector dict[26]; + ifstream dictfile("/usr/share/dict/words"); + string line; + + while (getline(dictfile, line)) { + transform(line.begin(), line.end(), line.begin(), ::tolower); + if (line[0] >= 'a' && line[0] <= 'z' && all_of(line.begin(), line.end(), ::islower)) + dict[line[0] - 'a'].push_back(line); + } + + while (numanswers --> 0) { + for (int i = 0; i < abbrlen; i++) { + if (i > 0) cout << ' '; + size_t index = rand() % dict[abbr[i] - 'a'].size(); + cout << dict[abbr[i] - 'a'][index]; + } + cout << '\n'; + } + cout.flush(); + + return 0; +} -- cgit v1.2.3-70-g09d2