Initial code
This commit is contained in:
parent
0a9522ba96
commit
d6e506eaeb
2
.gitignore
vendored
2
.gitignore
vendored
@ -32,3 +32,5 @@
|
|||||||
*.out
|
*.out
|
||||||
*.app
|
*.app
|
||||||
|
|
||||||
|
# Build files
|
||||||
|
build/*
|
||||||
|
4
Makefile
Normal file
4
Makefile
Normal 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
3
include/generate.h
Normal 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
34
src/generate.cc
Normal 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
58
src/main.cc
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user