trackler 2.2.1.133 → 2.2.1.134

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 823d7cfe149655bf74ac3093c3948cd9e385e612
4
- data.tar.gz: 42596817dd6559ca7642e6eb9ceb543dc9055751
3
+ metadata.gz: c199b6b186e79a6addc55c7b4c2ff2f43c3c39f6
4
+ data.tar.gz: c1c6657ba396dcb12f60736f1a09509e3c1eaf7c
5
5
  SHA512:
6
- metadata.gz: d07624593c2464b858dbf6c2f6bf7c78d38451b1f0a579d8321e9a8a3a3e2632bd5f127d09f3c96e4125603e43193260d8e7c2612001b14b9f319f3e34835ece
7
- data.tar.gz: 20c3e8d8037e8fb4130997771cc0886c83f214c94a7a0060870af86d9e5ba18d449e7d56430bfa29c96404f0d0c4e890ca208165cd573c9ed32e9169ffac104a
6
+ metadata.gz: d8be6e7f925daa5c522612b69e7023de0c4d1708655dc85dd31b8bc48e954f3fcdf7220db6a0b4ecdf1d413f44f719e629aa23f3e4f39179cb65a383504140d3
7
+ data.tar.gz: 49926783363b14e9328ebfa736c8f72cedf49e9aefccd98e81d5f71ffb80f728032884189caa0afa6675f267402c8642b4c98ba27d29af492efa75665c0654a3
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.133"
2
+ VERSION = "2.2.1.134"
3
3
  end
@@ -135,6 +135,16 @@
135
135
  "unlocked_by": "sum-of-multiples",
136
136
  "uuid": "8150604d-4cdc-414a-a523-dd65ac536f0e"
137
137
  },
