ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A Zetamac-style mental-math trainer for quant interviews. Black and white, keyboard first.
▶ Practise now: arithmetictrainer.vercel.app
index.html. No server, no internet.localStorage,
key arithmeticTrainer.v1). Nothing is sent anywhere. Another browser or device starts empty.Settings (S) → Export JSON downloads arithmetic-trainer-YYYY-MM-DD.json.
Import JSON shows a preview ("142 rounds, 12 days") and lets you Replace everything
or Merge (rounds are matched by id, so merging the same file twice adds nothing).
If your last export is older than 7 days, the home screen shows a one-line reminder.
Clearing browser data deletes your history, so export regularly.
Every round is saved automatically on this computer, inside the browser's own storage
(localStorage), not inside this folder. Nothing is sent anywhere.
| # | Mode | What it's for |
|---|---|---|
| 1 | Tables | ×÷ (2–12)×(2–12), 60 s. Warm-up; the home screen says "warm-up first" until you play one each day. Once 150 of the 187 table facts have 2+ answers, row 1 becomes Weighted tables (the warm-up from then on) and plain Tables moves to T. |
| 2 | Foundations | ×÷ (2–12)×(2–100), 60 s. One-digit × two-digit and big divisions (637 ÷ 7). |
| 3 | Speed | Zetamac Normal, 60 s. |
| 4 | Interview-ready | Zetamac Normal, 120 s: the real benchmark (step 3). |
| – | Weighted tables | From Review (W), and row 1 of Play after the switch above. Tables, but every × fact and every ÷ (each direction on its own) comes up in proportion to (your median time on it)², so slow facts appear far more often. Facts with no data count as slowest until seen. Counts as the daily warm-up. |
| 5 | Weak-fact drill | Shows your top 10 weak facts, then 60 s: ~70% from them (weighted by slowness, with their fact families), ~30% normal Foundations. |
| 6 | Interview sim | Optiver-style: 80 questions in 8 min. Integers, decimals, fractions, percentages, estimates. Type and press Enter (0.5, .5, 1/2 all accepted); Tab skips; +1 / −1 (penalty set in Settings) / 0. |
| 7 | Custom | Every Zetamac setting: operations, 4 ranges, 30/60/120/300 s. Save named presets. |
| 8 | Squares | 60 s of squares: 11² to 30² by heart, ending in 5 (65²), near 50 (47²), near 100 (97², 104²). Tab skips a question (no point; it counts as a miss in Review). |
| 9 | % and fractions | 60 s: percent of a number (15% of 80), swapped percentages (8% of 25 = 25% of 8), fractions as decimals (3 ÷ 8 = 0.375; .375 works too), decimals as fractions (0.375 → 3/8) and adding or subtracting fractions (1/4 + 1/8 → 3/8). A fraction answer gets two boxes: type the numerator, and once it is right the cursor moves to the denominator; no Enter. Answers are in lowest terms (the screen says so under the boxes). Tab skips. |
| 0 | Mixed tricks |
Modes 8, 9 and 0 are training only: they don't count toward the steps. Each question records which trick it
trains (fact key tr-sq5, tr-x11…), so slow tricks show in Review, and a freeze shows the shortcut
worked on that exact question ("Ends in 5: 6 × 7 = 42, then 25 → 4225").
In Zetamac modes the answer is accepted the moment it's right; no Enter. A full-length wrong
value counts as one wrong attempt (Backspace and keep going). Esc aborts (not saved).
| Step | Mode | Advance when |
|---|---|---|
| 1 | Foundations | day average ≥ 18 for 3 days in a row |
| 2 | Speed | day average ≥ 25 for 3 days in a row |
| 3 | Interview-ready | day average ≥ 60 for 3 days in a row |
A day only counts if it has at least 3 rounds in that step's mode. (In the code and saved data a day of practice is called a session, and the steps keep their old ids P2, P3, P4.) Rounds you enter from zetamac.com (Log screen) count too. Override the step in Settings.
A coach for one goal: 60 or more on Normal 120 s. Open Road to 60 in the top bar and press Enter for today's session. The app runs it round by round and, after each round, says what comes next:
| Block | Rounds | What |
|---|---|---|
| 1 Warm-up | 1 | Tables (Weighted tables once you have passed the switch) |
| 2 Warm-up | 2 | Foundations |
| 3 Focus A | 3 | The drill for the category where you lose the most time |
| 4 Focus B | 3 | The next one (Complements while they are slower than 1.2 s or new) |
| 5 Main | 4 | Speed (Normal 60 s) |
| 6 Benchmark | 2 | Normal 120 s: your official score |
Every 7th session is a test day: the warm-up, then 4 benchmark rounds, no drills. After block 6 the page says Done for today with a summary; anything you play after that is saved as extra and never counts. Close the tab whenever you like: the session resumes where you were.
The top bar has seven tabs: Play, Learn, Matrices, Finance, Review, Stats and Settings.
1–9, 0 or ↑ ↓); then your step as one line with its 3-box streak (open it for the rule and today's count); then all modes. Only one mode is tagged: the warm-up while it is due, then your step's mode.Enter play again, D drill those slow questions, A today’s analysis, H home.N): one lesson per trick (the 14 behind Squares, % and fractions and Mixed tricks), in four groups, each with
your status on it. A lesson (#learn/x11) gives the rule, why it works, 3 fresh worked examples and your numbers.
Enter practises: 10 questions, no clock, nothing saved; a wrong answer or Tab shows the method under the box,
then you type the answer to go on, and the end shows where you needed it. F plays a timed round: 60 s of that
trick, saved as mode LEARN and compared only with rounds of the same trick (shown as "Learn: × 11").
Fractions by heart (#learn/fractions): all 49 fractions with a denominator up to 12, plus 1/16, 3/16, 1/20 and 1/25,
both ways: 3/7 → type the decimal; 0.429… → type 3/7 in the two boxes. Repeating decimals take 3 places, rounded
or cut off (2/3: 0.667 or 0.666); a decimal with … repeats. A grid shows every pair: grey = not seen yet,
inverted = slow or often wrong. Practice and timed rounds pick slow and unseen pairs more often (the weighted-tables
formula), and the method uses the patterns (ninths, elevenths, sevenths, multiples of 1/d).X): 2 × 2 matrix products. Choose the entries (ℤ, integers, or ℕ, natural numbers), the range
(−9 to 9 by default, −12 to 12, or Custom: your own From and To, between −99 and 99) and the length (60 or 120 s);
the choice is remembered. A round shows A × B and four answer boxes:
Space goes to the next box (row by row, wrapping), the arrows move anywhere in the grid, and the next matrix comes
as soon as all four entries are right. outlines the wrong entries (until you edit them), skips, stops.
Each combination of options counts as its own mode ("Matrices, −9 to 9, 60 s") in Log, Progress and the report,
so scores are only compared with rounds of the same kind. Saved as mode , questions as op .P play · C Road to 60 · N learn · X matrices · Q finance · R review · A stats · S settings · D drill · E G L open the Today, Progress or Log section · T light/dark · ? help.
Play: 1–9, 0 or ↑ ↓ select, Enter/Space start. Lesson: Enter practise, F timed round; in practice Tab shows the method.
Road to 60: Enter start or continue today's session (once done: an extra round), 1–5 drills.
Matrices: Enter start; in a round Space next entry, arrows move, Enter outline wrong entries, Tab skip.
Finance: Enter start; sprint H pause and learn (Enter back), Enter checks an estimate, Tab skips; practice Enter check then next, 1–4 choose, S new numbers, C related calculation, Esc done.
Templates live in js/finance-templates.js and register with F.register({...}) (fields documented at the top of
js/finance-core.js):
id (fin.bond.price.3y), a family (arith, quant, fin), a category (the topic shown
on the page), a difficulty (1 one formula, round numbers; 2 a constant or two steps; 3 multi-step or a trap).params(rng) draws the inputs from grids with F.pick, F.int, F.grid (realistic, mentally computable values);
valid(p) rejects silly draws. Choose the answer first when it should be a clean number.prompt(p), answer(p) (the exact value), unit and dp (decimals shown), tol(p) if not "rounded to dp"
(exact, abs, rel: relative tolerances need Enter in a sprint and say "approximately").distractors(p): plausible mistakes computed from the same inputs (the engine drops any within tolerance).
steps(p): the formula with the numbers substituted and the intermediate results. Put every formula, letter or symbol
between $…$ in the same LaTeX subset ('Discount: $\\text{PV} = \\frac{C}{(1 + r)^t}$.'), in prompts, steps and why
too; plain prose and plain numbers stay outside. formula (plain text, used in the
report); why. Add the same formula in LaTeX style to the TEX map at the end of the file (\frac{C}{(1 + r)^t},
\sigma_{\text{day}}\sqrt{252}…): js/tex.js draws it as real maths with the browser's MathML. The supported subset is
listed at the top of js/tex.js; anything else fails the tests (tests/tex.test.js) and would show the plain formula.tests/finance.test.js (REF): a check of the grids and the answer
written separately. npm test runs it on 1,000 seeds; npm run samples -- <id> prints examples to read.Concept questions go in js/finance-bank.js: the right option first (the engine shuffles), a 2–4 sentence explanation,
and optionally the id of the calculation to practise next.
Each question maps to fact keys: 7x8 for tables (× and ÷ share it), 8x30s and 8x36 for larger
×÷, and add-carry, sub-borrow, add-2d+2d… for + and −.
Slowness = median of (time ÷ your median for that operation) × (1 + wrong rate). Attempts older
than 21 days count half. A fact is weak with slowness ≥ 1.5 over ≥ 3 attempts, or a stall in the last 2 days:
an attempt over 3× your median for that operation (and over 1.5 s), so the bar follows your own pace.
Review says "after a freeze" when that stall is the only reason. After a good day (every attempt at or under your median) it is
improving. After 3 good days it is mastered. A bad day sends it back to weak.
Clone the repo and open index.html: there is no build step and the app has no dependencies.
file://..gitignore skips arithmetic-trainer-*.json.npm ci installs the exact Playwright and Supabase client
versions from package-lock.json (the app itself loads the client from jsDelivr with an integrity
hash; tests serve the same file). node_modules/ and test-results/ are not committed.CLIENT_SRI in js/sync.js and in package.json together.<script> tags (no ES modules, no bundler) so double-clicking index.html keeps working.The site is static: Vercel serves the repo as is. vercel.json sets security headers and
.vercelignore keeps tests, docs and package.json out of the deploy (so nothing is installed).
. (already set by vercel.json). Every push to main deploys;
every pull request gets its own preview URL.Accounts are optional. Without step 3–5 the site works exactly the same, without the Account section.
supabase/schema.sql → Run.
It creates the rounds and profiles tables, row-level security (each account sees only its
own rows), and the delete_my_account function.https://arithmetictrainer.vercel.app/**
and https://*-YOUR-TEAM.vercel.app/** (previews).js/config.js, commit, push. Both values are public by design.Before sharing widely: Supabase's built-in email sender only allows a few sign-in emails per hour. Set up custom SMTP (Authentication → Emails → SMTP, for example with Resend's free tier).
Logic (generator, stats, progression, storage) is plain JS with no DOM:
node --test
End-to-end tests drive the real page in your installed Google Chrome with Playwright. Time is
mocked (page.clock), so a 60-second round runs in milliseconds. They are a development tool only:
the app itself has no dependencies and node_modules is not part of it.
npm ci
npm run test:e2e
They cover: auto-accept, wrong-attempt counting, time-up saving, Esc, Enter to replay, Interview
scoring, the home hero, Review views and their URLs, Session deep links and A, Stats sections and old links, the skip link,
help, Learn (lessons, practice with the method on a miss, timed rounds saved as LEARN), Matrices, Finance (sprint auto-accept and
estimates, practice with worked answers, seed links, intuition keys, the interview mix, saving on leave, progress), zetamac.com entry, export → reset → import, and account sync against a fake Supabase
(served over http by tests/e2e/server.js): first sign-in merge, push, tombstones, pull.
docs/design.md (tokens), docs/design-guidelines.md (accessibility, copy, do’s and don’ts) and
docs/design-components.md (every component) describe the black-and-white system. Copy is sentence
case, second person and plain; numbers are monospace with tabular figures.
js/generator.js questions · js/finance-core.js js/finance-templates.js js/finance-bank.js Finance engine, templates, concept questions · js/finance-ui.js Finance tab · js/tex.js LaTeX-subset formulas to MathML · tools/finance-samples.js sample printer (npm run samples, not deployed) · js/lessons.js Learn texts · js/stats.js sessions and weak facts · js/progression.js steps and summary ·
js/storage.js save/load/export/import · js/sync.js account sync · js/config.js Supabase keys · js/game.js play loop · js/charts.js SVG · js/ui.js screens ·
js/app.js bootstrap; tests/ logic tests, tests/e2e/ browser tests. Classic <script> tags on one global window.AT (ES modules fail on file://).
MIT, see LICENSE.
| 60 s mixing the shortcuts: squares, × 11, × 25, products near 100 (97 × 96), difference of squares (47 × 53 = 50² − 3²). Tab skips. |
EnterTabEscMATRIXmxQ): mental math and finance intuition for quant-finance interviews. 57 calculation templates
(arithmetic, quant mental math such as percentages, squares, roots, logs, compounding and expected value, and
finance: rates, bonds, macro, volatility, banks and ALM, VaR and ES, liquidity, statistics) and 78 concept questions.
Choose a mode, the families, a topic and a difficulty; the choice is remembered.
Enter. The unit is beside the box and how to answer is under it.
% and bp suffixes, commas as decimal points and spaces are all understood. Tab skips, Esc stops.
Pause and learn (H, or the button under the box): the clock stops and you see the answer, the formula, the steps
and why. Enter brings the question back; type the answer to go on (no point for that one). After a wrong Enter
the line under the box reminds you. The end screen counts the questions you paused on.Enter next, S same type with new numbers, C the related calculation (after a concept question), Esc done.
Answer by typing or by picking from 4 (the wrong options are typical mistakes: forgetting √t, 1.96 for 99%, a sign…).
"My 5 weakest" draws only your weakest question types.1–4.#finance/q/<template>/<seed>. Saved as mode FINANCE (settings.kind = sprint, practice, intuition or mixed),
questions as op fin with their template and seed; Log and the report show them.D): weak-fact list and drill; M replays mistakes (wrong, or over 3× your median for that operation and over 1.5 s; last 3 days).R): tables heatmap (white = fast, black = slow) with three views, switched by the buttons next to the title or V: Combined (× and ÷ together), Multiplication, and Division (row = divide by, column = answer, so 56 ÷ 7 and 56 ÷ 8 are separate cells). Plus a sortable table of every fact key.A): three big sections you open and close: Today, Progress and Log. Closed, each shows one line (today's rounds, your step's last average, how many rounds). The ones you leave open stay open in this browser. E G L jump to a section; links to the old pages (#session/…, #log, #stats/review/…) still work.
E): one day analysed. Scores round by round against your threshold and your last 7 days played, pace inside rounds (answers and median time per third of the clock), mistakes and freezes with how to think them, each operation today vs usual, and the facts that got faster or slower. ← → move between days; A on any end screen jumps here.G): per-mode charts (day average, best, threshold), trend per day and
days-to-threshold, estimated 120 s score, time per question by operation, average score
by round index (fatigue).L): one row per day, add zetamac.com scores, delete a round (activate its score),
Copy report for Claude: a self-explanatory text report (rules, every day, steps and trends,
per-operation speed, weak facts, tables grid, latest day in detail, fatigue). For the raw
data, Export JSON in Settings.