Skip to content

Commit

Permalink
fix: Exchange numerator and denominator (#182)
Browse files Browse the repository at this point in the history
The first argument to Rational.new is numerator.
The second argument is denominator.

resolves #181
  • Loading branch information
keiravillekode authored Dec 26, 2023
1 parent 1cf52be commit 1a22420
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
1 change: 1 addition & 0 deletions exercises/practice/rational-numbers/.meta/config.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"authors": ["m-charlton"],
"contributors": ["keiravillekode"],
"files": {
"solution": ["rational-numbers.v"],
"test": ["run_test.v"],
Expand Down
30 changes: 15 additions & 15 deletions exercises/practice/rational-numbers/.meta/example.v
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,45 @@ module main
import math { gcd, pow, powi, signi }

struct Rational {
denominator i64
numerator i64
denominator i64
}

// a/b -> b/a
fn (r Rational) invert() Rational {
return Rational.new(r.numerator, r.denominator)
return Rational.new(r.denominator, r.numerator)
}

// a/b -> -a/b
// -a/b -> a/b
fn (r Rational) negate() Rational {
return Rational.new(-1 * r.denominator, r.numerator)
return Rational.new(-1 * r.numerator, r.denominator)
}

// build a new Rational number
pub fn Rational.new(denominator i64, numerator i64) Rational {
assert numerator != 0
pub fn Rational.new(numerator i64, denominator i64) Rational {
assert denominator != 0

cmn_div := gcd(denominator, numerator)
cmn_div := gcd(numerator, denominator)

sign := if signi(denominator) == -1 || signi(numerator) == -1 {
sign := if signi(numerator) == -1 || signi(denominator) == -1 {
-1
} else {
1
}

return Rational{sign * math.abs(denominator) / cmn_div, math.abs(numerator) / cmn_div}
return Rational{sign * math.abs(numerator) / cmn_div, math.abs(denominator) / cmn_div}
}

// a/b -> a/b
// -a/b -> a/b
pub fn (r Rational) abs() Rational {
return Rational.new(math.abs(r.denominator), math.abs(r.numerator))
return Rational.new(math.abs(r.numerator), math.abs(r.denominator))
}

pub fn (r Rational) add(other Rational) Rational {
return Rational.new(r.denominator * other.numerator + other.denominator * r.numerator,
r.numerator * other.numerator)
return Rational.new(r.numerator * other.denominator + other.numerator * r.denominator,
r.denominator * other.denominator)
}

pub fn (r Rational) div(other Rational) Rational {
Expand All @@ -51,7 +51,7 @@ pub fn (r Rational) div(other Rational) Rational {
// r^n
pub fn (r Rational) exprational(n i64) Rational {
n_pos := math.abs(n)
result := Rational.new(powi(r.denominator, n_pos), powi(r.numerator, n_pos))
result := Rational.new(powi(r.numerator, n_pos), powi(r.denominator, n_pos))

return match signi(n) {
1 { result }
Expand All @@ -61,15 +61,15 @@ pub fn (r Rational) exprational(n i64) Rational {

// n^r
pub fn (r Rational) expreal(n i64) f64 {
return pow(n, f64(r.denominator) / f64(r.numerator))
return pow(n, f64(r.numerator) / f64(r.denominator))
}

pub fn (r Rational) mul(other Rational) Rational {
return Rational.new(r.denominator * other.denominator, r.numerator * other.numerator)
return Rational.new(r.numerator * other.numerator, r.denominator * other.denominator)
}

pub fn (r Rational) reduce() Rational {
return Rational.new(r.denominator, r.numerator)
return Rational.new(r.numerator, r.denominator)
}

pub fn (r Rational) sub(other Rational) Rational {
Expand Down
2 changes: 1 addition & 1 deletion exercises/practice/rational-numbers/rational-numbers.v
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ struct Rational {
}

// build a new Rational number
pub fn Rational.new(denominator i64, numerator i64) Rational {
pub fn Rational.new(numerator i64, denominator i64) Rational {
}

pub fn (r Rational) abs() Rational {
Expand Down

0 comments on commit 1a22420

Please sign in to comment.