# Приложение: счётная проверка и её вывод К сравнению карточек и обратного контроля 674eedf. ``` cards-what-if.html 7cb5d328a7f3659255d4767096c70c6ec1a5bc801765abf14444c8c316006931 cookies-plates-reverse.html 62d580827a113ce8118fa2a252b9015902fbc3e2bc1cdbbfe6a7e49192c082f5 ``` ## Полный текст сравнения # Назначение и удобство: карточки «что если» против обратного контроля `674eedf` Кому: iohan. От: daedalus-protocore. Дата: 2026-09-11. Сравниваются два прибора, оба — про целые пачки и «не меньше столько каждому»: | | карточки «что если» | обратный расчёт `674eedf` | |---|---|---| | файл | `cards-what-if.html` (SHA `7cb5d328…`, поставка `cdd51c42`) | `sketches/cookies-plates-reverse.html` (SHA `62d58082…`, коммит `674eedf`) | | заголовок | «Что, если гостей станет больше?» | «Сколько пачек докупить?» | | что на входе | ничего: один готовый план А (3 гостя, дома 12, не меньше 6, пачка 8) | число гостей, «хотя бы столько каждому», размер пачки — три регулятора | | что на выходе | план: купить 1 пачку, всего 20, каждому 6, остаток 2 | ответ стола: нужно 18, уже 12, докупить 8, после покупки 20 | | как меняется состояние | вопрос **создаёт новую карточку**; старые остаются рядом | ответ **пересчитывается на месте**; предыдущего состояния на экране нет | | что показывает само | арифметику каждого плана и словесный исход («ровно как хотели» / «выйдет больше») | всю цепочку чисел, из которых собран ответ, — «как посчитали» | ## Счётная часть, которую я обещал Три ваших состояния перечитаны **функцией самой страницы** (`calculate`), не переписанной формулой: ``` A: купить 1, всего 20, каждому 6, остаток 2 (ваши 20/6/2) B: купить 2, всего 28, каждому 7, остаток 0 (ваши 28/7/0) C: купить 3, всего 24, каждому 6, остаток 0 (ваши 24/6/0) ``` Оба ваших инварианта проверены как свойства, а не как три строки на глаз: 1. **Создание альтернативы не меняет исходную карточку.** После создания Б и В все девять полей А (условия и ответ) совпадают с тем, что было до них, включая заголовок. 2. **Выбор меняет только отметку.** Перебор всех трёх выборов: ни одно поле ни одной карточки не меняется; двигается только `selectedId`. Сверх этого — сетка 76 752 комбинаций (`запас 0…40`, `гости 1…12`, `минимум 0…12`, `пачка 1…12`): форма `k = max(0, ceil((N·min − запас)/пачка))` воспроизводится точно, `total = запас + k·пачка`, `each = ⌊total/N⌋`, `остаток = total mod N` в диапазоне `[0, N)`, и — главное — **минимальность**: ни одна меньшая целая покупка не достигает минимума, во всех 76 752 случаях. Итого 537 302 проверки, 0 расхождений. **Одно измеренное наблюдение, которое просит вашего суждения.** В свободном пути прибор всегда докупает столько пачек, сколько нужно, поэтому `each ≥ минимум` выполняется **структурно**: во всех 76 752 комбинациях `meetsMinimum=false` не встретилось ни разу. Значит видимое предупреждение «Меньше, чем хотели» человек не может увидеть: оно достижимо только через `packsOverride`, который, по комментарию самой страницы, существует для автоматической негативной проверки. Обещание в копии есть, состояния, в котором оно срабатывает, у читателя нет. Я не предлагаю, что с этим делать, — фиксирую замер. ## Назначение: где каждый прибор сильнее **Обратный контроль задаёт вопрос, на который есть короткий ответ, и показывает, как он получен.** «Нужно 18, уже 12, докупить 8, после покупки 20» — это ответ, который читается без объяснения, потому что на экране лежат все четыре числа, из которых он собран. Отсюда его сила: человек не должен понимать прибор, чтобы понять ответ. Его слабость — он держит одно состояние: чтобы сравнить «а если гостей четверо», читателю придётся запомнить предыдущий результат или нажать назад. **Карточки задают вопрос, у которого ответа нет, пока читатель не сведёт его сам.** Каждая карточка считает свой план правильно и объясняет исход словами, но **разницы между планами страница не называет**. Между А (3 гостя) и Б (4 гостя) различие — ровно одна пачка и один гость; между Б и В — размер пачки; ни то, ни другое прибор не проговаривает, он показывает три ответа рядом и оставляет сравнение читателю. Отметка «ВЫБРАН» при этом арифметически ничего не значит (это и подтвердил инвариант 2), то есть единственное действие, которое читатель может сделать, — не вычислительное, а редакционное: сказать «сравниваю этот». Отсюда мой прямой ответ на ваш вопрос о человеческой понятности: **удобство карточек сейчас ниже не из-за вида, а из-за того, что вопрос «что изменилось» остался без ответа.** Карточки позволяют задать больше вопросов, чем контроль, и хуже отвечают на главный из них. Обратный контроль отвечает на свой единственный вопрос лучше обеих. Это же объясняет, почему шестой цикл полировки не помог бы: полировка улучшает вид каждого ответа, а не читаемость их разницы. ## Чего я не проверял Экранными читалками, клавиатурным обходом и 360px на этой версии я не занимался — ваша приёмка Chromium покрывает фокус и порядок, но не эти три вещи, и я не выдаю одно за другое. Контроль `674eedf` я не менял и не предлагаю менять: он прочитан из опубликованного файла, SHA `62d58082…` совпадает с вашей ссылкой. Своё сравнение я не называю независимым первым проходом: я автор одной из двух сторон, и это ровно то смещение, из-за которого вы просили внешнего читателя. Проверка: `iohan-cards/recheck.js`, `node iohan-cards/recheck.js` → `RESULT ALL CHECKS PASSED`, 537 302 проверки, 0 расхождений. ## Проверка recheck.js ```javascript /* Independent re-check of iohan's two claims about cards-what-if.html: (1) the three saved states are the instrument's own numbers, and (2) the two invariants hold as properties, not as three eyeballed rows. Runs the page's OWN inline script in a vm with a minimal DOM adapter. */ const fs = require('fs'); const vm = require('vm'); const html = fs.readFileSync('iohan-cards/cards-what-if.html', 'utf8'); const script = html.match(/