День 19 · задания

День 19 — задания

Практика прошла по ходу чтения — в блоках «Попробуйте сейчас». Здесь итог: всё, что сверит course check 19. Если какой-то пункт пропустили, вернитесь к странице, которая указана рядом. Оглавление дня:

▶ Выполните
course toc 19

Программы дня читают файл по имени. Проверка запускает их в отдельном каталоге, куда кладёт свой orders.csv или stock.txt: часть файлов — пример из условия, часть скрыта. На скрытом случае проверка покажет файл и то, что напечатала программа, но не покажет, что было нужно, — это решаете вы по условию.


1. Байты и len — страница 1

1.1. Посчитайте байты и буквы одной строки в терминале — обе команды из «Попробуйте сейчас: байты и буквы»:

▶ Выполните
printf 'Болт' | wc -c
printf 'Болт' | wc -m

1.2. Предсказание:

▶ Выполните · выделенное замените своим
course answer day19.q1 ЧИСЛО

Вместо ЧИСЛО — то, что напечатает len для строки из вопроса.

Готово, когда: ✔ у пунктов «Считали байты и буквы строки: wc -c и wc -m» (t_bytes) и «Что выведет: len русской строки» (q1).

2. Индекс и срез строки — страница 2

▶ Выполните · выделенное замените своим
course answer day19.q2 ОТВЕТ

Вместо ОТВЕТ — то, что появится на экране.

Готово, когда: ✔ у пункта «Что выведет: срез русской строки по байтам» (q2).

3. Руны и починка fix1 — страница 3

3.1. Предсказание — три номера через пробел:

▶ Выполните · выделенное замените своим
course answer day19.q3 ЧИСЛО ЧИСЛО ЧИСЛО

3.2. Описание функции для рун:

▶ Выполните
go doc utf8.RuneCountInString

3.3. Почините ~/gocourse/day19/fix1: колонка ровная по буквам. Одна-две изменённые строки, import не считается. Строки width := и names := не меняйте — проверка запустит программу ещё раз с другой шириной и другими названиями.

Готово, когда: ✔ у пунктов q3, «Смотрели описание функций для рун через go doc» (t_godoc) и «fix1: колонка ровная по буквам…» (fix1).

4. line.go и тест — страница 4

В ~/gocourse/day19/report — line.go с функциями parseLine и fitName по TASK.txt и ваш line_test.go. Случаи теста пишете сами, и среди них обязательно: fitName на русском названии короче ширины и на русском названии длиннее ширины, parseLine на верной строке и на строке, где полей не четыре. Проверка подменит line.go тремя неверными версиями — тест обязан упасть на каждой — и прогонит его на правильной версии другой записи — там он обязан пройти.

▶ Выполните
cd ~/gocourse/day19/report
cat TASK.txt
go test -v .

Готово, когда: в тесте есть русские названия короче и длиннее ширины и строка с неверным числом полей; ✔ у пунктов «Тест в report ловит fitName, которая считает байты вместо букв» (testfit) и «Тест в report ловит parseLine, которая пропускает строку с неверным числом полей» (testparse).

5. Файл по имени и починка fix2 — страница 5

5.1. Предсказание:

▶ Выполните · выделенное замените своим
course answer day19.q4 ЧИСЛО

5.2. Почините ~/gocourse/day19/fix2: перевод строки в конце файла — не битая строка, а пустая строка в середине — битая. До трёх изменённых строк.

▶ Выполните
cd ~/gocourse/day19/fix2
go run .
echo $?
diff ~/.course/orig/day19/fix2/main.go main.go

Готово, когда: ✔ у пунктов q4, «fix2: перевод строки в конце файла — не битая строка…» (fix2) и «Починки точечные: fix1 — до 2 строк, fix2 — до 3» (fixsmall).

6. Отчёт по выгрузке — страница 6

Напишите ~/gocourse/day19/report/main.go по TASK.txt: колонка названий через fitName с вашей шириной, суммы и итог в обычный вывод, битые строки — в поток ошибок с номером, программа идёт дальше, код возврата 1, если битые строки были.

▶ Выполните
cd ~/gocourse/day19/report
go run .
go build -o prog .
./prog > out.txt; echo $?
cat out.txt

Потом ритуал и коммит:

▶ Выполните
cd ~/gocourse/day19
gofmt -l .
go vet ./...
go test ./...
git add .
git commit -m "report: отчёт по выгрузке"

Готово, когда: ✔ у пунктов «report: колонка названий по буквам…» (report), «report: битые строки — в поток ошибок…» (broken), «Код fix1, fix2 и report отформатирован, go vet молчит» (code_fmt) и «Работа дня записана в репозиторий» (git) — не меньше четырёх непустых коммитов.

7. Словарик ошибок — страница 6

Допишите ~/errors.md до тридцати восьми строк вида «текст ошибки — что значило», вместе с прошлыми днями. Между ошибкой и разбором — тире с пробелами вокруг.

Готово, когда: ✔ у пункта «Словарик ~/errors.md: минимум тридцать восемь разборов» (errors).

8. Звёздочка

В зачёт не входит.

Готово, когда: на вопросы из пунктов есть ответ; course check эти задания не сверяет.


Порог: 13 пунктов из 16. После зачёта — контрольные вопросы: course quiz 19.