Skip to content

Commit ce38da8

Browse files
committed
feat: add 8804-hard-two-sum
1 parent 14dcdc4 commit ce38da8

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// 参考 https://github.com/type-challenges/type-challenges/issues/9664
2+
type ToArray<
3+
T extends number,
4+
Rest extends number[] = []
5+
> = Rest["length"] extends T ? Rest : ToArray<T, [...Rest, 1]>;
6+
7+
type MyDiff<S extends number, N extends number> = ToArray<S> extends [
8+
...ToArray<N>,
9+
...infer R
10+
]
11+
? R["length"]
12+
: -1;
13+
14+
type TwoSum<T extends number[], U extends number> = T extends [
15+
infer F,
16+
...infer R
17+
]
18+
? MyDiff<U, F & number> extends R[number]
19+
? true
20+
: R extends number[]
21+
? TwoSum<R, U>
22+
: false
23+
: false;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { Equal, Expect } from "@type-challenges/utils";
2+
3+
type cases = [
4+
Expect<Equal<TwoSum<[3, 3], 6>, true>>,
5+
Expect<Equal<TwoSum<[3, 2, 4], 6>, true>>,
6+
Expect<Equal<TwoSum<[2, 7, 11, 15], 15>, false>>,
7+
Expect<Equal<TwoSum<[2, 7, 11, 15], 9>, true>>,
8+
Expect<Equal<TwoSum<[1, 2, 3], 0>, false>>,
9+
Expect<Equal<TwoSum<[1, 2, 3], 1>, false>>,
10+
Expect<Equal<TwoSum<[1, 2, 3], 2>, false>>,
11+
Expect<Equal<TwoSum<[1, 2, 3], 3>, true>>,
12+
Expect<Equal<TwoSum<[1, 2, 3], 4>, true>>,
13+
Expect<Equal<TwoSum<[1, 2, 3], 5>, true>>,
14+
Expect<Equal<TwoSum<[1, 2, 3], 6>, false>>
15+
];

0 commit comments

Comments
 (0)