138
+ {
139
+ "core": false,
140
+ "difficulty": 4,
141
+ "slug": "rational-numbers",
142
+ "topics": [
143
+ "mathematics"
144
+ ],
145
+ "unlocked_by": "leap",
146
+ "uuid": "9ae7f7ed-75d8-4d03-967c-53846634ae07"
147
+ },
138
148
  {
139
149
  "core": true,
140
150
  "difficulty": 3,
@@ -228,6 +228,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArmstrongNumbers", "armstro
228
228
  EndProject
229
229
  Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yacht", "yacht\Yacht.csproj", "{C029D4C6-3A10-459E-96D7-3E77170A5A10}"
230
230
  EndProject
231
+ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RationalNumbers", "rational-numbers\RationalNumbers.csproj", "{0CBB430D-BF64-436F-93BE-8E8088DBCBFE}"
232
+ EndProject
231
233
  Global
232
234
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
233
235
  Debug|Any CPU = Debug|Any CPU
@@ -686,6 +688,10 @@ Global
686
688
  {C029D4C6-3A10-459E-96D7-3E77170A5A10}.Debug|Any CPU.Build.0 = Debug|Any CPU
687
689
  {C029D4C6-3A10-459E-96D7-3E77170A5A10}.Release|Any CPU.ActiveCfg = Release|Any CPU
688
690
  {C029D4C6-3A10-459E-96D7-3E77170A5A10}.Release|Any CPU.Build.0 = Release|Any CPU
691
+ {0CBB430D-BF64-436F-93BE-8E8088DBCBFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
692
+ {0CBB430D-BF64-436F-93BE-8E8088DBCBFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
693
+ {0CBB430D-BF64-436F-93BE-8E8088DBCBFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
694
+ {0CBB430D-BF64-436F-93BE-8E8088DBCBFE}.Release|Any CPU.Build.0 = Release|Any CPU
689
695
  EndGlobalSection
690
696
  GlobalSection(SolutionProperties) = preSolution
691
697
  HideSolutionNode = FALSE
@@ -0,0 +1,167 @@
1
+ using System;
2
+ using System.Diagnostics;
3
+
4
+ public static class RealNumberExtension
5
+ {
6
+ // exponentiate real number to the rational number power
7
+ public static double Expreal(this int realNumber, RationalNumber r)
8
+ {
9
+ return r.Expreal(realNumber);
10
+ }
11
+ }
12
+
13
+ [DebuggerDisplay("{Numerator} / {Denominator}")]
14
+ public struct RationalNumber
15
+ {
16
+ public RationalNumber(int numerator, int denominator)
17
+ {
18
+ this.Numerator = numerator;
19
+ this.Denominator = denominator;
20
+ }
21
+
22
+ public int Numerator { get; }
23
+ public int Denominator { get; }
24
+
25
+ public RationalNumber Add(RationalNumber r)
26
+ {
27
+ return ReducedRationalNumber(this.Numerator * r.Denominator + this.Denominator * r.Numerator, this.Denominator * r.Denominator);
28
+ }
29
+
30
+ public static RationalNumber operator+ (RationalNumber r1, RationalNumber r2)
31
+ {
32
+ return r1.Add(r2);
33
+ }
34
+
35
+ public RationalNumber Sub(RationalNumber r)
36
+ {
37
+ return ReducedRationalNumber(this.Numerator * r.Denominator - this.Denominator * r.Numerator, this.Denominator * r.Denominator);
38
+ }
39
+
40
+ public static RationalNumber operator -(RationalNumber r1, RationalNumber r2)
41
+ {
42
+ return r1.Sub(r2);
43
+ }
44
+
45
+ public RationalNumber Mul(RationalNumber r)
46
+ {
47
+ if (this.Numerator == 0) return new RationalNumber(0, 1);
48
+ return ReducedRationalNumber(this.Numerator * r.Numerator, this.Denominator * r.Denominator);
49
+ }
50
+
51
+ public static RationalNumber operator *(RationalNumber r1, RationalNumber r2)
52
+ {
53
+ return r1.Mul(r2);
54
+ }
55
+
56
+ public RationalNumber Div(RationalNumber r)
57
+ {
58
+ return ReducedRationalNumber(this.Numerator * r.Denominator, this.Denominator * r.Numerator);
59
+ }
60
+
61
+ public static RationalNumber operator /(RationalNumber r1, RationalNumber r2)
62
+ {
63
+ return r1.Div(r2);
64
+ }
65
+
66
+ public RationalNumber Abs()
67
+ {
68
+ return new RationalNumber(Abs(this.Numerator), Abs(this.Denominator));
69
+ }
70
+
71
+ public RationalNumber Reduce()
72
+ {
73
+ if (this.Denominator == 0) return new RationalNumber(this.Numerator, this.Denominator);
74
+ else if (this.Numerator == 0) return new RationalNumber(0, 1);
75
+
76
+ var a = Abs(this.Numerator);
77
+ var b = Abs(this.Denominator);
78
+
79
+ var sign = Sign(this.Numerator) * Sign(this.Denominator);
80
+
81
+ return new RationalNumber(sign * a / GreatestCommonDenominator(a, b), b / GreatestCommonDenominator(a, b));
82
+ }
83
+
84
+ public RationalNumber Exprational(int power)
85
+ {
86
+ if (power == 0) return new RationalNumber(1, 1);
87
+
88
+ return ReducedRationalNumber
89
+ (
90
+ (Sign(this.Numerator) / Sign(this.Denominator)) *
91
+ Abs((int)Pow(this.Numerator, power)),
92
+ Abs((int)Pow(this.Denominator, power))
93
+ );
94
+ }
95
+
96
+ public double Expreal(int baseNumber)
97
+ {
98
+ if (this.Numerator == 0)
99
+ return 1;
100
+ else
101
+ return Pow(baseNumber);
102
+ }
103
+
104
+ private static RationalNumber ReducedRationalNumber(int numerator, int denominator)
105
+ {
106
+ return new RationalNumber(numerator, denominator).Reduce();
107
+ }
108
+
109
+ private double Pow(int baseNumber)
110
+ {
111
+ return NthRoot((Sign(this.Numerator) == Sign(this.Denominator) ?
112
+ Pow(baseNumber, Abs(this.Numerator)) :
113
+ 1d / Pow(baseNumber, Abs(this.Numerator))),
114
+ Abs(this.Denominator));
115
+ }
116
+
117
+ private int Abs(int value)
118
+ {
119
+ return (value > 0) ? value : -value;
120
+ }
121
+
122
+ private double Abs(double value)
123
+ {
124
+ return (value > 0) ? value : -value;
125
+ }
126
+
127
+ private int Sign(int value)
128
+ {
129
+ return (value > 0) ? 1 : -1;
130
+ }
131
+
132
+ private int GreatestCommonDenominator(int a, int b)
133
+ {
134
+ var x = Abs(a);
135
+ var y = Abs(b);
136
+
137
+ while (x != 0 && y != 0)
138
+ if (x > y) x %= y; else y %= x;
139
+ return x == 0 ? y : x;
140
+ }
141
+
142
+ private double Pow(double baseValue, int exp)
143
+ {
144
+ double result = 1.0;
145
+ while (exp != 0)
146
+ {
147
+ if ((exp & 1) != 0) result *= baseValue;
148
+ baseValue *= baseValue;
149
+ exp >>= 1;
150
+ }
151
+ return result;
152
+ }
153
+
154
+ private double NthRoot(double baseValue, int n)
155
+ {
156
+ if (n == 1) return baseValue;
157
+ double deltaX;
158
+ double x = 0.1;
159
+ do
160
+ {
161
+ deltaX = ((double)baseValue / Pow(x, (n - 1)) - x) / n;
162
+ x = x + deltaX;
163
+ }
164
+ while (Abs(deltaX) > 0);
165
+ return x;
166
+ }
167
+ }
@@ -0,0 +1,27 @@
1
+ A rational number is defined as the quotient of two integers `a` and `b`, called the numerator and denominator, respectively, where `b != 0`.
2
+
3
+ The absolute value `|r|` of the rational number `r = a/b` is equal to `|a|/|b|`.
4
+
5
+ The sum of two rational numbers `r1 = a1/b1` and `r2 = a2/b2` is `r1 + r2 = a1/b1 + a2/b2 = (a1 * b2 + a2 * b1) / (b1 * b2)`.
6
+
7
+ The difference of two rational numbers `r1 = a1/b1` and `r2 = a2/b2` is `r1 - r2 = a1/b1 - a2/b2 = (a1 * b2 - a2 * b1) / (b1 * b2)`.
8
+
9
+ The product (multiplication) of two rational numbers `r1 = a1/b1` and `r2 = a2/b2` is `r1 * r2 = (a1 * a2) / (b1 * b2)`.
10
+
11
+ Dividing a rational number `r1 = a1/b1` by another `r2 = a2/b2` is `r1 / r2 = (a1 * b2) / (a2 * b1)` if `a2 * b1` is not zero.
12
+
13
+ Exponentiation of a rational number `r = a/b` to a non-negative integer power `n` is `r^n = (a^n)/(b^n)`.
14
+
15
+ Exponentiation of a rational number `r = a/b` to a negative integer power `n` is `r^n = (b^m)/(a^m)`, where `m = |n|`.
16
+
17
+ Exponentiation of a rational number `r = a/b` to a real (floating-point) number `x` is the quotient `(a^x)/(b^x)`, which is a real number.
18
+
19
+ Exponentiation of a real number `x` to a rational number `r = a/b` is `x^(a/b) = root(x^a, b)`, where `root(p, q)` is the `q`th root of `p`.
20
+
21
+ Implement the following operations:
22
+ - addition, subtraction, multiplication and division of two rational numbers,
23
+ - absolute value, exponentiation of a given rational number to an integer power, exponentiation of a given rational number to a real (floating-point) power, exponentiation of a real number to a rational number.
24
+
25
+ Your implementation of rational numbers should always be reduced to lowest terms. For example, `4/4` should reduce to `1/1`, `30/60` should reduce to `1/2`, `12/8` should reduce to `3/2`, etc. To reduce a rational number `r = a/b`, divide `a` and `b` by the greatest common divisor (gcd) of `a` and `b`. So, for example, `gcd(12, 8) = 4`, so `r = 12/8` can be reduced to `(12/4)/(8/4) = 3/2`.
26
+
27
+ Assume that the programming language you are using does not have an implementation of rational numbers.
@@ -0,0 +1,77 @@
1
+ using System;
2
+ using System.Diagnostics;
3
+
4
+ public static class RealNumberExtension
5
+ {
6
+ public static double Expreal(this int realNumber, RationalNumber r)
7
+ {
8
+ throw new NotImplementedException("You need to implement this extension method.");
9
+ }
10
+ }
11
+
12
+ public struct RationalNumber
13
+ {
14
+ public RationalNumber(int numerator, int denominator)
15
+ {
16
+ }
17
+
18
+ public RationalNumber Add(RationalNumber r)
19
+ {
20
+ throw new NotImplementedException("You need to implement this function.");
21
+ }
22
+
23
+ public static RationalNumber operator +(RationalNumber r1, RationalNumber r2)
24
+ {
25
+ throw new NotImplementedException("You need to implement this operator.");
26
+ }
27
+
28
+ public RationalNumber Sub(RationalNumber r)
29
+ {
30
+ throw new NotImplementedException("You need to implement this function.");
31
+ }
32
+
33
+ public static RationalNumber operator -(RationalNumber r1, RationalNumber r2)
34
+ {
35
+ throw new NotImplementedException("You need to implement this operator.");
36
+ }
37
+
38
+ public RationalNumber Mul(RationalNumber r)
39
+ {
40
+ throw new NotImplementedException("You need to implement this function.");
41
+ }
42
+
43
+ public static RationalNumber operator *(RationalNumber r1, RationalNumber r2)
44
+ {
45
+ throw new NotImplementedException("You need to implement this operator.");
46
+ }
47
+
48
+ public RationalNumber Div(RationalNumber r)
49
+ {
50
+ throw new NotImplementedException("You need to implement this function.");
51
+ }
52
+
53
+ public static RationalNumber operator /(RationalNumber r1, RationalNumber r2)
54
+ {
55
+ throw new NotImplementedException("You need to implement this operator.");
56
+ }
57
+
58
+ public RationalNumber Abs()
59
+ {
60
+ throw new NotImplementedException("You need to implement this function.");
61
+ }
62
+
63
+ public RationalNumber Reduce()
64
+ {
65
+ throw new NotImplementedException("You need to implement this function.");
66
+ }
67
+
68
+ public RationalNumber Exprational(int power)
69
+ {
70
+ throw new NotImplementedException("You need to implement this function.");
71
+ }
72
+
73
+ public double Expreal(int baseNumber)
74
+ {
75
+ throw new NotImplementedException("You need to implement this function.");
76
+ }
77
+ }
@@ -0,0 +1,17 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+ </PropertyGroup>
6
+
7
+ <ItemGroup>
8
+ <Compile Remove="Example.cs" />
9
+ </ItemGroup>
10
+
11
+ <ItemGroup>
12
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
13
+ <PackageReference Include="xunit" Version="2.3.1" />
14
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
15
+ </ItemGroup>
16
+
17
+ </Project>
@@ -0,0 +1,222 @@
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
3
+ using Xunit;
4
+
5
+ public class RationalNumbersTest
6
+ {
7
+ [Fact]
8
+ public void Add_two_positive_rational_numbers()
9
+ {
10
+ Assert.Equal(new RationalNumber (7, 6), new RationalNumber(1, 2) + (new RationalNumber(2, 3)));
11
+ }
12
+
13
+ [Fact(Skip = "Remove to run test")]
14
+ public void Add_a_positive_rational_number_and_a_negative_rational_number()
15
+ {
16
+ Assert.Equal(new RationalNumber (-1, 6), new RationalNumber(1, 2) + (new RationalNumber(-2, 3)));
17
+ }
18
+
19
+ [Fact(Skip = "Remove to run test")]
20
+ public void Add_two_negative_rational_numbers()
21
+ {
22
+ Assert.Equal(new RationalNumber (-7, 6), new RationalNumber(-1, 2) + (new RationalNumber(-2, 3)));
23
+ }
24
+
25
+ [Fact(Skip = "Remove to run test")]
26
+ public void Add_a_rational_number_to_its_additive_inverse()
27
+ {
28
+ Assert.Equal(new RationalNumber (0, 1), new RationalNumber(1, 2) + (new RationalNumber(-1, 2)));
29
+ }
30
+
31
+ [Fact(Skip = "Remove to run test")]
32
+ public void Subtract_two_positive_rational_numbers()
33
+ {
34
+ Assert.Equal(new RationalNumber (-1, 6), new RationalNumber(1, 2) - (new RationalNumber(2, 3)));
35
+ }
36
+
37
+ [Fact(Skip = "Remove to run test")]
38
+ public void Subtract_a_positive_rational_number_and_a_negative_rational_number()
39
+ {
40
+ Assert.Equal(new RationalNumber (7, 6), new RationalNumber(1, 2) - (new RationalNumber(-2, 3)));
41
+ }
42
+
43
+ [Fact(Skip = "Remove to run test")]
44
+ public void Subtract_two_negative_rational_numbers()
45
+ {
46
+ Assert.Equal(new RationalNumber (1, 6), new RationalNumber(-1, 2) - (new RationalNumber(-2, 3)));
47
+ }
48
+
49
+ [Fact(Skip = "Remove to run test")]
50
+ public void Subtract_a_rational_number_from_itself()
51
+ {
52
+ Assert.Equal(new RationalNumber (0, 1), new RationalNumber(1, 2) - (new RationalNumber(1, 2)));
53
+ }
54
+
55
+ [Fact(Skip = "Remove to run test")]
56
+ public void Multiply_two_positive_rational_numbers()
57
+ {
58
+ Assert.Equal(new RationalNumber (1, 3), new RationalNumber(1, 2) * (new RationalNumber(2, 3)));
59
+ }
60
+
61
+ [Fact(Skip = "Remove to run test")]
62
+ public void Multiply_a_negative_rational_number_by_a_positive_rational_number()
63
+ {
64
+ Assert.Equal(new RationalNumber (-1, 3), new RationalNumber(-1, 2) * (new RationalNumber(2, 3)));
65
+ }
66
+
67
+ [Fact(Skip = "Remove to run test")]
68
+ public void Multiply_two_negative_rational_numbers()
69
+ {
70
+ Assert.Equal(new RationalNumber (1, 3), new RationalNumber(-1, 2) * (new RationalNumber(-2, 3)));
71
+ }
72
+
73
+ [Fact(Skip = "Remove to run test")]
74
+ public void Multiply_a_rational_number_by_its_reciprocal()
75
+ {
76
+ Assert.Equal(new RationalNumber (1, 1), new RationalNumber(1, 2) * (new RationalNumber(2, 1)));
77
+ }
78
+
79
+ [Fact(Skip = "Remove to run test")]
80
+ public void Multiply_a_rational_number_by_1()
81
+ {
82
+ Assert.Equal(new RationalNumber (1, 2), new RationalNumber(1, 2) * (new RationalNumber(1, 1)));
83
+ }
84
+
85
+ [Fact(Skip = "Remove to run test")]
86
+ public void Multiply_a_rational_number_by_0()
87
+ {
88
+ Assert.Equal(new RationalNumber (0, 1), new RationalNumber(1, 2) * (new RationalNumber(0, 1)));
89
+ }
90
+
91
+ [Fact(Skip = "Remove to run test")]
92
+ public void Divide_two_positive_rational_numbers()
93
+ {
94
+ Assert.Equal(new RationalNumber (3, 4), new RationalNumber(1, 2) / (new RationalNumber(2, 3)));
95
+ }
96
+
97
+ [Fact(Skip = "Remove to run test")]
98
+ public void Divide_a_positive_rational_number_by_a_negative_rational_number()
99
+ {
100
+ Assert.Equal(new RationalNumber (-3, 4), new RationalNumber(1, 2) / (new RationalNumber(-2, 3)));
101
+ }
102
+
103
+ [Fact(Skip = "Remove to run test")]
104
+ public void Divide_two_negative_rational_numbers()
105
+ {
106
+ Assert.Equal(new RationalNumber (3, 4), new RationalNumber(-1, 2) / (new RationalNumber(-2, 3)));
107
+ }
108
+
109
+ [Fact(Skip = "Remove to run test")]
110
+ public void Divide_a_rational_number_by_1()
111
+ {
112
+ Assert.Equal(new RationalNumber (1, 2), new RationalNumber(1, 2) / (new RationalNumber(1, 1)));
113
+ }
114
+
115
+ [Fact(Skip = "Remove to run test")]
116
+ public void Absolute_value_of_a_positive_rational_number()
117
+ {
118
+ Assert.Equal(new RationalNumber (1, 2), new RationalNumber(1, 2).Abs());
119
+ }
120
+
121
+ [Fact(Skip = "Remove to run test")]
122
+ public void Absolute_value_of_a_negative_rational_number()
123
+ {
124
+ Assert.Equal(new RationalNumber (1, 2), new RationalNumber(-1, 2).Abs());
125
+ }
126
+
127
+ [Fact(Skip = "Remove to run test")]
128
+ public void Absolute_value_of_zero()
129
+ {
130
+ Assert.Equal(new RationalNumber (0, 1), new RationalNumber(0, 1).Abs());
131
+ }
132
+
133
+ [Fact(Skip = "Remove to run test")]
134
+ public void Raise_a_positive_rational_number_to_a_positive_integer_power()
135
+ {
136
+ Assert.Equal(new RationalNumber (1, 8), new RationalNumber(1, 2).Exprational(3));
137
+ }
138
+
139
+ [Fact(Skip = "Remove to run test")]
140
+ public void Raise_a_negative_rational_number_to_a_positive_integer_power()
141
+ {
142
+ Assert.Equal(new RationalNumber (-1, 8), new RationalNumber(-1, 2).Exprational(3));
143
+ }
144
+
145
+ [Fact(Skip = "Remove to run test")]
146
+ public void Raise_zero_to_an_integer_power()
147
+ {
148
+ Assert.Equal(new RationalNumber (0, 1), new RationalNumber(0, 1).Exprational(5));
149
+ }
150
+
151
+ [Fact(Skip = "Remove to run test")]
152
+ public void Raise_one_to_an_integer_power()
153
+ {
154
+ Assert.Equal(new RationalNumber (1, 1), new RationalNumber(1, 1).Exprational(4));
155
+ }
156
+
157
+ [Fact(Skip = "Remove to run test")]
158
+ public void Raise_a_positive_rational_number_to_the_power_of_zero()
159
+ {
160
+ Assert.Equal(new RationalNumber (1, 1), new RationalNumber(1, 2).Exprational(0));
161
+ }
162
+
163
+ [Fact(Skip = "Remove to run test")]
164
+ public void Raise_a_negative_rational_number_to_the_power_of_zero()
165
+ {
166
+ Assert.Equal(new RationalNumber (1, 1), new RationalNumber(-1, 2).Exprational(0));
167
+ }
168
+
169
+ [Fact(Skip = "Remove to run test")]
170
+ public void Raise_a_real_number_to_a_positive_rational_number()
171
+ {
172
+ Assert.Equal(16, 8.Expreal(new RationalNumber(4, 3)),0);
173
+ }
174
+
175
+ [Fact(Skip = "Remove to run test")]
176
+ public void Raise_a_real_number_to_a_negative_rational_number()
177
+ {
178
+ Assert.Equal(0.333333333333333, 9.Expreal(new RationalNumber(-1, 2)),15);
179
+ }
180
+
181
+ [Fact(Skip = "Remove to run test")]
182
+ public void Raise_a_real_number_to_a_zero_rational_number()
183
+ {
184
+ Assert.Equal(1, 2.Expreal(new RationalNumber(0, 1)),0);
185
+ }
186
+
187
+ [Fact(Skip = "Remove to run test")]
188
+ public void Reduce_a_positive_rational_number_to_lowest_terms()
189
+ {
190
+ Assert.Equal(new RationalNumber (1, 2), new RationalNumber(2, 4).Reduce());
191
+ }
192
+
193
+ [Fact(Skip = "Remove to run test")]
194
+ public void Reduce_a_negative_rational_number_to_lowest_terms()
195
+ {
196
+ Assert.Equal(new RationalNumber (-2, 3), new RationalNumber(-4, 6).Reduce());
197
+ }
198
+
199
+ [Fact(Skip = "Remove to run test")]
200
+ public void Reduce_a_rational_number_with_a_negative_denominator_to_lowest_terms()
201
+ {
202
+ Assert.Equal(new RationalNumber (-1, 3), new RationalNumber(3, -9).Reduce());
203
+ }
204
+
205
+ [Fact(Skip = "Remove to run test")]
206
+ public void Reduce_zero_to_lowest_terms()
207
+ {
208
+ Assert.Equal(new RationalNumber (0, 1), new RationalNumber(0, 6).Reduce());
209
+ }
210
+
211
+ [Fact(Skip = "Remove to run test")]
212
+ public void Reduce_an_integer_to_lowest_terms()
213
+ {
214
+ Assert.Equal(new RationalNumber (-2, 1), new RationalNumber(-14, 7).Reduce());
215
+ }
216
+
217
+ [Fact(Skip = "Remove to run test")]
218
+ public void Reduce_one_to_lowest_terms()
219
+ {
220
+ Assert.Equal(new RationalNumber (1, 1), new RationalNumber(13, 13).Reduce());
221
+ }
222
+ }
@@ -0,0 +1,5 @@
1
+ ## Hints
2
+ This exercise requires you to write an extension method. For more information, see [this page](https://msdn.microsoft.com/en-us//library/bb383977.aspx).
3
+
4
+ This exercise also requires you to write operator overloading methods for +, -, * and / operators. For more information, see [this page](https://msdn.microsoft.com/en-us/library/5tk49fh2.aspx).
5
+
@@ -0,0 +1,73 @@
1
+ using Generators.Output;
2
+
3
+ namespace Generators.Exercises
4
+ {
5
+ public struct RationalNumber
6
+ {
7
+ public RationalNumber(int[] n)
8
+ {
9
+ this.Numerator = n[0];
10
+ this.Denominator = n[1];
11
+ }
12
+
13
+ public int Numerator { get; }
14
+ public int Denominator { get; }
15
+ }
16
+
17
+ public class RationalNumbers : GeneratorExercise
18
+ {
19
+ protected override string RenderTestMethodBodyAssert(TestMethodBody testMethodBody)
20
+ {
21
+ var input = testMethodBody.CanonicalDataCase.Properties["input"] as System.Collections.Generic.Dictionary<string, object>;
22
+ var operation = testMethodBody.CanonicalDataCase.Properties["property"].ToString();
23
+ var expected = testMethodBody.CanonicalDataCase.Properties["expected"];
24
+ var operationName = char.ToUpper(operation[0]) + operation.Substring(1);
25
+ string assertCodeLine = "";
26
+ string operationsWithOverloading = "add|+|sub|-|mul|*|div|/";
27
+ string operationCode = operationsWithOverloading.Substring(operationsWithOverloading.IndexOf(operation.ToLower()) + 4, 1);
28
+
29
+ switch (operation.ToLower())
30
+ {
31
+ case "add":
32
+ case "sub":
33
+ case "mul":
34
+ case "div":
35
+ {
36
+ var r1 = new RationalNumber((int[])input["r1"]);
37
+ var r2 = new RationalNumber((int[])input["r2"]);
38
+ var e = new RationalNumber((int[])expected);
39
+ assertCodeLine = "Assert.Equal(" + $"new RationalNumber ({e.Numerator}, {e.Denominator}), new RationalNumber({r1.Numerator}, {r1.Denominator}) {operationCode} (new RationalNumber({r2.Numerator}, {r2.Denominator})));";
40
+ }
41
+ break;
42
+ case "abs":
43
+ case "reduce":
44
+ {
45
+ var r = new RationalNumber((int[])input["r"]);
46
+ var e = new RationalNumber((int[])expected);
47
+ assertCodeLine = "Assert.Equal(" + $"new RationalNumber ({e.Numerator}, {e.Denominator}), new RationalNumber({r.Numerator}, {r.Denominator}).{operationName}());";
48
+ }
49
+ break;
50
+ case "exprational":
51
+ {
52
+ var r = new RationalNumber((int[])input["r"]);
53
+ var n = input["n"];
54
+ var e = new RationalNumber((int[])expected);
55
+ assertCodeLine = "Assert.Equal(" + $"new RationalNumber ({e.Numerator}, {e.Denominator}), new RationalNumber({r.Numerator}, {r.Denominator}).{operationName}({n}));";
56
+ }
57
+ break;
58
+ case "expreal":
59
+ {
60
+ var x = input["x"].ToString();
61
+ var r = new RationalNumber((int[])input["r"]);
62
+ var e = expected;
63
+ var p = precision(e);
64
+ assertCodeLine = "Assert.Equal(" + $"{e}, {x}.{operationName}(new RationalNumber({r.Numerator}, {r.Denominator})),{p});";
65
+ }
66
+ break;
67
+ }
68
+ return TemplateRenderer.RenderInline(assertCodeLine, testMethodBody.AssertTemplateParameters);
69
+ }
70
+
71
+ private static int precision(object rawValue) => rawValue.ToString().Split(new char[] { '.' }).Length <= 1 ? 0 : rawValue.ToString().Split(new char[] { '.' })[1].Length;
72
+ }
73
+ }
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.3.0
@@ -221,7 +221,7 @@ public class BaseConverterTest {
221
221
  expectedException.expect(IllegalArgumentException.class);
222
222
  expectedException.expectMessage("Bases must be at least 2.");
223
223
 
224
- new BaseConverter(1, new int[]{});
224
+ new BaseConverter(1, new int[]{1});
225
225
  }
226
226
 
227
227
  @Ignore("Remove to run test")
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.2.0
@@ -68,6 +68,13 @@ public class RomanNumeralsTest {
68
68
  romanNumeral = new RomanNumeral(48);
69
69
  assertEquals("XLVIII", romanNumeral.getRomanNumeral());
70
70
  }
71
+
72
+ @Ignore("Remove to run test")
73
+ @Test
74
+ public void test49ToRomanNumberXLIX() {
75
+ romanNumeral = new RomanNumeral(49);
76
+ assertEquals("XLIX", romanNumeral.getRomanNumeral());
77
+ }
71
78
 
72
79
  @Ignore("Remove to run test")
73
80
  @Test
@@ -45,11 +45,10 @@ The message above is coded as:
45
45
  imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau
46
46
  ```
47
47
 
48
- Output the encoded text in chunks. Phrases that fill perfect rectangles
49
- `(r X c)` should be output `c` chunks of `r` length, separated by spaces.
50
- Phrases that do not fill perfect rectangles will have `n` empty spaces.
51
- Those spaces should be distributed evenly, added to the end of the last
52
- `n` chunks.
48
+ Output the encoded text in chunks that fill perfect rectangles `(r X c)`,
49
+ with `c` chunks of `r` length, separated by spaces. For phrases that are
50
+ `n` characters short of the perfect rectangle, pad each of the last `n`
51
+ chunks with a single trailing space.
53
52
 
54
53
  ```text
55
54
  imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau
@@ -4,13 +4,13 @@ Given a tonic, or starting note, and a set of intervals, generate
4
4
  the musical scale starting with the tonic and following the
5
5
  specified interval pattern.
6
6
 
7
- Scales in Western music are based on the chromatic (12-note) scale.This
7
+ Scales in Western music are based on the chromatic (12-note) scale. This
8
8
  scale can be expressed as the following group of pitches:
9
9
 
10
10
  A, A#, B, C, C#, D, D#, E, F, F#, G, G#
11
11
 
12
- A given sharp note (indicated by a #), can also be expressed as the flat
13
- of the note above it (indicated by a b), so the chromatic scale can also be
12
+ A given sharp note (indicated by a #) can also be expressed as the flat
13
+ of the note above it (indicated by a b) so the chromatic scale can also be
14
14
  written like this:
15
15
 
16
16
  A, Bb, B, C, Db, D, Eb, E, F, Gb, G, Ab
@@ -20,9 +20,9 @@ collection. They have seven pitches, and are called diatonic scales.
20
20
  The collection of notes in these scales is written with either sharps or
21
21
  flats, depending on the tonic. Here is a list of which are which:
22
22
 
23
- No Accidentals:
23
+ No Sharps or Flats:
24
24
  C major
25
- A minor
25
+ a minor
26
26
 
27
27
  Use Sharps:
28
28
  G, D, A, E, B, F# major
@@ -43,17 +43,10 @@ a "whole step" or "major second" (written as an upper-case "M"). The
43
43
  diatonic scales are built using only these two intervals between
44
44
  adjacent notes.
45
45
 
46
- Non-diatonic scales can contain the same letter twice, and can contain other intervals.
47
- Sometimes they may be smaller than usual (diminished, written "D"), or larger
48
- (augmented, written "A"). Intervals larger than an augmented second have other names.
49
-
50
- Here is a table of pitches with the names of their interval distance from the tonic (A).
51
-
52
- | A | A# | B | C | C# | D | D# | E | F | F# | G | G# | A |
53
- |:------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:------:|
54
- | Unison | Min 2nd | Maj 2nd | Min 3rd | Maj 3rd | Per 4th | Tritone | Per 5th | Min 6th | Maj 6th | Min 7th | Maj 7th | Octave |
55
- | | | Dim 3rd | Aug 2nd | Dim 4th | | Aug 4th | Dim 5th | Aug 5th | Dim 7th | Aug 6th | Dim 8ve | |
56
- | | | | | | | Dim 5th | | | | | | |
46
+ Non-diatonic scales can contain other intervals. An "augmented first"
47
+ interval, written "A", has two interceding notes (e.g., from A to C or
48
+ Db to E). There are also smaller and larger intervals, but they will not
49
+ figure into this exercise.
57
50
 
58
51
  ## Exception messages
59
52
 
@@ -861,7 +861,7 @@
861
861
  "mathematics",
862
862
  "tuples"
863
863
  ],
864
- "unlocked_by": "leap",
864
+ "unlocked_by": null,
865
865
  "uuid": "5a918ed8-e840-46b8-b824-291d872d2224"
866
866
  },
867
867
  {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1.133
4
+ version: 2.2.1.134
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-15 00:00:00.000000000 Z
11
+ date: 2018-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -2938,6 +2938,12 @@ files:
2938
2938
  - tracks/csharp/exercises/raindrops/Raindrops.cs
2939
2939
  - tracks/csharp/exercises/raindrops/Raindrops.csproj
2940
2940
  - tracks/csharp/exercises/raindrops/RaindropsTest.cs
2941
+ - tracks/csharp/exercises/rational-numbers/Example.cs
2942
+ - tracks/csharp/exercises/rational-numbers/README.md
2943
+ - tracks/csharp/exercises/rational-numbers/RationalNumbers.cs
2944
+ - tracks/csharp/exercises/rational-numbers/RationalNumbers.csproj
2945
+ - tracks/csharp/exercises/rational-numbers/RationalNumbersTest.cs
2946
+ - tracks/csharp/exercises/rational-numbers/hints.md
2941
2947
  - tracks/csharp/exercises/react/.meta/hints.md
2942
2948
  - tracks/csharp/exercises/react/Example.cs
2943
2949
  - tracks/csharp/exercises/react/README.md
@@ -3200,6 +3206,7 @@ files:
3200
3206
  - tracks/csharp/generators/Exercises/QueenAttack.cs
3201
3207
  - tracks/csharp/generators/Exercises/RailFenceCipher.cs
3202
3208
  - tracks/csharp/generators/Exercises/Raindrops.cs
3209
+ - tracks/csharp/generators/Exercises/RationalNumbers.cs
3203
3210
  - tracks/csharp/generators/Exercises/ReverseString.cs
3204
3211
  - tracks/csharp/generators/Exercises/RnaTranscription.cs
3205
3212
  - tracks/csharp/generators/Exercises/RobotSimulator.cs