A class that can report the average of all numbers it has seen so far.
class Averager {
int count;
double sum;
public void add(double x) {
count += 1;
sum += x;
}
public double mean() => sum / count;
}
A class that can generate a Fibonacci-like sequence starting with any two values.
class Fibonacci {
int a, b;
public Fibonacci(int a, int b) {
this.a = a; this.b = b;
}
public Fibonacci() : this(1, 1) { }
public int next() {
int n = a;
int c = a + b;
a = b;
b = c;
return n;
}
public override string ToString() => $"{a}, {b}, ...";
}A class representing a complex number.
class Complex {
double real, imag;
public Complex(double real, double imag) {
this.real = real; this.imag = imag;
}
public static Complex add(Complex c, Complex d) =>
new Complex(c.real + d.real, c.imag + d.imag);
public override string ToString() =>
$"${real} + ${imag} i";
// Parse a complex number from a string such as "2.3+4.2i".
public static bool tryParse(string s, out Complex c) {
c = new Complex(0.0, 0.0); // dummy value
int i = s.IndexOf('+');
if (i == -1 || !s.EndsWith("i")) return false;
string first = s.Substring(0, i),
second = s.Substring(i + 1, s.Length - i - 2);
if (!double.TryParse(first, out double real) ||
!double.TryParse(second, out double imag))
return false;
c = new Complex(real, imag);
return true;
}
}A class that can report the average of the last k numbers it has seen.
class RecentAverager {
double[] a;
int index;
public RecentAverager(int k) {
a = new double[k];
}
public void add(double d) {
a[index] = d;
index = (index + 1) % a.Length;
}
public double average() {
double sum = 0;
foreach (double d in a)
sum += d;
return sum / a.Length;
}
}