Remove WIP Subtraction, clean up unused types

This commit is contained in:
Jeff 2024-02-28 22:37:52 -05:00
parent b1535c59ae
commit ed2c9caddf
5 changed files with 5 additions and 24 deletions

View File

@ -1,13 +1,13 @@
{
"name": "numeric-types",
"version": "1.0.0",
"version": "0.0.1",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Jeff Lieb",
"license": "ISC",
"license": "NON-AI ISC",
"dependencies": {
"typescript": "^5.3.3"
}

View File

@ -1,4 +1,4 @@
import { DigitsToNumber, SplitDigits, Digit, TupleForDigit } from ".";
import { DigitsToNumber, SplitDigits, Digit, TupleForDigit } from "./Digits";
export type Add<A extends number, B extends number> = DigitsToNumber<AddDigitArrays<SplitDigits<A>, SplitDigits<B>>> & number

View File

@ -1,6 +1,4 @@
type NonZeroDigit = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
export type Digit = 0 | NonZeroDigit
type Tuple0To9 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
export type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
export type TupleForDigit<Value extends Digit> =
Value extends 0 ? []
@ -27,8 +25,6 @@ type TakeDigitFromString<DigitString extends String> =
? [Head, ...TakeDigitFromString<Tail>]
: never
type Zeros<Length extends number> = [] & {length: Length} extends [...infer Tuple] ? {[Property in keyof Tuple]: 0} & Array<0> & {length: Length} : never
type StringToNumber<NumericString extends string> = NumericString extends `${infer Number extends number}` ? Number : never
type Stringable = string | number | bigint | boolean | null | undefined

View File

@ -1,5 +1,5 @@
import { Digit, DigitsToNumber, SplitDigits, TupleForDigit } from "."
import { Digit, DigitsToNumber, SplitDigits, TupleForDigit } from "./Digits"
export type Max<A extends number, B extends number> = DigitsToNumber<MaxDigitArray<SplitDigits<A>, SplitDigits<B>>> & number

View File

@ -1,15 +0,0 @@
import { Digit, DigitsToNumber, SplitDigits, TupleForDigit } from ".";
export type Add<A extends number, B extends number> = DigitsToNumber<SubtractDigitArrays<SplitDigits<A>, SplitDigits<B>>> & number
type SubtractDigitArrays<A extends Digit[], B extends Digit[], Carry extends boolean = false> =
[A, B] extends [[...infer HeadA extends Digit[], infer TailA extends Digit], [...infer HeadB extends Digit[], infer TailB extends Digit]] ? AddTails<HeadA, TailA, HeadB, TailB, Carry> : [A, B] extends [[...infer HeadA extends Digit[], infer TailA extends Digit], []] ? AddTails<HeadA, TailA, [], 0, Carry> : [A, B] extends [[], [...infer HeadB extends Digit[], infer TailB extends Digit]] ? AddTails<[], 0, HeadB, TailB, Carry> : [A, B] extends [[], []] ? Carry extends true ? [1] : [] : []
type SubtractTails<HeadA extends Digit[], TailA extends Digit, HeadB extends Digit[], TailB extends Digit, Carry extends boolean> =
SplitDigits<SubtractDigits<TailA, TailB, Carry>> extends [1, infer Result extends Digit] ? [...AddDigitArrays<HeadA, HeadB, true>, Result] : [...AddDigitArrays<HeadA, HeadB>, SplitDigits<AddDigits<TailA, TailB, Carry>>[0]]
type SubtractDigits<A extends Digit, B extends Digit, Carry extends boolean = false> =
[...TupleForDigit<A>, ...TupleForDigit<B>, ...(Carry extends false ? [] : [0])]['length'] & number