Skip to content

Instantly share code, notes, and snippets.

@AtharvaVaidya
Created February 22, 2017 05:20
Show Gist options
  • Save AtharvaVaidya/066c68cdc578f44201ecaef71e376dae to your computer and use it in GitHub Desktop.
Save AtharvaVaidya/066c68cdc578f44201ecaef71e376dae to your computer and use it in GitHub Desktop.
struct Fraction
{
var numerator: Int
var denominator: Int
init?(numerator: Int, denominator: Int)
{
if denominator == 0 { return nil }
self.numerator = numerator
self.denominator = denominator
}
static func +(lhs: Fraction, rhs: Fraction) -> Fraction
{
return lhs.add(fraction: rhs)
}
func add(fraction rightFraction: Fraction) -> Fraction
{
return Fraction(numerator: numerator * rightFraction.denominator + rightFraction.numerator * denominator, denominator: denominator * rightFraction.denominator)!
}
nonmutating func simplified() -> Fraction
{
let gcdOfNumeratorAndDenominator: Int = gcd(a: self.numerator, self.denominator)
return Fraction(numerator: self.numerator / gcdOfNumeratorAndDenominator, denominator: self.denominator / gcdOfNumeratorAndDenominator)!
}
mutating func simplify()
{
let gcdOfNumeratorAndDenominator: Int = gcd(a: self.numerator, self.denominator)
self.numerator /= gcdOfNumeratorAndDenominator
self.denominator /= gcdOfNumeratorAndDenominator
}
private func gcd(a: Int, _ b: Int) -> Int
{
var (a, b) = (a, b)
while b != 0
{
(a, b) = (b, a % b)
}
return a
}
}
extension Fraction: CustomStringConvertible
{
var description: String { return "\(numerator)/\(denominator)" }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment