День 18 — задания
Практика прошла по ходу чтения — в блоках «Попробуйте сейчас». Здесь итог: всё, что сверит course check 18. Если какой-то пункт пропустили, вернитесь к странице, которая указана рядом. Список страниц:
course toc 181. Четыре предсказания — страницы 1, 2, 3, 5
Сделать: сдать ответы на четыре вопроса «что выведет».
course answer day18.q1 ЧИСЛО ЧИСЛО ЧИСЛО
course answer day18.q2 ЗНАЧЕНИЕ ЗНАЧЕНИЕ ЗНАЧЕНИЕ ЗНАЧЕНИЕ
course answer day18.q3 ЧИСЛО ЧИСЛО
course answer day18.q4 ЧИСЛО ЧИСЛОЗначения — через пробел, в том порядке, в каком их печатает программа. Можно отправить заново — засчитывается последний ответ.
Готово, когда: пункты q1, q2, q3, q4 зелёные.
2. Справка по связке — страница 4
Сделать: прочитать справку по обеим частям связки.
go doc maps.Keys
go doc slices.SortedГотово, когда: пункт t_doc зелёный.
3. Починка fix2 — страница 2
Сделать: программа в ~/gocourse/day18/fix2 печатает артикул с остатком 0 как остаток 0 шт., а «нет в каталоге» — только для артикула, которого в map нет. Правка — одна-две строки.
cd ~/gocourse/day18/fix2
go run . < example.txt
diff ~/.course/orig/day18/fix2/main.go main.goГотово, когда: пункт fix2 зелёный. Проверка подаёт и другие артикулы каталога; правка больше двух строк не принимается.
4. Программа tally — страница 4
Сделать: программу подсчёта коробок по артикулам. Условие и свои артикулы:
cd ~/gocourse/day18/tally
cat TASK.txt
go run . < example.txtПодсчёт — в самой map (counts[sku]++), печать — по возрастанию артикула.
Готово, когда: пункт tally зелёный. Проверка подаёт на вход другие артикулы в другом порядке, пустые строки и пустой ввод. Программа, которая считает не в map, или с печатью прямо из range зачёта не получает.
5. Функция totals, печать и тест — страницы 4 и 5
Сделать: в ~/gocourse/day18/group — функцию totals в totals.go, печать итогов в конце main.go и тест totals_test.go.
cd ~/gocourse/day18/group
cat TASK.txt
go run . < example.txt
go test .Готово, когда: пункты group, grouptest и groupzero зелёные. group прогоняет программу на скрытых вводах и отдельно проверяет саму функцию totals. grouptest и groupzero подменяют totals.go двумя неверными версиями — одна перезаписывает количество, другая теряет артикул с нулём — и требуют, чтобы ваш тест на каждой упал, а на другой правильной записи функции прошёл.
6. Починка fix1 — страница 5
Сделать: программа в ~/gocourse/day18/fix1 перестаёт падать с паникой. Правка — одна-две строки.
cd ~/gocourse/day18/fix1
go run . < example.txt
diff ~/.course/orig/day18/fix1/main.go main.goГотово, когда: пункт fix1 зелёный.
7. Таблица trace — страница 6
Сделать: заменить все ? в ~/gocourse/day18/trace/table.txt по правилам 30–32. program.go не менять.
cd ~/gocourse/day18/trace
cat program.go
cat table.txtГотово, когда: пункт trace зелёный.
8. Формат и vet — страницы 4 и 5
Сделать: привести в порядок код заданий.
cd ~/gocourse/day18
gofmt -l tally group fix1 fix2
go vet ./tally ./group ./fix1 ./fix2Если gofmt -l печатает имена файлов — gofmt -w с теми же каталогами или Ctrl+S в VS Code.
Готово, когда: пункт code_fmt зелёный. Пока нет ни программы tally с записью в map, ни своего теста в group, он красный: на нетронутых заготовках проверять нечего.
9. Коммиты — страницы 1–6
Сделать: репозиторий заводится на первой странице, дальше коммит в конце каждого задания — не меньше четырёх коммитов с изменениями в ~/gocourse/day18.
cd ~/gocourse/day18
git status -s
git add .
git commit -m "что сделали"
git log --onelineГотово, когда: пункт git зелёный: коммитов с изменениями не меньше четырёх, в последнем tally/main.go и group/totals.go отличаются от заготовок и есть тест в group.
10. Словарик ошибок — страница 6
Сделать: в ~/errors.md — минимум 36 строк вида «текст ошибки — что значило». Между ошибкой и разбором — тире с пробелами вокруг.
Готово, когда: пункт errors зелёный.
11. Звёздочка
В зачёт не входит, course check 18 эти задания не смотрит.
- В
tallyнапечатайте артикулы не по возрастанию, а по убыванию числа коробок. Подсказка: соберите в срез те ключи, у которых число коробок равно максимуму, напечатайте, уменьшайте максимум — только циклы иslices.Sorted, без новых функций. - Напишите функцию
missing(stock map[string]int, order []string) []string— артикулы заказа, которых нет в каталоге, по возрастанию. Тест к ней — таблицей, со случаем «в каталоге есть с остатком 0». - Замените в
fix1подсчёт разных артикуловlen(boxes)на свой счётчик без map и посмотрите, сколько строк и какой поиск для этого нужен.
Готово, когда: программа из первого пункта печатает одно и то же на трёх запусках подряд, а тест из второго падает, если в функции заменить !ok на stock[sku] == 0.
Порог: 12 пунктов из 15. После зачёта — контрольные вопросы: course quiz 18.