@tktb-tess/util-fns 0.1.6 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # util-fns
2
2
 
3
- 個人的に使う用の便利関数ライブラリ
3
+ utility functions for personal use
@@ -1 +1 @@
1
- {"version":3,"file":"baillie-psw.d.ts","sourceRoot":"","sources":["../src/baillie-psw.ts"],"names":[],"mappings":"AAuIA;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,YAoDnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAW3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,EAAE,eAAa,WAWvE,CAAC"}
1
+ {"version":3,"file":"baillie-psw.d.ts","sourceRoot":"","sources":["../src/baillie-psw.ts"],"names":[],"mappings":"AAsIA;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,YAoDnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAW3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,EAAE,eAAa,WAWvE,CAAC"}
@@ -0,0 +1,64 @@
1
+ declare const __fraction_brand: unique symbol;
2
+ export default class Fraction {
3
+ #private;
4
+ readonly [__fraction_brand]: unknown;
5
+ constructor(numerator: bigint, denominator: bigint);
6
+ /**
7
+ * `number` 型から構成
8
+ * @param value 値
9
+ * @param denominatorDigits 分母の桁数 (十進)
10
+ */
11
+ static fromDecimal(value: number, denominatorDigits?: number): Fraction;
12
+ /**
13
+ * -1 倍
14
+ * @returns
15
+ */
16
+ minus(): Fraction;
17
+ /**
18
+ * 逆数
19
+ * @returns
20
+ */
21
+ inverse(): Fraction;
22
+ /**
23
+ * 加法 (非破壊的)
24
+ * @param right
25
+ * @returns
26
+ */
27
+ add(right: Fraction): Fraction;
28
+ /**
29
+ * 減法
30
+ * @param right
31
+ * @returns
32
+ */
33
+ substr(right: Fraction): Fraction;
34
+ /**
35
+ * 乗法
36
+ * @param right
37
+ * @returns
38
+ */
39
+ multiply(right: Fraction): Fraction;
40
+ /**
41
+ * 除法
42
+ * @param right
43
+ * @returns
44
+ */
45
+ divide(right: Fraction): Fraction;
46
+ /**
47
+ * `number` 型の小数に変換
48
+ * @returns
49
+ */
50
+ toDecimal(): number;
51
+ /**
52
+ * 分数の文字列に変換
53
+ * @returns
54
+ */
55
+ toString(): string;
56
+ valueOf(): number;
57
+ toJSON(): {
58
+ type: string;
59
+ numerator: string;
60
+ denominator: string;
61
+ };
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=fraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fraction.d.ts","sourceRoot":"","sources":["../src/fraction.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,gBAAgB,eAAW,CAAC;AAElC,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAG3B,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;gBAEzB,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAelD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,SAAK;IAoCxD;;;OAGG;IACH,KAAK;IAIL;;;OAGG;IACH,OAAO;IAIP;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ;IAQnB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ;IAItB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAMxB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ;IAMtB;;;OAGG;IACH,SAAS;IAIT;;;OAGG;IACH,QAAQ;IAIR,OAAO;IAIP,MAAM;;;;;CAOP"}
package/dist/main.d.ts CHANGED
@@ -2,5 +2,6 @@ import { isEqArray, sleep, lazify, parseCSV, getHash, BItoBuffer, bufferToBI } f
2
2
  import { getRndInt, residue, toBigInt, getRandBIByBitLength, getRandBIByRange, modPow, exEuclidean, factorial, rot32, rot32BI, jacobiSymbol, isSquare } from './math';
3
3
  import PCGMinimal from './pcg-minimal';
4
4
  import { bailliePSW, getRandPrimeByBitLength, getRandPrimeByRange } from './baillie-psw';
5
- export { isEqArray, sleep, lazify, parseCSV, getHash, BItoBuffer, bufferToBI, getRndInt, residue, toBigInt, getRandBIByBitLength, getRandBIByRange, modPow, exEuclidean, factorial, rot32, rot32BI, jacobiSymbol, isSquare, bailliePSW, getRandPrimeByBitLength, getRandPrimeByRange, PCGMinimal, };
5
+ import Fraction from './fraction';
6
+ export { isEqArray, sleep, lazify, parseCSV, getHash, BItoBuffer, bufferToBI, getRndInt, residue, toBigInt, getRandBIByBitLength, getRandBIByRange, modPow, exEuclidean, factorial, rot32, rot32BI, jacobiSymbol, isSquare, bailliePSW, getRandPrimeByBitLength, getRandPrimeByRange, PCGMinimal, Fraction };
6
7
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,GACX,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACT,CAAC"}
package/dist/main.js CHANGED
@@ -1,2 +1,2 @@
1
- const n=(n,t)=>{if(n.length!==t.length)return!1;for(let r=0;r<n.length;r++)if(n[r]!==t[r])return!1;return!0},t=n=>new Promise(t=>{setTimeout(()=>{t()},n)}),r=n=>(...t)=>()=>n(...t),e=n=>{const t=[];let r=[],e="",o=!1;for(let i=0;i<n.length;i++){const s=n[i];'"'!==s||0!==i&&"\\"===n[i-1]?","!==s||o?"\n"!==s||o?e+=s:(r.push(e.trim()),t.push(r),r=[],e=""):(r.push(e.trim()),e=""):o=!o}return r.push(e.trim()),t.push(r),t},o=async(n,t)=>{const r=Buffer.from(n,"utf8");return crypto.subtle.digest(t,r).then(n=>Buffer.from(n))},i=n=>{let t=n.toString(16);return 1&t.length&&(t="0"+t),Buffer.from(t,"hex")},s=n=>{const t=n.toString("hex")||"00";return BigInt("0x"+t)},u=(n,t)=>Math.floor(Math.random()*(t-n)+n),f=(n,t)=>{const r=n%t;return r<0n?r+t:r},a=(...n)=>n.map(n=>BigInt(n)),g=(n,t=!1)=>{if(!Number.isFinite(n))throw Error("`length` is not a valid number");if(n<=0)throw Error("`length` must be positive");const r=Math.ceil(n/32),e=crypto.getRandomValues(new Uint32Array(r));let o=Array.from(e,n=>n.toString(2).padStart(32,"0")).join("");return o=o.slice(0,n),t&&(o=o.replace(/^./,"1")),BigInt("0b"+o)},h=(n,t)=>{if(n>=t)throw Error("RangeError");const r=t-n,e=r.toString(2).length;return n+(()=>{for(let n=0;n<1e5;n++){const n=g(e);if(n>=c(2n,BigInt(e),r))return n%r}throw Error("Failed to generate a random bigint")})()},c=(n,t,r)=>{if(r<1n)throw Error("`mod` must be positive");if(t<0n)throw Error("`power` must not be negative");for(;n<0n;)n+=r;if(1n===r)return 0n;if(n%r===1n||n%r===0n)return n;if(n===r-1n)return 1n&t?r-1n:1n;let e=1n;for(;t>0n;)1n&t&&(e=e*n%r),n=n*n%r,t>>=1n;return e},l=(n,t)=>{if(0n===n&&0n===t)return{x:0n,y:0n,gcd:0n};if(0n===n)return t>0n?{x:0n,y:-1n,gcd:t}:{x:0n,y:1n,gcd:-t};if(0n===t)return n>0n?{x:1n,y:0n,gcd:n}:{x:-1n,y:0n,gcd:-n};let[r,e,o]=[1n,0n,n],[i,s,u]=[0n,-1n,t];for(;;){const n=o/u,t=o-n*u;if(0n===t)break;[r,i]=[i,r-n*i],[e,s]=[s,e-n*s],[o,u]=[u,t]}return u<0n&&(i*=-1n,s*=-1n,u*=-1n),{x:i,y:s,gcd:u}},d=n=>{if(n<0n)throw Error("'n_' must be non-negative");if(0n===n)return 1n;const t=(n,r)=>{if(n>=r)return 1n;const e=(r-n)/2n;if(BigInt((r-2n).toString(2).length)*e<63n){let t=n;for(let e=n+2n;e<r;e+=2n)t*=e;return t}const o=n+e|1n;return t(n,o)*t(o,r)},r=n-BigInt(n.toString(2).match(/1/g)?.length??0),e=(n=>{let r=3n,e=1n,o=1n;for(let i=BigInt(n.toString(2).length)-1n-1n;i>-1n;--i){const s=1n+(n>>i)|1n;o*=t(r,s),r=s,e*=o}return e})(n);return e<<r},m=(n,t)=>BigInt.asUintN(32,n>>(31n&t)|n<<(31n&-t)),b=(n,t)=>n>>>(31&t)|n<<(31&-t),p=(n,t)=>{if(t<1n||t%2n==0n)throw Error("`n` is invalid");for(;n<0n;)n+=t;n%=t;let r=1n;for(;0n!==n;){for(;n%2n==0n;){n/=2n;const e=t%8n;3n!==e&&5n!==e||(r*=-1n)}[n,t]=[t,n],n%4n==3n&&t%4n==3n&&(r*=-1n),n%=t}return 1n===t?r:0n},w=n=>{if(n<0n)return!1;if(0n===n)return!0;let t=1n,r=n;for(;t+1n<r;){const e=(t+r)/2n;e**2n<n?t=e:r=e}return n===t**2n||n===(t+1n)**2n},y=[0x853c49e6748fea9bn,0xda3e39cb94b95bdbn];class B{#n=new BigUint64Array(2);get[Symbol.toStringTag](){return B.name}static getSeed(){return crypto.getRandomValues(new BigUint64Array(2))}constructor(n){n&&n[0]&&n[1]?(this.#n[1]=n[1]<<1n|1n,this.step(),this.#n[0]=n[0],this.step()):(this.#n[0]=y[0],this.#n[1]=y[1])}step(){this.#n[0]&&this.#n[1]&&(this.#n[0]=6364136223846793005n*this.#n[0]+this.#n[1])}get value(){const n=this.#n[0];if(!n)throw Error("empty state");const t=n>>59n,r=BigInt.asUintN(32,(n^n>>18n)>>27n);return b(Number(r),Number(t))}getRand(){return this.step(),this.value}getBoundedRand(n){const t=4294967296;if(n>t)throw Error("bound exceeded limit (2^32)");const r=t%n;for(;;){const t=this.getRand();if(t>=r)return t%n}}async*genRands(n,t){for(let r=0;r<n;r++)yield t?this.getBoundedRand(t):this.getRand()}}const E=(n,t)=>f(1n==(1n&n)?n+t>>1n:n>>1n,t),x=(n,t,r,e)=>{if(n%2n!=1n)throw Error("`n` must be odd");let o=n+1n,i=0n;for(;o%2n==0n;)o>>=1n,i+=1n;const[s,u]=((n,t,r,e)=>{let o=1n,i=r;const s=n.toString(2).slice(1);for(const n of s)[o,i]=[f(o*i,t),E(i*i+e*o*o,t)],"1"===n&&([o,i]=[E(r*o+i,t),E(e*o+r*i,t)]);return[o,i]})(o,n,r,t);let a=u;if(0n===s)return!0;e=c(e,o,n);for(let t=0n;t<i;t++){if(0n===a)return!0;a=f(a*a-2n*e,n),e=c(e,2n,n)}return!1},S=n=>{if(n<=1n)return!1;if(n%2n==0n)return 2n===n;const t=[2n,3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n];for(const r of t)if(n%r===0n)return n===r;if(!(n=>{if(n<=1n)return!1;if(n%2n==0n)return 2n===n;let t=n-1n,r=0n;for(;t%2n==0n;)t>>=1n,r+=1n;const[e,o]=[t,r];let i=c(2n,e,n);if(1n===i)return!0;for(let t=0n;t<o;t++){if(i===n-1n)return!0;i=i*i%n}return!1})(n))return!1;const[r,e]=(n=>{let t=5n,r=p(t,n);for(;r>0n;){if(t=t>0n?t+2n:t-2n,t*=-1n,-15n===t&&w(n))return[0n,0n];r=p(t,n)}return[t,r]})(n);if(0n===e)return!1;return x(n,r,1n,(1n-r)/4n)},I=(n,t)=>{if(t<2n)throw Error("noPrimesFound");for(let r=0;r<1e5;r++){const r=h(n,t);if(S(r))return r}throw Error("noPrimesFound")},R=(n,t=!1)=>{if(n<2)throw Error("noPrimesFound");for(let r=0;r<1e5;r++){const r=g(n,t);if(S(r))return r}throw Error("noPrimesFound")};export{i as BItoBuffer,B as PCGMinimal,S as bailliePSW,s as bufferToBI,l as exEuclidean,d as factorial,o as getHash,g as getRandBIByBitLength,h as getRandBIByRange,R as getRandPrimeByBitLength,I as getRandPrimeByRange,u as getRndInt,n as isEqArray,w as isSquare,p as jacobiSymbol,r as lazify,c as modPow,e as parseCSV,f as residue,b as rot32,m as rot32BI,t as sleep,a as toBigInt};
1
+ const n=(n,t)=>{if(n.length!==t.length)return!1;for(let r=0;r<n.length;r++)if(n[r]!==t[r])return!1;return!0},t=n=>new Promise(t=>{setTimeout(()=>{t()},n)}),r=n=>(...t)=>()=>n(...t),e=n=>{const t=[];let r=[],e="",o=!1;for(let i=0;i<n.length;i++){const s=n[i];'"'!==s||0!==i&&"\\"===n[i-1]?","!==s||o?"\n"!==s||o?e+=s:(r.push(e.trim()),t.push(r),r=[],e=""):(r.push(e.trim()),e=""):o=!o}return r.push(e.trim()),t.push(r),t},o=async(n,t)=>{const r=Buffer.from(n,"utf8"),e=await crypto.subtle.digest(t,r);return Buffer.from(e)},i=n=>{let t=n.toString(16);return 1&t.length&&(t="0"+t),Buffer.from(t,"hex")},s=n=>{const t=n.toString("hex")||"00";return BigInt("0x"+t)},u=(n,t)=>Math.floor(Math.random()*(t-n)+n),a=(n,t)=>{const r=n%t;return r<0n?r+t:r},f=(...n)=>n.map(n=>BigInt(n)),h=(n,t=!1)=>{if(!Number.isFinite(n))throw Error("`length` is not a valid number");if(n<=0)throw Error("`length` must be positive");const r=Math.ceil(n/8);let e=crypto.getRandomValues(Buffer.alloc(r)).toString("binary").slice(0,n);return t&&(e=e.replace(/^./,"1")),BigInt("0b"+e)},m=(n,t)=>{if(n>=t)throw Error("rangeError");const r=t-n,e=r.toString(2).length;return n+(()=>{for(let n=0;n<1e5;n++){const n=h(e);if(n>=c(2n,BigInt(e),r))return n%r}throw Error("Failed to generate a random bigint")})()},c=(n,t,r)=>{if(r<1n)throw Error("`mod` must be positive");if(t<0n)throw Error("`power` must not be negative");for(;n<0n;)n+=r;if(1n===r)return 0n;if(n%r===1n||n%r===0n)return n;if(n===r-1n)return 1n&t?r-1n:1n;let e=1n;for(;t>0n;)1n&t&&(e=e*n%r),n=n*n%r,t>>=1n;return e},l=(n,t)=>{if(0n===n&&0n===t)return{x:0n,y:0n,gcd:0n};if(0n===n)return t>0n?{x:0n,y:-1n,gcd:t}:{x:0n,y:1n,gcd:-t};if(0n===t)return n>0n?{x:1n,y:0n,gcd:n}:{x:-1n,y:0n,gcd:-n};let[r,e,o]=[1n,0n,n],[i,s,u]=[0n,-1n,t];for(;;){const n=o/u,t=o-n*u;if(0n===t)break;[r,i]=[i,r-n*i],[e,s]=[s,e-n*s],[o,u]=[u,t]}return u<0n&&(i*=-1n,s*=-1n,u*=-1n),{x:i,y:s,gcd:u}},d=(n,t)=>{if(n>=t)return 1n;const r=(t-n)/2n;if(BigInt((t-2n).toString(2).length)*r<63n){let r=n;for(let e=n+2n;e<t;e+=2n)r*=e;return r}const e=n+r|1n;return d(n,e)*d(e,t)},g=n=>{if(n<0n)throw Error("'n' must be non-negative");if(0n===n)return 1n;const t=n-BigInt(n.toString(2).match(/1/g)?.length??0),r=(n=>{let t=3n,r=1n,e=1n;for(let o=BigInt(n.toString(2).length)-1n-1n;o>-1n;--o){const i=1n+(n>>o)|1n;e*=d(t,i),t=i,r*=e}return r})(n);return r<<t},b=(n,t)=>BigInt.asUintN(32,n>>(31n&t)|n<<(31n&-t)),w=(n,t)=>(n>>>(31&t)|n<<(32-t&31))>>>0,p=(n,t)=>{if(t<1n||t%2n==0n)throw Error("`n` is invalid");for(;n<0n;)n+=t;n%=t;let r=1n;for(;0n!==n;){for(;n%2n==0n;){n/=2n;const e=t%8n;3n!==e&&5n!==e||(r*=-1n)}[n,t]=[t,n],n%4n==3n&&t%4n==3n&&(r*=-1n),n%=t}return 1n===t?r:0n},y=n=>{if(n<0n)return!1;if(0n===n)return!0;let t=1n,r=n;for(;t+1n<r;){const e=(t+r)/2n;e**2n<n?t=e:r=e}return n===t**2n||n===(t+1n)**2n},B=Symbol(),E=[0x853c49e6748fea9bn,0xda3e39cb94b95bdbn];class S{#n=new BigUint64Array(2);[B];static getSeed(){return crypto.getRandomValues(new BigUint64Array(2))}constructor(n){n&&n[0]&&n[1]?(this.#n[1]=n[1]<<1n|1n,this.step(),this.#n[0]=n[0],this.step()):(this.#n[0]=E[0],this.#n[1]=E[1])}step(){this.#n[0]&&this.#n[1]&&(this.#n[0]=6364136223846793005n*this.#n[0]+this.#n[1])}get value(){const n=this.#n[0];if(!n)throw Error("empty state");const t=n>>59n,r=BigInt.asUintN(32,(n^n>>18n)>>27n);return w(Number(r),Number(t))}getRand(){return this.step(),this.value}getBoundedRand(n){const t=4294967296;if(n>t)throw Error("`bound` exceeded limit (2^32)");const r=t%n;for(;;){const t=this.getRand();if(t>=r)return t%n}}*genRands(n,t){for(let r=0;r<n;r++)yield"number"==typeof t?this.getBoundedRand(t):this.getRand()}}const x=(n,t)=>a(1n==(1n&n)?n+t>>1n:n>>1n,t),N=(n,t,r,e)=>{if(n%2n!=1n)throw Error("`n` must be odd");let o=n+1n,i=0n;for(;o%2n==0n;)o>>=1n,i+=1n;const[s,u]=((n,t,r,e)=>{let o=1n,i=r;const s=n.toString(2).slice(1);for(const n of s)[o,i]=[a(o*i,t),x(i*i+e*o*o,t)],"1"===n&&([o,i]=[x(r*o+i,t),x(e*o+r*i,t)]);return[o,i]})(o,n,r,t);let f=u;if(0n===s)return!0;e=c(e,o,n);for(let t=0n;t<i;t++){if(0n===f)return!0;f=a(f*f-2n*e,n),e=c(e,2n,n)}return!1},v=n=>{if(n<=1n)return!1;if(n%2n==0n)return 2n===n;const t=[2n,3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n];for(const r of t)if(n%r===0n)return n===r;if(!(n=>{if(n<=1n)return!1;if(n%2n==0n)return 2n===n;let t=n-1n,r=0n;for(;t%2n==0n;)t>>=1n,r+=1n;const[e,o]=[t,r];let i=c(2n,e,n);if(1n===i)return!0;for(let t=0n;t<o;t++){if(i===n-1n)return!0;i=i*i%n}return!1})(n))return!1;const[r,e]=(n=>{let t=5n,r=p(t,n);for(;r>0n;){if(t=t>0n?t+2n:t-2n,t*=-1n,-15n===t&&y(n))return[0n,0n];r=p(t,n)}return[t,r]})(n);if(0n===e)return!1;return N(n,r,1n,(1n-r)/4n)},I=(n,t)=>{if(t<2n)throw Error("noPrimesFound");for(let r=0;r<1e5;r++){const r=m(n,t);if(v(r))return r}throw Error("noPrimesFound")},R=(n,t=!1)=>{if(n<2)throw Error("noPrimesFound");for(let r=0;r<1e5;r++){const r=h(n,t);if(v(r))return r}throw Error("noPrimesFound")},F=Symbol();class M{#t;#r;[F];constructor(n,t){0n===t?(this.#r=0n,this.#t=0n===n?0n:n>0n?1n:-1n):t>0n?(this.#t=n,this.#r=t):(this.#t=-n,this.#r=-t),this.#e()}static fromDecimal(n,t=20){if(Number.isNaN(n))return new M(0n,0n);if(Math.abs(n)===1/0)return new M(n>0?1n:-1n,0n);const r=n<0;r&&(n*=-1);const e=BigInt(Math.floor(n));n=1/(n-Number(e));let[o,i]=[1n,e],[s,u]=[0n,1n];for(;`${u}`.length<t+1;){const t=BigInt(Math.floor(n));n=1/(n-Number(t)),[o,i]=[i,t*i+o],[s,u]=[u,t*u+s]}return new M(r?-o:o,s)}#e(){const{gcd:n}=l(this.#t,this.#r);this.#t/=n,this.#r/=n}minus(){return new M(-this.#t,this.#r)}inverse(){return new M(this.#r,this.#t)}add(n){const t=this.#r*n.#r,r=this.#t*n.#r+n.#t*this.#r;return new M(r,t)}substr(n){return new M(this.#t,this.#r).add(n.minus())}multiply(n){const t=this.#r*n.#r,r=this.#t*n.#t;return new M(r,t)}divide(n){return new M(this.#t,this.#r).multiply(n.inverse())}toDecimal(){return Number(this.#t)/Number(this.#r)}toString(){return`${this.#t}/${this.#r}`}valueOf(){return this.toDecimal()}toJSON(){return{type:"Fraction",numerator:this.#t.toString(),denominator:this.#r.toString()}}}export{i as BItoBuffer,M as Fraction,S as PCGMinimal,v as bailliePSW,s as bufferToBI,l as exEuclidean,g as factorial,o as getHash,h as getRandBIByBitLength,m as getRandBIByRange,R as getRandPrimeByBitLength,I as getRandPrimeByRange,u as getRndInt,n as isEqArray,y as isSquare,p as jacobiSymbol,r as lazify,c as modPow,e as parseCSV,a as residue,w as rot32,b as rot32BI,t as sleep,f as toBigInt};
2
2
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":["../src/util.ts","../src/math.ts","../src/pcg-minimal.ts","../src/baillie-psw.ts"],"sourcesContent":[null,null,null,null],"names":["isEqArray","arr1","arr2","length","i","sleep","delay","Promise","resolve","setTimeout","lazify","func","args","parseCSV","csv","rows","row","currentField","isInsideOfQuote","char","push","trim","getHash","async","str","algorithm","utf8","Buffer","from","crypto","subtle","digest","then","hash","BItoBuffer","n","toString","bufferToBI","buf","BigInt","getRndInt","min","max","Math","floor","random","residue","mod","ans","toBigInt","nums","map","getRandBIByBitLength","fixed","Number","isFinite","Error","div","ceil","u32Arr","getRandomValues","Uint32Array","result","Array","padStart","join","slice","replace","getRandBIByRange","diff","bitLength","res","modPow","base","power","exEuclidean","a","b","x","y","gcd","x_1","y_1","c_1","x_2","y_2","c_2","q","c_nxt","factorial","oddProd","num_odds","mid","two_exp","match","odd_part","L_i","tmp","U_i","oddPart","rot32BI","value","rot","asUintN","rot32","jacobiSymbol","nMod8","isSquare","initialState","PCGMinimal","state","BigUint64Array","Symbol","toStringTag","name","getSeed","constructor","seeds","this","step","prev","shifted","getRand","getBoundedRand","bound","limit","threshold","r","genRands","div2Mod","lucasSPP","D","P","Q","d","s","U","V_","k","V","digits","digit","UVSubscript","bailliePSW","smallPrimes","p","d_","s_","millerRabinAtBase2","j","DChooser","getRandPrimeByRange","count","getRandPrimeByBitLength"],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sources":["../src/util.ts","../src/math.ts","../src/pcg-minimal.ts","../src/baillie-psw.ts","../src/fraction.ts"],"sourcesContent":[null,null,null,null,null],"names":["isEqArray","arr1","arr2","length","i","sleep","delay","Promise","resolve","setTimeout","lazify","func","args","parseCSV","csv","rows","row","currentField","isInsideOfQuote","char","push","trim","getHash","async","str","algorithm","utf8","Buffer","from","hash","crypto","subtle","digest","BItoBuffer","n","toString","bufferToBI","buf","BigInt","getRndInt","min","max","Math","floor","random","residue","mod","ans","toBigInt","nums","map","getRandBIByBitLength","fixed","Number","isFinite","Error","byteLen","ceil","result","getRandomValues","alloc","slice","replace","getRandBIByRange","diff","bitLength","res","modPow","base","power","exEuclidean","a","b","x","y","gcd","x_1","y_1","c_1","x_2","y_2","c_2","q","c_nxt","oddProd","num_odds","mid","factorial","twoExp","match","odd","L_i","tmp","U_i","oddPart","rot32BI","value","rot","asUintN","rot32","jacobiSymbol","nMod8","isSquare","__pcg_brand","Symbol","initialState","PCGMinimal","state","BigUint64Array","getSeed","constructor","seeds","this","step","prev","shifted","getRand","getBoundedRand","bound","limit","threshold","r","genRands","div2Mod","lucasSPP","D","P","Q","d","s","U","V_","k","V","digits","digit","UVSubscript","bailliePSW","smallPrimes","p","d_","s_","millerRabinAtBase2","j","DChooser","getRandPrimeByRange","count","getRandPrimeByBitLength","__fraction_brand","Fraction","numerator","denominator","reduction","fromDecimal","denominatorDigits","isNaN","abs","Infinity","isNegative","a_0","p_n","p_n1","q_n","q_n1","a_n1","minus","inverse","add","right","denom","num","substr","multiply","divide","toDecimal","valueOf","toJSON","type"],"mappings":"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"}
package/dist/math.d.ts CHANGED
@@ -47,7 +47,7 @@ export declare const modPow: (base: bigint, power: bigint, mod: bigint) => bigin
47
47
  * @description `ax - by = gcd(a, b)`
48
48
  * @param a
49
49
  * @param b
50
- * @returns `{x, y, gcd(a, b)}`
50
+ * @returns
51
51
  */
52
52
  export declare const exEuclidean: (a: bigint, b: bigint) => {
53
53
  x: bigint;
@@ -57,7 +57,7 @@ export declare const exEuclidean: (a: bigint, b: bigint) => {
57
57
  /**
58
58
  * 階乗を計算する \
59
59
  * 参考: https://qiita.com/AkariLuminous/items/1b2e964ebabde9419224
60
- * @param n_ 整数
60
+ * @param n 整数
61
61
  * @returns 引数の階乗
62
62
  */
63
63
  export declare const factorial: (n: bigint) => bigint;
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,WAG7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,MAAM,EAAE,aAEzC,CAAC;AAGF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,eAAa,WAajE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAiBxD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,WAiB9D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM;;;;CA8B/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAwDlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,WAE/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WA2BhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,YAejC,CAAC"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,WAG7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,MAAM,EAAE,aAEzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,eAAa,WAWjE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,WAiBxD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,WAiB9D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM;;;;CA8B/C,CAAC;AAkDF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAQlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,WAEjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,WAE/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WA2BhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,YAejC,CAAC"}
@@ -1,9 +1,10 @@
1
+ declare const __pcg_brand: unique symbol;
1
2
  /**
2
3
  * PCG-XSH-RR (Permuted congruential generator) 乱数のクラス
3
4
  */
4
5
  export default class PCGMinimal {
5
6
  #private;
6
- get [Symbol.toStringTag](): string;
7
+ readonly [__pcg_brand]: unknown;
7
8
  /** シード値の配列を返す */
8
9
  static getSeed(): BigUint64Array<ArrayBuffer>;
9
10
  /**
@@ -18,13 +19,14 @@ export default class PCGMinimal {
18
19
  * 普通はこれを使う
19
20
  */
20
21
  getRand(): number;
21
- /** `bound` 以下の乱数を返す */
22
+ /** `bound` 未満の乱数を返す */
22
23
  getBoundedRand(bound: number): number;
23
24
  /**
24
- * step の値だけ乱数を生成するジェネレーター関数
25
+ * step の値だけ乱数を生成する
25
26
  * @param step
26
27
  * @param bound
27
28
  */
28
- genRands(step: number, bound?: number): AsyncGenerator<number, void, unknown>;
29
+ genRands(step: number, bound?: number): Generator<number, void, unknown>;
29
30
  }
31
+ export {};
30
32
  //# sourceMappingURL=pcg-minimal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pcg-minimal.d.ts","sourceRoot":"","sources":["../src/pcg-minimal.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;;IAG7B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAED,iBAAiB;IACjB,MAAM,CAAC,OAAO;IAId;;OAEG;gBACS,KAAK,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC;IAa/C,oBAAoB;IACpB,IAAI;IAMJ,+BAA+B;IAC/B,IAAI,KAAK,WAMR;IAED;;OAEG;IACH,OAAO;IAKP,uBAAuB;IACvB,cAAc,CAAC,KAAK,EAAE,MAAM;IAc5B;;;;OAIG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAK7C"}
1
+ {"version":3,"file":"pcg-minimal.d.ts","sourceRoot":"","sources":["../src/pcg-minimal.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,WAAW,eAAW,CAAC;AAQ7B;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;;IAK7B,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEhC,iBAAiB;IACjB,MAAM,CAAC,OAAO;IAId;;OAEG;gBACS,KAAK,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC;IAY/C,oBAAoB;IACpB,IAAI;IAMJ,+BAA+B;IAC/B,IAAI,KAAK,WAMR;IAED;;OAEG;IACH,OAAO;IAKP,uBAAuB;IACvB,cAAc,CAAC,KAAK,EAAE,MAAM;IAc5B;;;;OAIG;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAKvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,YAShD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,kBAMlC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,MAAM,GAChB,IAAI,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,MAC3D,GAAG,MAAM,IAAI,eAEC,CAAC;AAElB;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,eAiCnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,WAAW,mBAAmB,iCAKxE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,wBAInC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,WAGrC,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,YAShD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,kBAMlC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,MAAM,GAChB,IAAI,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,MAC3D,GAAG,MAAM,IAAI,eAEC,CAAC;AAElB;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,eAiCnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,WAAW,mBAAmB,iCAIxE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,wBAInC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,WAGrC,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "name": "@tktb-tess/util-fns",
3
- "version": "0.1.6",
3
+ "version": "0.2.1",
4
+ "description": "utility functions for personal use",
4
5
  "main": "dist/main.js",
5
6
  "type": "module",
7
+ "author": "Tessyrrhaqt",
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/tktb-tess/util-fns"
12
+ },
6
13
  "publishConfig": {
7
14
  "access": "public"
8
15
  },
9
16
  "scripts": {
10
- "build": "rm -r -f dist && rollup -c"
17
+ "build": "rm -r -f dist && rollup -c",
18
+ "test": "npx tsx test/main.test.ts"
11
19
  },
12
- "author": "Tessyrrhaqt",
13
- "license": "MIT",
14
- "description": "個人的に使う用の便利関数ライブラリ",
15
20
  "devDependencies": {
16
21
  "@rollup/plugin-commonjs": "^28.0.6",
17
22
  "@rollup/plugin-node-resolve": "^16.0.1",
@@ -19,7 +24,7 @@
19
24
  "@rollup/plugin-typescript": "^12.1.4",
20
25
  "@types/node": "^24.3.0",
21
26
  "npm-check-updates": "^18.0.2",
22
- "rollup": "^4.47.1",
27
+ "rollup": "^4.48.0",
23
28
  "tslib": "^2.8.1",
24
29
  "tsx": "^4.20.4",
25
30
  "typescript": "^5.9.2"
@@ -16,7 +16,6 @@ import {
16
16
  /**
17
17
  * Miller-Rabin テスト (底2)
18
18
  * @param n 判定する整数
19
- *
20
19
  * @returns
21
20
  */
22
21
  const millerRabinAtBase2 = (n: bigint) => {
@@ -0,0 +1,194 @@
1
+ import { exEuclidean } from './math';
2
+ const __fraction_brand = Symbol();
3
+
4
+ export type FractionData = {
5
+ type: 'Fraction';
6
+ numerator: string;
7
+ denominator: string;
8
+ };
9
+
10
+ export default class Fraction {
11
+ #numerator: bigint;
12
+ #denominator: bigint;
13
+ readonly [__fraction_brand]: unknown;
14
+
15
+ constructor(numerator: bigint, denominator: bigint) {
16
+ if (denominator === 0n) {
17
+ this.#denominator = 0n;
18
+ this.#numerator = numerator === 0n ? 0n : numerator > 0n ? 1n : -1n;
19
+ } else if (denominator > 0n) {
20
+ this.#numerator = numerator;
21
+ this.#denominator = denominator;
22
+ } else {
23
+ this.#numerator = -numerator;
24
+ this.#denominator = -denominator;
25
+ }
26
+
27
+ this.#reduction();
28
+ }
29
+
30
+ /**
31
+ * `number` 型から構成
32
+ * @param value 値
33
+ * @param denominatorDigits 分母の桁数 (十進)
34
+ */
35
+ static fromDecimal(value: number, denominatorDigits = 20) {
36
+ if (Number.isNaN(value)) {
37
+ return new Fraction(0n, 0n);
38
+ } else if (Math.abs(value) === Infinity) {
39
+ return new Fraction(value > 0 ? 1n : -1n, 0n);
40
+ }
41
+ const isNegative = value < 0;
42
+ if (isNegative) value *= -1;
43
+
44
+ const a_0 = BigInt(Math.floor(value));
45
+ const fracPart = value - Number(a_0);
46
+ if (fracPart === 0) {
47
+ return new Fraction(isNegative ? -a_0 : a_0, 1n);
48
+ }
49
+ value = 1 / fracPart;
50
+
51
+ // 漸化式 参考: https://tsujimotter.hatenablog.com/entry/continued-fraction
52
+ // p_0 = 1, p_1 = a_0, p_{n+2} = a_{n+1} * p_{n+1} + p_n
53
+ // q_0 = 0, q_1 = 1, q_{n+2} = a_{n+1} * q_{n+1} + q_n
54
+ let [p_n, p_n1] = [1n, a_0];
55
+ let [q_n, q_n1] = [0n, 1n];
56
+
57
+ while (`${q_n1}`.length < denominatorDigits + 1) {
58
+ const a_n1 = BigInt(Math.floor(value));
59
+ const fracPart = value - Number(a_n1);
60
+
61
+ [p_n, p_n1] = [p_n1, a_n1 * p_n1 + p_n];
62
+ [q_n, q_n1] = [q_n1, a_n1 * q_n1 + q_n];
63
+
64
+ if (fracPart === 0) {
65
+ return new Fraction(isNegative ? -p_n1 : p_n1, q_n1);
66
+ }
67
+
68
+ value = 1 / fracPart;
69
+ }
70
+ return new Fraction(isNegative ? -p_n : p_n, q_n);
71
+ }
72
+
73
+ /**
74
+ * 約分
75
+ */
76
+ #reduction() {
77
+ const { gcd } = exEuclidean(this.#numerator, this.#denominator);
78
+ if (gcd !== 0n) {
79
+ this.#numerator /= gcd;
80
+ this.#denominator /= gcd;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * -1 倍
86
+ * @returns
87
+ */
88
+ minus() {
89
+ return new Fraction(-this.#numerator, this.#denominator);
90
+ }
91
+
92
+ /**
93
+ * 逆数
94
+ * @returns
95
+ */
96
+ inverse() {
97
+ return new Fraction(this.#denominator, this.#numerator);
98
+ }
99
+
100
+ /**
101
+ * 加法 (非破壊的)
102
+ * @param right
103
+ * @returns
104
+ */
105
+ add(right: Fraction) {
106
+ const denom = this.#denominator * right.#denominator;
107
+ const num =
108
+ this.#numerator * right.#denominator +
109
+ right.#numerator * this.#denominator;
110
+ return new Fraction(num, denom);
111
+ }
112
+
113
+ /**
114
+ * 減法
115
+ * @param right
116
+ * @returns
117
+ */
118
+ substr(right: Fraction) {
119
+ return new Fraction(this.#numerator, this.#denominator).add(right.minus());
120
+ }
121
+
122
+ /**
123
+ * 乗法
124
+ * @param right
125
+ * @returns
126
+ */
127
+ multiply(right: Fraction) {
128
+ const denom = this.#denominator * right.#denominator;
129
+ const num = this.#numerator * right.#numerator;
130
+ return new Fraction(num, denom);
131
+ }
132
+
133
+ /**
134
+ * 除法
135
+ * @param right
136
+ * @returns
137
+ */
138
+ divide(right: Fraction) {
139
+ return new Fraction(this.#numerator, this.#denominator).multiply(
140
+ right.inverse()
141
+ );
142
+ }
143
+
144
+ /**
145
+ * `number` 型の小数に変換
146
+ * @returns
147
+ */
148
+ toDecimal() {
149
+ return Number(this.#numerator) / Number(this.#denominator);
150
+ }
151
+
152
+ /**
153
+ * 分数の文字列に変換
154
+ * @returns
155
+ */
156
+ toString() {
157
+ if (this.#numerator === 0n && this.#denominator === 0n) {
158
+ return `NaN`;
159
+ } else if (this.#numerator === 0n) {
160
+ return `0`;
161
+ } else if (this.#denominator === 0n) {
162
+ return this.#numerator < 0n ? `-Infinity` : `Infinity`;
163
+ } else if (this.#denominator === 1n) {
164
+ return `${this.#numerator}`;
165
+ } else {
166
+ return `${this.#numerator}/${this.#denominator}`;
167
+ }
168
+ }
169
+
170
+ valueOf() {
171
+ return this.toDecimal();
172
+ }
173
+
174
+ toJSON(): FractionData {
175
+ return {
176
+ type: 'Fraction',
177
+ numerator: '0x' + this.#numerator.toString(16),
178
+ denominator: '0x' + this.#denominator.toString(16),
179
+ };
180
+ }
181
+
182
+ static parse(text: string) {
183
+ const parsed = JSON.parse(text);
184
+ const { type, numerator, denominator } = parsed;
185
+ if (type !== 'Fraction') throw Error('cannot parse');
186
+ if (typeof numerator === 'string' && typeof denominator === 'string') {
187
+ const num = BigInt(numerator);
188
+ const denom = BigInt(denominator);
189
+ return new Fraction(num, denom);
190
+ } else {
191
+ throw Error('cannot parse');
192
+ }
193
+ }
194
+ }
package/src/main.ts CHANGED
@@ -29,6 +29,8 @@ import {
29
29
  getRandPrimeByRange,
30
30
  } from './baillie-psw';
31
31
 
32
+ import Fraction from './fraction';
33
+
32
34
  export {
33
35
  isEqArray,
34
36
  sleep,
@@ -53,4 +55,5 @@ export {
53
55
  getRandPrimeByBitLength,
54
56
  getRandPrimeByRange,
55
57
  PCGMinimal,
58
+ Fraction
56
59
  };
package/src/math.ts CHANGED
@@ -28,7 +28,6 @@ export const toBigInt = (...nums: number[]) => {
28
28
  return nums.map((n) => BigInt(n));
29
29
  };
30
30
 
31
-
32
31
  /**
33
32
  * `length` ビットの乱数 or `length` ビット以下の乱数を出力する
34
33
  * @param length ビット長
@@ -39,12 +38,12 @@ export const getRandBIByBitLength = (length: number, fixed = false) => {
39
38
  if (!Number.isFinite(length)) throw Error('`length` is not a valid number');
40
39
  if (length <= 0) throw Error('`length` must be positive');
41
40
 
42
- const div = Math.ceil(length / 32);
43
- const u32Arr = crypto.getRandomValues(new Uint32Array(div));
44
- let result = Array.from(u32Arr, (n) => n.toString(2).padStart(32, '0')).join(
45
- ''
46
- );
47
- result = result.slice(0, length);
41
+ const byteLen = Math.ceil(length / 8);
42
+ const buf = crypto.getRandomValues(Buffer.alloc(byteLen));
43
+ let result = Array.from(buf, (n) => n.toString(2).padStart(8, '0'))
44
+ .join('')
45
+ .slice(0, length);
46
+
48
47
  if (fixed) result = result.replace(/^./, '1');
49
48
  // console.log(result);
50
49
  return BigInt('0b' + result);
@@ -57,7 +56,7 @@ export const getRandBIByBitLength = (length: number, fixed = false) => {
57
56
  * @returns `min` 以上 `max` 未満の乱数
58
57
  */
59
58
  export const getRandBIByRange = (min: bigint, max: bigint) => {
60
- if (min >= max) throw Error('RangeError');
59
+ if (min >= max) throw Error('rangeError');
61
60
  const diff = max - min;
62
61
  const bitLength = diff.toString(2).length;
63
62
 
@@ -108,7 +107,7 @@ export const modPow = (base: bigint, power: bigint, mod: bigint) => {
108
107
  * @description `ax - by = gcd(a, b)`
109
108
  * @param a
110
109
  * @param b
111
- * @returns `{x, y, gcd(a, b)}`
110
+ * @returns
112
111
  */
113
112
  export const exEuclidean = (a: bigint, b: bigint) => {
114
113
  // a, b に 0 がある場合の処理
@@ -142,68 +141,68 @@ export const exEuclidean = (a: bigint, b: bigint) => {
142
141
  return { x: x_2, y: y_2, gcd: c_2 };
143
142
  };
144
143
 
144
+ /**
145
+ * min 以上 max 「未満」 の奇数の積を返す
146
+ * @param min 最小値
147
+ * @param max 最大値
148
+ * @returns min 以上 max 未満 の奇数の積
149
+ */
150
+ const oddProd = (min: bigint, max: bigint): bigint => {
151
+ if (min >= max) return 1n;
152
+
153
+ const max_bits = BigInt((max - 2n).toString(2).length);
154
+ const num_odds = (max - min) / 2n;
155
+
156
+ if (max_bits * num_odds < 63n) {
157
+ let result = min;
158
+ for (let i = min + 2n; i < max; i += 2n) {
159
+ result *= i;
160
+ }
161
+ return result;
162
+ }
163
+
164
+ const mid = (min + num_odds) | 1n;
165
+ const lower = oddProd(min, mid);
166
+ const higher = oddProd(mid, max);
167
+ return lower * higher;
168
+ };
169
+
170
+ /**
171
+ * 階乗の奇数部分を計算する
172
+ * @param n 整数
173
+ * @returns 奇数部の積
174
+ */
175
+ const oddPart = (n: bigint) => {
176
+ let L_i = 3n,
177
+ result = 1n,
178
+ tmp = 1n;
179
+ const m = BigInt(n.toString(2).length) - 1n;
180
+
181
+ for (let i = m - 1n; i > -1n; --i) {
182
+ const U_i = ((n >> i) + 1n) | 1n;
183
+
184
+ tmp *= oddProd(L_i, U_i);
185
+ L_i = U_i;
186
+ result *= tmp;
187
+ }
188
+
189
+ return result;
190
+ };
191
+
145
192
  /**
146
193
  * 階乗を計算する \
147
194
  * 参考: https://qiita.com/AkariLuminous/items/1b2e964ebabde9419224
148
- * @param n_ 整数
195
+ * @param n 整数
149
196
  * @returns 引数の階乗
150
197
  */
151
198
  export const factorial = (n: bigint) => {
152
- if (n < 0n) throw Error(`'n_' must be non-negative`);
199
+ if (n < 0n) throw Error(`'n' must be non-negative`);
153
200
  if (n === 0n) return 1n;
154
201
 
155
- /**
156
- * min 以上 max 「未満」 の奇数の積を返す
157
- * @param min 最小値
158
- * @param max 最大値
159
- * @returns min 以上 max 未満 の奇数の積
160
- */
161
- const oddProd = (min: bigint, max: bigint): bigint => {
162
- if (min >= max) return 1n;
163
-
164
- const max_bits = BigInt((max - 2n).toString(2).length);
165
- const num_odds = (max - min) / 2n;
166
-
167
- if (max_bits * num_odds < 63n) {
168
- let result = min;
169
- for (let i = min + 2n; i < max; i += 2n) {
170
- result *= i;
171
- }
172
- return result;
173
- }
174
-
175
- const mid = (min + num_odds) | 1n;
176
- const lower = oddProd(min, mid);
177
- const higher = oddProd(mid, max);
178
- return lower * higher;
179
- };
180
-
181
- /**
182
- * 階乗の奇数部分を計算する
183
- * @param n 整数
184
- * @returns 奇数部の積
185
- */
186
- const oddPart = (n: bigint) => {
187
- let L_i = 3n,
188
- result = 1n,
189
- tmp = 1n;
190
- const m = BigInt(n.toString(2).length) - 1n;
191
-
192
- for (let i = m - 1n; i > -1n; --i) {
193
- const U_i = ((n >> i) + 1n) | 1n;
194
-
195
- tmp *= oddProd(L_i, U_i);
196
- L_i = U_i;
197
- result *= tmp;
198
- }
199
-
200
- return result;
201
- };
202
-
203
- const two_exp = n - BigInt(n.toString(2).match(/1/g)?.length ?? 0);
204
- const odd_part = oddPart(n);
202
+ const twoExp = n - BigInt(n.toString(2).match(/1/g)?.length ?? 0);
203
+ const odd = oddPart(n);
205
204
 
206
- return odd_part << two_exp;
205
+ return odd << twoExp;
207
206
  };
208
207
 
209
208
  /**
@@ -223,7 +222,7 @@ export const rot32BI = (value: bigint, rot: bigint) => {
223
222
  * @returns
224
223
  */
225
224
  export const rot32 = (value: number, rot: number) => {
226
- return (value >>> (rot & 31)) | (value << (-rot & 31));
225
+ return ((value >>> (rot & 31)) | (value << (-rot & 31))) >>> 0;
227
226
  };
228
227
 
229
228
  /**
@@ -1,20 +1,22 @@
1
1
  import { rot32 } from './math';
2
2
 
3
+ const __pcg_brand = Symbol();
4
+
3
5
  /** シードなし時の静的初期化定数 */
4
6
  const initialState = [0x853c49e6748fea9bn, 0xda3e39cb94b95bdbn] as const;
5
7
 
6
8
  /** 乗数 */
7
- const increment = 0x5851f42d4c957f2dn;
9
+ const multiplier = 0x5851f42d4c957f2dn;
8
10
 
9
11
  /**
10
12
  * PCG-XSH-RR (Permuted congruential generator) 乱数のクラス
11
13
  */
12
14
  export default class PCGMinimal {
15
+ /**
16
+ * [state, increment]
17
+ */
13
18
  readonly #state = new BigUint64Array(2);
14
-
15
- get [Symbol.toStringTag]() {
16
- return PCGMinimal.name;
17
- }
19
+ readonly [__pcg_brand]: unknown;
18
20
 
19
21
  /** シード値の配列を返す */
20
22
  static getSeed() {
@@ -25,7 +27,6 @@ export default class PCGMinimal {
25
27
  * @param seeds 64bit整数の配列 (長さ2以上), 省略した場合, 常に同じ値によって初期化される
26
28
  */
27
29
  constructor(seeds?: BigUint64Array<ArrayBuffer>) {
28
-
29
30
  if (seeds && seeds[0] && seeds[1]) {
30
31
  this.#state[1] = (seeds[1] << 1n) | 1n;
31
32
  this.step();
@@ -40,7 +41,7 @@ export default class PCGMinimal {
40
41
  /** 内部状態を1サイクル進める */
41
42
  step() {
42
43
  if (this.#state[0] && this.#state[1]) {
43
- this.#state[0] = this.#state[0] * increment + this.#state[1];
44
+ this.#state[0] = this.#state[0] * multiplier + this.#state[1];
44
45
  }
45
46
  }
46
47
 
@@ -61,12 +62,12 @@ export default class PCGMinimal {
61
62
  return this.value;
62
63
  }
63
64
 
64
- /** `bound` 以下の乱数を返す */
65
+ /** `bound` 未満の乱数を返す */
65
66
  getBoundedRand(bound: number) {
66
67
  /** 32bit 上限 */
67
68
  const limit = 0x100000000;
68
69
 
69
- if (bound > limit) throw Error('bound exceeded limit (2^32)');
70
+ if (bound > limit) throw Error('`bound` exceeded limit (2^32)');
70
71
 
71
72
  const threshold = limit % bound;
72
73
 
@@ -77,13 +78,13 @@ export default class PCGMinimal {
77
78
  }
78
79
 
79
80
  /**
80
- * step の値だけ乱数を生成するジェネレーター関数
81
+ * step の値だけ乱数を生成する
81
82
  * @param step
82
83
  * @param bound
83
84
  */
84
- async *genRands(step: number, bound?: number) {
85
+ *genRands(step: number, bound?: number) {
85
86
  for (let i = 0; i < step; i++) {
86
- yield bound ? this.getBoundedRand(bound) : this.getRand();
87
+ yield typeof bound === 'number' ? this.getBoundedRand(bound) : this.getRand();
87
88
  }
88
89
  }
89
90
  }
package/src/util.ts CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  /**
3
2
  * 配列が等しいかどうかの真偽値を返す
4
3
  * @returns
@@ -83,9 +82,8 @@ export const parseCSV = (csv: string) => {
83
82
  */
84
83
  export const getHash = async (str: string, algorithm: AlgorithmIdentifier) => {
85
84
  const utf8 = Buffer.from(str, 'utf8');
86
- return crypto.subtle
87
- .digest(algorithm, utf8)
88
- .then((hash) => Buffer.from(hash));
85
+ const hash = await crypto.subtle.digest(algorithm, utf8);
86
+ return Buffer.from(hash);
89
87
  };
90
88
 
91
89
  export const BItoBuffer = (n: bigint) => {