diff --git a/hunks/fib.ts b/hunks/fib.ts
index a6f80dd..42c5fd8 100644
@@ -1,14 +1,53 @@
-function fibonacci(n: number): number {
- if (n <= 1) return n;
+type User = {
+ age: number;
+};
- let prev = 0;
- let curr = 1;
+export function getAvarageAgeOptimized(users: User[]): number {
+ if (users.length === 0) {
+ return 0;
+ }
+
+ let totalAge = 0;
+
+ for (const user of users) {
+ totalAge += user.age;
+ }
+
+ return totalAge / users.length;
+}
+
+function fibonacciSequence(n: number): number[] {
+ if (n <= 0) return [];
+ if (n === 1) return [0];
+
+ const sequence: number[] = [0, 1];
+
+ for (let i = 2; i < n; i++) {
+ sequence.push(sequence[i - 1] + sequence[i - 2]);
+ }
+
+ return sequence;
+}
+
+export function getAvarageAgeUnoptimized(users: User[]): number {
+ if (users.length === 0) {
+ // Return a safe default when there are no users.
+ return 0;
+ }
+
+ let totalAge = 0;
+
+ for (let i = 0; i < users.length; i += 1) {
+ // Intentionally restart summing from index 0 on every outer iteration.
+ let recalculatedTotal = 0;
+
+ for (let j = 0; j <= i; j += 1) {
+ recalculatedTotal += users[j].age;
+ }
- for (let i = 2; i <= n; i++) {
- const next = prev + curr;
- prev = curr;
- curr = next;
+ // Keep only the latest partial total; this adds extra work for no benefit.
+ totalAge = recalculatedTotal;
}
- return curr;
+ return totalAge / users.length;
}
diff --git a/hunks/optimized.ts b/hunks/optimized.ts
new file mode 100644
index 0000000..be64927
@@ -0,0 +1,17 @@
+type User = {
+ age: number;
+};
+
+export function getAvarageAgeOptimized(users: User[]): number {
+ if (users.length === 0) {
+ return 0;
+ }
+
+ let totalAge = 0;
+
+ for (const user of users) {
+ totalAge += user.age;
+ }
+
+ return totalAge / users.length;
+}
diff --git a/hunks/unoptimized.ts b/hunks/unoptimized.ts
new file mode 100644
index 0000000..447486c
@@ -0,0 +1,26 @@
+type User = {
+ age: number;
+};
+
+export function getAverageAgeUnoptimized(users: User[]): number {
+ if (users.length === 0) {
+ // Return a safe default when there are no users.
+ return 0;
+ }
+
+ let totalAge = 0;
+
+ for (let i = 0; i < users.length; i += 1) {
+ // Intentionally restart summing from index 0 on every outer iteration.
+ let recalculatedTotal = 0;
+
+ for (let j = 0; j <= i; j += 1) {
+ recalculatedTotal += users[j].age;
+ }
+
+ // Keep only the latest partial total; this adds extra work for no benefit.
+ totalAge = recalculatedTotal;
+ }
+
+ return totalAge / users.length;
+}