advent of code 2025 in ts and nix
1const file = await Bun.file("../../shared/02/input.txt").text();
2
3const ranges: { start: number; end: number }[] = file
4 .split(",")
5 .map((range) => {
6 const splitRange = range.split("-");
7 return {
8 start: Number.parseInt(splitRange[0] as string, 10),
9 end: Number.parseInt(splitRange[1] as string, 10),
10 };
11 });
12
13(() => {
14 let count = 0;
15
16 ranges.forEach((range) => {
17 for (let i = range.start; i <= range.end; i++) {
18 const numberString = i.toString();
19
20 if (numberString.length % 2 === 1) continue;
21
22 const firstHalf = numberString.substring(
23 0,
24 (numberString.length + 1) / 2,
25 );
26 const secondHalf = numberString.substring(numberString.length / 2);
27
28 if (firstHalf === secondHalf) count += i;
29 }
30 });
31
32 console.log("part 1:", count);
33})();
34
35(() => {
36 let count = 0;
37
38 ranges.forEach((range) => {
39 for (let i = range.start; i <= range.end; i++) {
40 const numberString = i.toString();
41
42 for (let j = 1; j <= Math.floor(numberString.length / 2); j++) {
43 if (numberString.length % j !== 0) continue;
44
45 const chunk = numberString.slice(0, j);
46
47 let testString = "";
48 for (let k = 0; k < numberString.length / j; k++) testString += chunk;
49 if (testString === numberString) {
50 count += i;
51 break;
52 }
53 }
54 }
55 });
56
57 console.log("part 2:", count);
58})();