aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 5d7858f..143816a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -14,9 +14,42 @@
* Description: Entrypoint
*/
+#include <cstdint>
#include <cstdio>
#include <raylib.h>
+typedef uint64_t word_t;
+
+struct Fraction
+{
+ word_t numerator, denominator;
+ bool is_simplified;
+
+ Fraction(word_t numerator = 0, word_t denominator = 1,
+ bool is_simplified = false)
+ : numerator{numerator}, denominator{denominator},
+ is_simplified{is_simplified}
+ {
+ }
+
+ void simplify(void)
+ {
+ // No-Op if already simplified
+ if (is_simplified)
+ return;
+ word_t a = numerator < denominator ? numerator : denominator,
+ b = numerator < denominator ? denominator : numerator;
+ // Euclidean algorithm
+ for (word_t r = b % a; r != 0; b = a, a = r, r = b % a)
+ continue;
+ // a will be the gcd
+ numerator /= a;
+ denominator /= a;
+ // Ensure this is a noop after this
+ is_simplified = true;
+ }
+};
+
int main(void)
{
puts("Hello, world!");