Skip to content

feat(exercises): выравнивание заданий JS под Python в похожих уроках#822

Merged
fey merged 2 commits into
mainfrom
align-exercises-from-python
May 29, 2026
Merged

feat(exercises): выравнивание заданий JS под Python в похожих уроках#822
fey merged 2 commits into
mainfrom
align-exercises-from-python

Conversation

@fey
Copy link
Copy Markdown
Contributor

@fey fey commented May 29, 2026

Что сделано

По результатам поурочного сравнения заданий приведены задачи JS к питоновским постановкам там, где они расходились по сути (группа A из триажа). Меняли ru/EXERCISE.md + index.js + test.js.

Урок было (JS) стало (как в Python)
50-loops/70-for encrypt FizzBuzz
50-loops/55-return-from-loops hasChar hasAtSymbol (поиск @, ранний return)
50-loops/23-aggregation-strings joinNumbersFromRange sanitizePhoneNumber
50-loops/25-iteration-over-string printReversedWordBySymbol maskCardNumber
50-loops/20-aggregation-numbers multiplyNumbersFromRange calculateElectricityBill (ступенчатый тариф)
31-advanced-strings/30-symbols последний символ сбор слова grip по индексам
48-conditionals/50-else-if red/yellow/green→Stop/Prepare/Go green/yellow/red→go/slow down/stop + unknown
48-conditionals/60-ternary-operator convertText flipFlop
10-basics/40-instructions 3 имени статус доставки (3 строки)
30-variables/11-change создать+переопределить переопределить заранее заданную переменную
40-define-functions/100 printMotto + вызов sayHello (без ручного вызова)
35-calling-functions/135-default-arguments toFixed(2) на 10.1234 расчёт поездки (toFixed 1/2/0)

Адаптация под JS

  • round(n, ndigits)toFixed(d) (в т.ч. toFixed() без аргумента = 0 знаков).
  • '#' * n нет — агрегация строк циклом; проверка символа через ' ()-'.includes(ch).
  • FizzBuzz использует % и условия — они уже пройдены (модуль 48 < 50).

Намеренно НЕ трогали

  • Структурные различия: «нижний регистр» уже в 38/200-properties-methods, truncate уже в 40/320-define-functions-parameters.
  • Удачные JS-идиомы: 45/70-logical-expressions (getLetter через || '' — про truthy/falsy), 33/50-weak-typing (то же выражение).

Проверки

  • vitest — 17/17 (включая все изменённые уроки).
  • biome check — exit 0.

🤖 Generated with Claude Code

fey and others added 2 commits May 29, 2026 21:58
Приведены задания JS к питоновским постановкам там, где они расходились:
- 50-loops/70-for: encrypt → FizzBuzz
- 50-loops/55-return-from-loops: hasChar → hasAtSymbol (поиск @)
- 50-loops/23-aggregation-strings: joinNumbersFromRange → sanitizePhoneNumber
- 50-loops/25-iteration-over-string: printReversed → maskCardNumber
- 50-loops/20-aggregation-numbers: multiply → calculateElectricityBill (тариф)
- 31-advanced-strings/30-symbols: последний символ → сбор слова по индексам
- 48-conditionals/50-else-if: + ветка 'unknown', значения как в Python
- 48-conditionals/60-ternary-operator: convertText → flipFlop
- 10-basics/40-instructions: 3 имени → статус доставки
- 30-variables/11-change: переопределение заранее заданной переменной
- 40-define-functions/100: printMotto → sayHello (без ручного вызова)
- 35-calling-functions/135: toFixed(2) → расчёт поездки (toFixed 1/2/0)

Структурные различия (.lower в methods, truncate в parameters) и удачные
JS-идиомы (getLetter) намеренно не трогались.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Конкатенация text[10] + text[8] + ... падала на tsc (TS2532) из-за
strict + noUncheckedIndexedAccess: индексация строки даёт string | undefined,
а сложение двух таких значений через + не допускается. Склейка через
шаблонный литерал (идиома курса) принимает string | undefined без ошибок.
Результат прежний — grip.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@fey fey merged commit 7528bb0 into main May 29, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant