From 5a68245703e570078eb08e53051137ef51074bb2 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 13 Sep 2026 21:18:23 +0300 Subject: [PATCH] Finalized the implementation --- Makefile | 2 +- device_generator.cpp | 15 +++++++++++++++ device_generator.h | 14 ++++++++++++++ generator.cpp | 34 ++++++++++++++++++++++++++++++++++ generator.h | 24 ++++++++++++++++++++++++ impl_generator.cpp | 25 +++++++++++++++++++++++++ impl_generator.h | 18 ++++++++++++++++++ input_parsing.cpp | 4 +++- lottery | Bin 6560 -> 25104 bytes main.cpp | 39 ++++++++++++++++++++++++++++++++++++++- mersenne_generator.cpp | 20 ++++++++++++++++++++ mersenne_generator.h | 17 +++++++++++++++++ 12 files changed, 209 insertions(+), 3 deletions(-) create mode 100644 device_generator.cpp create mode 100644 device_generator.h create mode 100644 generator.cpp create mode 100644 generator.h create mode 100644 impl_generator.cpp create mode 100644 impl_generator.h create mode 100644 mersenne_generator.cpp create mode 100644 mersenne_generator.h diff --git a/Makefile b/Makefile index 852ef48..8a3d954 100644 --- a/Makefile +++ b/Makefile @@ -5,4 +5,4 @@ compile: g++ *.cpp -O3 -c debug: - g++ *.cpp -g -std=c++17 -o calculator -lstdc++ -lm + g++ *.cpp -g -std=c++17 -o lottery -lstdc++ -lm diff --git a/device_generator.cpp b/device_generator.cpp new file mode 100644 index 0000000..58da4f3 --- /dev/null +++ b/device_generator.cpp @@ -0,0 +1,15 @@ +#include "device_generator.h" +#include + +DeviceGenerator::DeviceGenerator(int max_range, int num_entries): + ImplGenerator{num_entries}, + m_max_range{max_range}, m_num_entries{num_entries} +{} + +int DeviceGenerator::get_next_num_internal() +{ + std::random_device rd; + std::uniform_int_distribution dist(0, m_max_range); + + return dist(rd); +} diff --git a/device_generator.h b/device_generator.h new file mode 100644 index 0000000..9c0ba8a --- /dev/null +++ b/device_generator.h @@ -0,0 +1,14 @@ +#pragma once + +#include "impl_generator.h" + +class DeviceGenerator: public ImplGenerator +{ + public: + DeviceGenerator(int max_range, int num_entries); + int get_next_num_internal() override; + + private: + int m_max_range; + int m_num_entries; +}; \ No newline at end of file diff --git a/generator.cpp b/generator.cpp new file mode 100644 index 0000000..2220885 --- /dev/null +++ b/generator.cpp @@ -0,0 +1,34 @@ +#include "generator.h" +#include "impl_generator.h" +#include "input_parsing.h" +#include "mersenne_generator.h" +#include "device_generator.h" + +#include + + +Generator::Generator(const ProgramOptions& options): m_options{options} +{ + if (m_options.seed != std::nullopt) + { + impl = std::make_unique(*m_options.seed, m_options.max_range, + m_options.num_entries); + } + else + { + impl= std::make_unique(m_options.max_range, + m_options.num_entries); + } +} + +int Generator::get_next_num() +{ + if (impl->has_more_numbers()) + { + return impl->get_next_num(); + } + else + { + return NO_MORE_NUMBERS; + } +} \ No newline at end of file diff --git a/generator.h b/generator.h new file mode 100644 index 0000000..a520e5e --- /dev/null +++ b/generator.h @@ -0,0 +1,24 @@ +#pragma once + +#include "impl_generator.h" + +#include + +class ProgramOptions; + +class Generator +{ + public: + + static constexpr int NO_MORE_NUMBERS = -1; + + Generator(const ProgramOptions& options); + ~Generator() = default; + + int get_next_num(); + + private: + const ProgramOptions& m_options; + std::unique_ptr impl = nullptr; + +}; \ No newline at end of file diff --git a/impl_generator.cpp b/impl_generator.cpp new file mode 100644 index 0000000..c19234f --- /dev/null +++ b/impl_generator.cpp @@ -0,0 +1,25 @@ +#include "impl_generator.h" + +ImplGenerator::ImplGenerator(int nr_entries) + : m_nr_entries{nr_entries} +{} + +int ImplGenerator::get_next_num() +{ + int num; + do + { + num = get_next_num_internal(); + } + while (already_generated_numbers.count(num) > 0); + + internal_counter++; + + return num; +} + + +bool ImplGenerator::has_more_numbers() +{ + return internal_counter < m_nr_entries; +} \ No newline at end of file diff --git a/impl_generator.h b/impl_generator.h new file mode 100644 index 0000000..7065f7e --- /dev/null +++ b/impl_generator.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +class ImplGenerator +{ + public: + ImplGenerator(int nr_entries); + bool has_more_numbers(); + int get_next_num(); + + private: + int m_nr_entries; + int internal_counter = 0; + std::unordered_set already_generated_numbers; + + virtual int get_next_num_internal() = 0; +}; \ No newline at end of file diff --git a/input_parsing.cpp b/input_parsing.cpp index dfde2ca..102a71c 100644 --- a/input_parsing.cpp +++ b/input_parsing.cpp @@ -45,5 +45,7 @@ ProgramOptions get_params(int argc, char *argv[]) } } - return {max_range, num_entries, is_seed_specified ? std::optional(seed): std::nullopt}; + using return_type = std::optional; + + return {max_range, num_entries, is_seed_specified ? return_type(seed): std::nullopt}; } diff --git a/lottery b/lottery index effa46475026fe0a265a70c395364c054fa63834..296bfafb0cba4a6c7e384e394c94037fbaeffd70 100755 GIT binary patch literal 25104 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 literal 6560 zcmbtYeT-CB6~D7zY;j>{+ft#0vazhDRfbvUhOGrN!!GTcW)@eLRZFeIurs?my7SSQ zHw`oxr*2Rt!@{Q4KTM1vsr^TdAsRnY8?#8eVBEIgSCFcq2sj(G0j)r^@cfgzIO$PH$s7p_CIfqJ*2T?V*IwgetGY6V4tN>t%dG z1MF0&8%L0-g^r)8`{vTaoLHdIk?Xh&S2nZ3(Fg9Ms zrJh^Qn=u-~d(D&GsD8#t{yOEfl~Aeuh1Z{pzgu0powV_!I8E~W1mf`&u;#sy0nW3) z&x=mm*^N+%NBPnfW1LQxGES(BPjGr1;U$hxiMJ-7%dQzq?2PY<53L!C`EqHcNJsvt z<{!_*Q=0~Q(Q_KfY3k|md3ej9!u(H(tz%L9PQF~PWW{LFJaV#auUJ((A4Ip7pVg3i z)iU+6Oguv8RqVm_m_KbSUbSWo;uH8IOZB?FKUe8@E3z{dPTLtNITweG*OBS0Kd%s-Qv#9Bj@df*vCK?Yk z9JJFTn_gU}VCN^hezpt35m@pQ!&Qd<4N&z2>y7M|BCC}C1d=h=8KDF+>Pu9jpF&>r-Gjh4hFXk^c$t$hl;-m6|V$~ zmQlQF6n|%wPL{ug>V%3f8+%`G-Fpym!o}nXV`9akS<4DftZo7c-TOy#b?C_T`q21w zPiXwN>S8?t^%kvg@k+ROw(}R(ZN^tl8RJvUAR+6O{5jxXDcksIkpCV(-PqTGr!ZVf zo+z7m=t8AI<-{v@fGr*?-vDusc4mgg8!oNrKpDg9man3rKTe(SgDct~GZ)V_Kg#yk zF^yza*!T=R0p?Q1oQK?8Sj8N*YdK(7bK7)d9L64FV&m}NEX$baihwOYWuZU5v5uZp z^A7Z;;6s@$F#9oj`YzaqI|?mNtLki6=b9_@3il%*f^Z z<-WaF%%xi??HC?FI30XKizm5GLKPe{1D~1cM8>*=(-2}i=G+lM5xph8lP^4JpcE? z#_tfk_1P&{ym5i%dgE!3zI(5>K6|A3NdC^y5v%^9tAIV$wj0+%)@%7I^ssWGT=YgoY#U)~ zJs(^4et$;^K6@4^3{Mh%6w{<; ze^ur2gs9n{SNVG4zhB|4j%lPi+`6*Y`5ssuKhyXhY5eypJUsnh4N2Hdoaj6ah1yz& zsDE1)R&=}3=T$9n`jtDaGt`bZIMg;mSN0dTIN}Qbe&)}xJ(Y^u4*RYYm5N$7uRpS0 zNE}&f53wO{8!P^0-QCCjc^j(&wpXS8dBYixpY=>szjWA6C$cZqLk+&PRgi*KyU=EmD`3 z5m#+5piB00-jMp7v*m5-gjR>QSbj>AuS7mn=QEmofaS+E`M24RoRcIj?FYQ7rE;zW zYqwRn*OJq*2cMXCv_p{G3O|Q=yaBd&-j*}tBFAj`V&&!MPgJj>^8xrd#4n(|cY>?| z<7yWp7p47Lt$d=kyhUZSd}t3>YyYf#i4-=p8Rbi*&A2a(0=k`ebZV{j86jSOd_$#`Tm1`FYo54&e* zvB$=pw%W>Po8#uo#fMZSn`|@{ODAJdGpc-_8-j}=Go8&L7bd$?(PRSlBWXCo&2fWF zvgt@B8jB@TBg(fk2gFc1nY2fSF__Vv%9k5O)=tl%Dv`?MO~A4_z-7OZHl+Fo}NDVWW$gv^Uv9x^vaXd24PKFO8k!;)? z$w#xXNatFA7Yt&#bYv8@8jFLm3mSoqb7bKeNTi0-P*#v@?_a;p&3E3vzVls=I#p=r zdK*e{v_ZQ>&S;!0$I?U5F%{X~=^u&P6^<^c z_#eA?4eSk#tZVcA=Mnd0?{2hS(po3@`Ofcx(U+|i8ot2mq|kN&GL`R@i0QjPYpTST zbynyk8&ZyxyWnNL?}qFO_6&lTbyjFQ^wcD8!8=l=HlagnxZq`77E1o930|iLbTnka z%RWG806KTm>)#J0`4qhDYlO-;C9dQz^6iYLaZo$MhC+APQYQv|igkPpGRjHf2Y5px zl$S&HQmumsvKqd?c%g5LAybJj;ysL)eU|($EU+NM&y(1DrNi_~8eZ1vOS}=(*AyMU zPs7VP=3VFnxEcO{hWGP2=x035ue<5-zX~PQzcPNt7Z@LKgVERV-++wpQYP6K$bU+C ze#MPm|HB&o+I^1YHIA>_>--NjyyE|<_Dc<&p0AF7QNw!~@1>6d+RgAsVMDc(@yotW z{_o0vT-nb{eDOO2th;{lpUd9@1)A79+&lS`P`L4Oj_79m&FX)eV@UoPK8MJE?MYE^ z0u;;LX2DR7VkY}h!B_r&Ge{rLn~;-FKkJ1Ep7#6hCh>({g;Ks9Zo7Rv{xU0RouIRo l#Fy_E9Xup=H$KzqaBUKZl^UyVfuI)tX`bM3Y5 -#include +#include int main(int argc, char *argv[]) { auto parameters = get_params(argc, argv); + Generator gen(parameters); + + std::cout << "Output:\n"; + int num = gen.get_next_num(); + std::vector correct_guesses; + double accuracy = 1.0; + + while(num != gen.NO_MORE_NUMBERS) + { + int user_guess; + std::cout << "What's your guess (max= " << parameters.max_range <<"): "; + std::cin >> user_guess; + + while (std::cin.fail() || user_guess < 0) + { + std::cin.clear(); + + std::cout << "Invalid number introduced\n"; + std::cin >> user_guess; + } + + std::cout << "Next\n"; + correct_guesses.emplace_back(num); + + accuracy -= abs(user_guess - num) / 100.; + num = gen.get_next_num(); + } + + std::cout << "Final results:\nCorrect guesses: "; + for(int v: correct_guesses) + { + std::cout << v << ", "; + } + std::cout << std::endl; + + std::cout << "Accuracy: " << accuracy << "%\n"; return 0; } diff --git a/mersenne_generator.cpp b/mersenne_generator.cpp new file mode 100644 index 0000000..2e08e83 --- /dev/null +++ b/mersenne_generator.cpp @@ -0,0 +1,20 @@ +#include "mersenne_generator.h" +#include + +MersenneGenerator::MersenneGenerator(int seed, int max_range, int nr_entries) + : ImplGenerator{nr_entries} +{ + m_seed = seed; + m_max_range = max_range; + m_nr_entries = nr_entries; +} + +int MersenneGenerator::get_next_num_internal() +{ + std::mt19937 gen(m_seed); // mersenne_twister_engine seeded with rd() + std::uniform_int_distribution<> distrib(0, m_max_range); + + internal_counter++; + + return distrib(gen); +} \ No newline at end of file diff --git a/mersenne_generator.h b/mersenne_generator.h new file mode 100644 index 0000000..957b425 --- /dev/null +++ b/mersenne_generator.h @@ -0,0 +1,17 @@ +#pragma once + +#include "impl_generator.h" + +class MersenneGenerator: public ImplGenerator +{ + public: + MersenneGenerator(int seed, int max_range, int nr_entries); + int get_next_num_internal() override; + + private: + int m_seed; + int m_max_range; + int m_nr_entries; + + int internal_counter = 0; +}; \ No newline at end of file