import type { Digit } from "../utils"; type SubDigitTable = [ [ [ 0, 9, 8, 7, 6, 5, 4, 3, 2, 1 ], [ 1, 0, 9, 8, 7, 6, 5, 4, 3, 2 ], [ 2, 1, 0, 9, 8, 7, 6, 5, 4, 3 ], [ 3, 2, 1, 0, 9, 8, 7, 6, 5, 4 ], [ 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 ], [ 5, 4, 3, 2, 1, 0, 9, 8, 7, 6 ], [ 6, 5, 4, 3, 2, 1, 0, 9, 8, 7 ], [ 7, 6, 5, 4, 3, 2, 1, 0, 9, 8 ], [ 8, 7, 6, 5, 4, 3, 2, 1, 0, 9 ], [ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ] ], [ [ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ], [ 0, 9, 8, 7, 6, 5, 4, 3, 2, 1 ], [ 1, 0, 9, 8, 7, 6, 5, 4, 3, 2 ], [ 2, 1, 0, 9, 8, 7, 6, 5, 4, 3 ], [ 3, 2, 1, 0, 9, 8, 7, 6, 5, 4 ], [ 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 ], [ 5, 4, 3, 2, 1, 0, 9, 8, 7, 6 ], [ 6, 5, 4, 3, 2, 1, 0, 9, 8, 7 ], [ 7, 6, 5, 4, 3, 2, 1, 0, 9, 8 ], [ 8, 7, 6, 5, 4, 3, 2, 1, 0, 9 ] ] ]; type SubDigitCarryTable = [ [ [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ], [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ] ] ]; type SubDigit = SubDigitTable[Carry][T][U]; type SubCarryDigit = SubDigitCarryTable[Carry][T][U]; export type SubDigits = T extends [...infer R extends Digit[], infer N extends Digit] ? U extends [...infer S extends Digit[], infer M extends Digit] ? SubDigits, [ SubDigit, ...Acc ]> : SubDigits, [ SubDigit, ...Acc ]> : U extends [...infer S extends Digit[], infer M extends Digit] ? SubDigits<[ ], S, SubCarryDigit<0, M, Carry>, [ SubDigit<0, M, Carry>, ...Acc ]> : Carry extends 1 ? [...Acc, 9] : Acc; export {};