diff --git a/poincare/src/simplification/Makefile b/poincare/src/simplification/Makefile index 4ccdddae9..efc48085b 100644 --- a/poincare/src/simplification/Makefile +++ b/poincare/src/simplification/Makefile @@ -23,6 +23,7 @@ objs += $(addprefix $(prefix)/,\ transform/remove_parenthesis_transform.o \ transform/subtraction_transform.o \ transform/integer_addition_transform.o \ + transform/integer_fraction_reduction_transform.o \ transform/integer_multiplication_transform.o \ transform/merge_dynamic_hierarchy_transform.o \ ) diff --git a/poincare/src/simplification/transform/integer_fraction_reduction_transform.cpp b/poincare/src/simplification/transform/integer_fraction_reduction_transform.cpp new file mode 100644 index 000000000..8d3a1c761 --- /dev/null +++ b/poincare/src/simplification/transform/integer_fraction_reduction_transform.cpp @@ -0,0 +1,23 @@ +#include "transform.h" +#include +#include +#include +#include +#include + +bool Poincare::Simplification::IntegerFractionReductionTransform(Expression * captures[]) { + Multiplication * m = static_cast(captures[0]); + Power * p = static_cast(captures[2]); + Integer * i1 = (Integer *)(captures[1]); + Integer * i2 = (Integer *)(captures[3]); + Integer gcd = Arithmetic::GCD(i1, i2); + Integer one(1); + if (gcd.compareTo(&one) == 0) { + return false; + } + Integer * r1 = new Integer(Integer::Division(*i1, gcd).quotient); + Integer * r2 = new Integer(Integer::Division(*i2, gcd).quotient); + m->replaceOperand(i1, r1, true); + p->replaceOperand(i2, r2, true); + return true; +} diff --git a/poincare/src/simplification/transform/transform.h b/poincare/src/simplification/transform/transform.h index fb54c4de8..28ebd0078 100644 --- a/poincare/src/simplification/transform/transform.h +++ b/poincare/src/simplification/transform/transform.h @@ -16,6 +16,7 @@ bool MergeDynamicHierarchyTransform(Expression * captures[]); bool IntegerAdditionTransform(Expression * captures[]); bool IntegerMultiplicationTransform(Expression * captures[]); bool PowerPowerTransform(Expression * captures[]); +bool IntegerFractionReductionTransform(Expression * captures[]); } }