so mamy things...
This commit is contained in:
1 parent
f7a8d416c1
commit
78d50d9a6d
24 files changed
+516
-173
No files matched your search
@@ -0,0 +1,80 @@
|
||||
define ["app", "angularAMD", "lodash"], (app, angularAMD, _) ->
|
||||
|
||||
app.service "rationals", () ->
|
||||
service =
|
||||
getNominator: (rat) ->
|
||||
if _.contains(rat, "/")
|
||||
return Number(rat.substr(0, rat.indexOf("/")))
|
||||
Number(rat)
|
||||
|
||||
getDenominator: (rat) ->
|
||||
if _.contains(rat, "/")
|
||||
return Number(rat.substr(rat.indexOf("/") + 1))
|
||||
1
|
||||
|
||||
getNomDenom: (rat) ->
|
||||
return [service.getNominator(rat), service.getDenominator(rat)]
|
||||
|
||||
gcd: (a, b) ->
|
||||
if b == 0
|
||||
return a
|
||||
return service.gcd(b, a % b)
|
||||
|
||||
lcm: (a, b) ->
|
||||
return a * b / service.gcd(a, b)
|
||||
|
||||
changeDenominator: (rat, newDenom) ->
|
||||
[nom, denom] = service.getNomDenom(rat)
|
||||
return service.newRat( nom * newDenom / denom, newDenom)
|
||||
|
||||
add: (rat1, rat2) ->
|
||||
[nom, denom] = service.getNomDenom(rat2)
|
||||
[nNom, nDenom] = service.getNomDenom(rat1)
|
||||
gcd = service.gcd(nDenom, denom)
|
||||
|
||||
rNom = nom*nDenom + nNom * denom
|
||||
rDenom = denom * nDenom
|
||||
return service.newRat(rNom/gcd , rDenom/gcd)
|
||||
|
||||
minus: (rat1, rat2) ->
|
||||
return service.add(rat1, service.opposite(rat2))
|
||||
|
||||
reduce: (rat) ->
|
||||
[nom, denom] = service.getNomDenom(rat)
|
||||
gcd = service.gcd(nom, denom)
|
||||
return service.newRat(nom/gcd, denom/gcd)
|
||||
|
||||
opposite: (rat) ->
|
||||
[nom, denom] = service.getNomDenom(rat)
|
||||
return service.newRat(-nom, denom)
|
||||
|
||||
|
||||
sum: (rats...) ->
|
||||
ret = "0/1"
|
||||
for rat in rats
|
||||
ret = service.add(ret, rat)
|
||||
return service.reduce(ret)
|
||||
|
||||
equal: (rat1, rat2) ->
|
||||
[nom1, denom1] = service.getNomDenom(rat1)
|
||||
[nom2, denom2] = service.getNomDenom(rat2)
|
||||
return nom1 * denom2 == nom2 * denom1
|
||||
|
||||
pp: (x) ->
|
||||
[num, denum] = service.getNomDenom(service.reduce(x))
|
||||
if denum == 1
|
||||
return num
|
||||
return "#{num}/#{denum}"
|
||||
|
||||
|
||||
newRat: (nom , denom) ->
|
||||
if nom * denom >= 0
|
||||
return "#{Math.abs(nom)}/#{Math.abs(denom)}"
|
||||
return "#{-Math.abs(nom)}/#{Math.abs(denom)}"
|
||||
|
||||
return service
|
||||
|
||||
app.filter "ratpp", ["rationals", (rationals) ->
|
||||
filter = (n) ->
|
||||
return rationals.pp(n)
|
||||
]
|
||||
Reference in new issue
Block a user