Initial code

This commit is contained in:
datalore 2024-04-14 22:46:40 +02:00
parent 0a9522ba96
commit d6e506eaeb
5 changed files with 101 additions and 0 deletions

2
.gitignore vendored
View File

@ -32,3 +32,5 @@
*.out *.out
*.app *.app
# Build files
build/*

4
Makefile Normal file
View File

@ -0,0 +1,4 @@
build/rug:src/*.cc
g++ -o build/rug src/*.cc -Iinclude
clean:
rm build/rug

3
include/generate.h Normal file
View File

@ -0,0 +1,3 @@
#pragma once
void generate(short min_char_count, short max_char_count, short min_num_count, short max_num_count, int count);

34
src/generate.cc Normal file
View File

@ -0,0 +1,34 @@
#include <iostream>
#include <random>
#include <chrono>
void generate(short min_char_count, short max_char_count, short min_num_count, short max_num_count, int count)
{
std::mt19937 engine(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_int_distribution<short> char_count_distribution(min_char_count, max_char_count);
std::uniform_int_distribution<char> char_distribution('a', 'z');
std::uniform_int_distribution<char> num_distribution(0, 9);
std::uniform_int_distribution<short> num_count_distribution(min_num_count, max_num_count);
for(int j = 0; j < count; ++j)
{
short char_count = char_count_distribution(engine);
short num_count = num_count_distribution(engine);
char_count -= num_count;
for(short i = 0; i < char_count; ++i)
{
std::cout << char_distribution(engine);
}
for(short i = 0; i < num_count; ++i)
{
char c = num_distribution(engine) + 0x30; // convert to ascii
std::cout << c;
}
std::cout << std::endl;
}
}

58
src/main.cc Normal file
View File

@ -0,0 +1,58 @@
#include <iostream>
#include <cxxopts.hpp>
#include <generate.h>
int main(int argc, char** argv)
{
cxxopts::Options options("rug", "Random username generator");
options.add_options()
("min-char", "The minimum number of characters (including numbers)", cxxopts::value<short>()->default_value("8"))
("max-char", "The maximum number of characters (including numbers)", cxxopts::value<short>()->default_value("10"))
("min-num", "The minimum number of digits", cxxopts::value<short>()->default_value("0"))
("max-num", "The maximum number of digits", cxxopts::value<short>()->default_value("4"))
("count", "How many usernames should be generated", cxxopts::value<int>()->default_value("1"))
("h,help", "Print help")
;
auto result = options.parse(argc, argv);
if(result.count("help"))
{
std::cout << options.help() << std::endl;
return 0;
}
short min_char = result["min-char"].as<short>();
short max_char = result["max-char"].as<short>();
short min_num = result["min-num"].as<short>();
short max_num = result["max-num"].as<short>();
int count = result["count"].as<int>();
if(min_char > max_char)
{
std::cerr << "ERROR: min-char cannot be greater than max-char" << std::endl << std::endl << options.help() << std::endl;
return -1;
}
if(min_num > max_num)
{
std::cerr << "ERROR: min-num cannot be greater than max-num" << std::endl << std::endl << options.help() << std::endl;
return -1;
}
if(max_num > min_char)
{
std::cerr << "ERROR: max-num cannot be greater than min-char" << std::endl << std::endl << options.help() << std::endl;
return -1;
}
if(min_char < 0 || max_char < 0 || min_num < 0 || max_num < 0 || count < 0)
{
std::cerr << "ERROR: negative argument" << std::endl << std::endl << options.help() << std::endl;
return -1;
}
generate(min_char, max_char, min_num, max_num, count);
return 0;
}