Skip to content

Commit 04fe1b7

Browse files
committed
refactor: move subsets into lib
1 parent 9f93b4d commit 04fe1b7

File tree

3 files changed

+17
-28
lines changed

3 files changed

+17
-28
lines changed

2015/day/21/part/1/solve.ts

+2-14
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import subsets from "@lib/subsets.ts";
2+
13
type Opponent = {
24
hitPoints: number;
35
damage: number;
@@ -74,20 +76,6 @@ function* scenarios() {
7476
}
7577
}
7678

77-
function* subsets<T>(set: Set<T>) {
78-
const size = 1 << set.size;
79-
yield new Set<T>();
80-
for (let setBits = 1; setBits < size; setBits++) {
81-
const subset = new Set<T>();
82-
let mask = 1;
83-
for (const value of set) {
84-
if (setBits & mask) subset.add(value);
85-
mask <<= 1;
86-
}
87-
yield subset;
88-
}
89-
}
90-
9179
function determineWinner(a: Opponent, b: Opponent) {
9280
return calculateHitsToWin(a, b) <= calculateHitsToWin(b, a) ? a : b;
9381
}

2015/day/21/part/2/solve.ts

+2-14
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import subsets from "@lib/subsets.ts";
2+
13
type Opponent = {
24
hitPoints: number;
35
damage: number;
@@ -74,20 +76,6 @@ function* scenarios() {
7476
}
7577
}
7678

77-
function* subsets<T>(set: Set<T>) {
78-
const size = 1 << set.size;
79-
yield new Set<T>();
80-
for (let setBits = 1; setBits < size; setBits++) {
81-
const subset = new Set<T>();
82-
let mask = 1;
83-
for (const value of set) {
84-
if (setBits & mask) subset.add(value);
85-
mask <<= 1;
86-
}
87-
yield subset;
88-
}
89-
}
90-
9179
function determineWinner(a: Opponent, b: Opponent) {
9280
return calculateHitsToWin(a, b) <= calculateHitsToWin(b, a) ? a : b;
9381
}

lib/subsets.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export default function* subsets<T>(set: Set<T>) {
2+
const size = 1 << set.size;
3+
yield new Set<T>();
4+
for (let setBits = 1; setBits < size; setBits++) {
5+
const subset = new Set<T>();
6+
let mask = 1;
7+
for (const value of set) {
8+
if (setBits & mask) subset.add(value);
9+
mask <<= 1;
10+
}
11+
yield subset;
12+
}
13+
}

0 commit comments

Comments
 (0)