| 109 | return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2; |
| 110 | } |
| 111 | function timeit(fn) { |
| 112 | let t = performance.now(); |
| 113 | fn(); |
| 114 | const first = performance.now() - t; |
| 115 | const iterations = Math.min(50, Math.max(1, Math.round(150 / Math.max(first, 0.01)))); |
| 116 | for (let i = 0; i < Math.min(3, iterations); i++) fn(); |
| 117 | const times = []; |
| 118 | for (let i = 0; i < iterations; i++) { t = performance.now(); fn(); times.push(performance.now() - t); } |
| 119 | return { timeMs: median(times), minMs: Math.min(...times), iterations }; |
| 120 | } |
| 121 | const num = (boxed) => { |
| 122 | const v = boxed.N(); |
| 123 | return typeof v.re === 'number' ? v.re : Number(v.toString()); |