DigitableCourses
Настройки портала
Показать возможности портала

Локально и без аккаунта. Аккаунта нет, регистрация не нужна: введённое в инструменты остаётся в localStorage браузера и на сервер не уходит.

Свой счётчик считает открытия страниц и дочитывания: уезжает адрес и десятая доля текста. Без cookies и чужих счётчиков, IP не хранится, Do Not Track уважается. Как это проверить

Репозиторий портала не выложен, «открытым кодом» мы его не зовём. Открыто это:

Живёт портал на донатах, платных консультациях и разборах по запросу и покупке Workbench.

Планов делать курсы платными нет.

flang

Заданий: 8

Напишите функцию. Запустите примеры и проверку доказательств.

Что это за раздел и что означают виды заданий

К вашему коду проверка дописывает утверждения задания (их видно под полем) и запускает flang check --proof. Задание засчитано, когда компилятор ответил кодом 0: всё разобрано, примеры сошлись, всё доказано. Компилятор скачивается со страниц языка при первой проверке — около 10 МБ, дальше он берётся из кеша браузера; текст вашего решения никуда не уходит. Те же задания с пояснениями — на странице практикума.

build
Вы пишете код, вердикт выносит компилятор: задание засчитано, только если код проходит проверку.

Где лежит ваш прогресс и чем за это заплачено

Регистрации на портале нет и не будет. Состояние живёт в вашем браузере (localStorage, ключи digitable:learn:*) и никуда не отправляется: ни один ответ не уходит на сервер, проверка целиком идёт здесь.

  • очистка данных браузера стирает всё, и восстановить нечем — кроме файла выгрузки, который вы сделали заранее;
  • синхронизации между устройствами нет: её роль исполняет тот же файл;
  • ответы и эталоны лежат на этой же странице, и увидеть их может каждый. Это решение, а не недосмотр: движок помогает учиться, а не охраняет оценку. Прятать ключ, который физически находится у читателя, — изображать защиту, которой нет.

Первая функция

build

Функция «Квадрат» сейчас всегда отвечает 0. Напишите тело так, чтобы она возвращала н, умноженное на само себя.

Проверка допишет к вашему коду:

утверждение «квадрат трёх — девять»
  утверждаем («Квадрат» от 3) равно 9

утверждение «квадрат минус четырёх — шестнадцать»
  утверждаем («Квадрат» от -4) равно 16

Эталон, объяснение и разбор

Объяснение

Умножение пишется словами: н умножить на н.

Условие целиком: /flang/practice/#square

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.01-square · источник: data/flang-site.json#square

Ветвление и обещание

build

«Модуль» обещает результат не меньше нуля, но сейчас просто возвращает х. Добавьте ветвление, чтобы ответ был верным и обещание доказывалось.

Проверка допишет к вашему коду:

утверждение «модуль минус пяти — пять»
  утверждаем («Модуль» от -5) равно 5

утверждение «модуль семи — семь»
  утверждаем («Модуль» от 7) равно 7

Эталон, объяснение и разбор

Объяснение

если х меньше 0, то 0 минус х, иначе х. Компилятор знает условие ветки внутри каждой ветки.

Условие целиком: /flang/practice/#abs

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.02-abs · источник: data/flang-site.json#abs

Тип с вариантами

build

Светофор переключается так: красный → зелёный → жёлтый → красный. Напишите «Следующий» через разбор по вариантам.

Проверка допишет к вашему коду:

утверждение «после красного — зелёный»
  утверждаем («Следующий» от вариант Красный) равно вариант Зелёный

утверждение «после зелёного — жёлтый»
  утверждаем («Следующий» от вариант Зелёный) равно вариант Жёлтый

утверждение «после жёлтого — красный»
  утверждаем («Следующий» от вариант Жёлтый) равно вариант Красный

Эталон, объяснение и разбор

Объяснение

разбор сигнал, затем «случай Красный» и «то вариант Зелёный» для каждого варианта.

Условие целиком: /flang/practice/#traffic

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.03-traffic · источник: data/flang-site.json#traffic

Свёртка списка

build

Посчитайте сумму элементов списка. Циклов в языке нет — нужна свёртка.

Проверка допишет к вашему коду:

утверждение «сумма пустого списка — ноль»
  утверждаем («Сумма» от пустой список) равно 0

утверждение «один, два, три — шесть»
  утверждаем («Сумма» от [1, 2, 3]) равно 6

Эталон, объяснение и разбор

Объяснение

свёртка элементы начиная с 0 как акк и эл → акк плюс эл

Условие целиком: /flang/practice/#sum

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.04-sum · источник: data/flang-site.json#sum

Бизнес-правило с обещанием

build

Скидка 500 положена заказу от 10 000, меньшим заказам скидки нет. Скидка не может быть больше суммы — это обещание должно доказываться.

Проверка допишет к вашему коду:

утверждение «с 12 000 скидка 500»
  утверждаем («Скидка» от 12000) равно 500

утверждение «с 2 000 скидки нет»
  утверждаем («Скидка» от 2000) равно 0

Эталон, объяснение и разбор

Объяснение

Ветка по условию «сумма не меньше 10000»; в ветке «то» компилятор знает, что 500 не больше суммы.

Условие целиком: /flang/practice/#discount

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.05-discount · источник: data/flang-site.json#discount

Функция, которая не завершается

build

Компилятор отказывается принять «Сумма до»: рекурсия не уменьшает аргумент, и функция зациклится. Исправьте вызов.

Эталон, объяснение и разбор

Объяснение

Рекурсивно звать нужно с меньшим числом: («Сумма до» от (н минус 1)).

Условие целиком: /flang/practice/#termination

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.06-termination · источник: data/flang-site.json#termination

Обещание, на которое можно сослаться

build

Проверка добавит функцию «Через удвоение» и теорему, которая ссылается на свойство «удвоение длины не меняет» функции «Удвоить все». Объявите это свойство.

Проверка допишет к вашему коду:

тотальная функция «Через удвоение»
  принимает элементы: список числа
  возвращает список числа
  для всех элементы обеспечивает «через удвоение длина та же» (длина результат) равен (длина элементы)
  «Удвоить все» от элементы

теорема «через удвоение длина та же»
  дано элементы: список числа
  утверждаем (длина результат) равен (длина элементы)
  по свойству «удвоение длины не меняет»
  следовательно доказано

Эталон, объяснение и разбор

Объяснение

для всех элементы обеспечивает «удвоение длины не меняет» (длина результат) равен (длина элементы)

Условие целиком: /flang/practice/#property

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.07-property · источник: data/flang-site.json#property

Доказательство индукцией

build

Допишите тело индукционного шага в теореме «шаг растит счёт на один».

Эталон, объяснение и разбор

Объяснение

В случае «Следующий» запишите «то по предположению».

Условие целиком: /flang/practice/#natural

Компетенции и источник задания

Компетенции: backend.junior.language. Подтверждённое задание не переставляет отметку самооценки — оно только показывает подсказку рядом с пунктом на /career/.

id: flang.practice.08-natural · источник: data/flang-site.json#natural