Rosetta Code

Fraction reduction

Reduce sample fractions to lowest terms with Euclid's algorithm.

Intro View source
Source rosettacode/popular/fraction_reduction.vibe
# title: Fraction reduction
# source: https://rosettacode.org/wiki/Fraction_reduction
# category: Rosetta Code
# difficulty: Intro
# summary: Reduce sample fractions to lowest terms with Euclid's algorithm.
# tags: popular, math, fractions, gcd
# vibe: 0.2

def gcd(a, b)
  left = a.abs
  right = b.abs

  while right != 0
    remainder = left % right
    left = right
    right = remainder
  end

  left
end

def reduce_fraction(numerator, denominator)
  divisor = gcd(numerator, denominator)
  reduced_numerator = numerator / divisor
  reduced_denominator = denominator / divisor

  if reduced_denominator < 0
    reduced_numerator = -reduced_numerator
    reduced_denominator = -reduced_denominator
  end

  {
    numerator: reduced_numerator,
    denominator: reduced_denominator
  }
end

def run
  [
    { original: [42, 56], reduced: reduce_fraction(42, 56) },
    { original: [13, 39], reduced: reduce_fraction(13, 39) },
    { original: [-150, 100], reduced: reduce_fraction(-150, 100) }
  ]
end
Output
Press run to execute run from this example.
rosetta-code popular math fractions gcd browser-runner