Школа 21, Бассейн, день двенадцатый и тринадцатый

tl;dr ¯\_(ツ)_/¯ day11 ¯\_(ツ)_/¯ 21/100, ¯\_(ツ)_/¯ day12 ¯\_(ツ)_/¯ 0/100, day13 – бинарные деревья, exam02 – 85/100, rush02 – детектор вывода rush01, evalexpr – калькулятор со скобками, BSQ – найти наибольший квадрат одинаковой высот на поле высот.

В одиннадцатом дне, в ex05 (пятом задании) в условии попросили аргументы командной строки записать в односвязный список в обратном порядке. Мы сразу поняли, что будет что-то не то, ибо было неясно нужно ли добавлять имя программы в список. Так и вышло, что почти весь бассейн получил не больше 21 балла, так как понять что действительно от тебя хотят было почти невозможно.

Судя по трейсам нужно было элемент списка, что мог бы содержать имя программы сделать содержащим… Пустую строку. ¯\_(ツ)_/¯. Карл, как это можно было понять из задания? ¯\_(ツ)_/¯

Двенадцатый день был посвящен работе с файлами, но мы в них ничего не писали. Нас попросили написать четыре разные утилиты вывода файлов на экран – обрезанный cat, полноценный cat, tail и hexdump.

В нулевом таске ничего не нужно было учитывать.

Во первом таске не нужно было учитывать флаги cat, но нужно было учесть возможность чтения стандартного ввода и чтения нескольких переданных файлов. Также в задании был намек, что “можно” использовать errno для обработки ошибок. “Можно” обычно в таких ситуациях значит “без учёта этого будет ноль баллов”, поэтому пришлось гуглить какие там, вообще, бывают errno.

В втором таске мы входили почти во все тяжкие, ибо нам обязательно нужен был аргумент -c, который указывал оффсет в байтах для чтения. При этом -c-5, -c5, -c -5 и -c 5 все являются одинаково валидными вводами и делают одно и то же. Если же, например, будет передано -c+5, то поведение программы изменится полностью и вместо, того чтобы вывести последние пять байт, она пропустит первые пять и выведет все остальное. В случае же ошибок и множественного ввода tail, вообще, ведёт себя довольно забавно (порой ставит, порой не ставит переводы строки, например). Ладно.

В третьем таске тебя просят написать hexdump, что может принять, а может и не принять аргумент -C, который сильно меняет вывод программы. hexdump, напомню, выводит на экран данные из файла побайтово в шестнадцатеричной нотации. Для ещё большего усложнения задачи, в случае конца чтения одного файла, он переключается на следующий прямо на место и его вывод можно описать так cat fileA fileB | hexdump == hexdump fileA fileB.

23:41 – я отправляю прост полностью сделанный таск.

23:42 – исправляю последние ошибки Норминетты.

23:43 – добавляю возможность чтения стандартного ввода и не успеваю запушить это в репозиторий.

Тридцать секунд отделяли триумфального Рустама от Рустама, испытавшего полное поражение. Я просто встал и ушел. Было не важно – заблокировал ли я компьютер, что происходит в кампусе, не хочу ли я чаю. Ничего больше не было важно и больше уже совсем ничего не хотелось. Эта ситуация была полной и совершенно точной кульминацией трёх недель пребывания на бассейне.

Где-то в 03:30 я наконец совладал с собой и в злости на весь мир решил распарсить статистику бассейна, так же как это сделано на 21pool. API оказался, почти что, публичным и данные потекли рекой. Так где-то к 06:00 у меня были все проанализированные, отсеянные данные нашего бассейна. Я смотрел на разные таблицы лидеров (уровень, баллы за экзамены, баллы за дни) и имел удовольствие наблюдать себя на первой строчке баллов за экзамен. Меня чуть-чуть отпустило и так я пошел домой.

Поспав всего часа три, я встал и пошел на экзамен. Совершил на нем две невероятно тупые ошибки – один раз попросил меня проверить, не отправив выполненное задание, второй раз не поставил перевод строки в задании где про это было явно написано большими буквами. Так я потерял десять баллов. Потом меня попросили написать интерпретатор языка brainfuck. Это было весело и интересно и моя программа даже прошла два теста из трёх. Но не три. Так я потерял ещё пять баллов и получил точно такое же задание, как я делал на прошлом экзамене.

Ощущение полной моральной уничтоженности начало возвращаться. Явно сказывался недосып. Я не хотел делать бинарные деревья – вот прямо совсем не хотел. Потом я решил, что к этому плохо отнесётся бокал и что все таки стоит что-нибудь запушить на проверку. Сделал первые шесть заданий, а седьмое было доделано в 23:43 и поэтому его отправить не вышло.

Перед этим, правда, стоит ещё поговорить о нуле баллов за день работы с файлами – оказалось, что правило clean не должно было удалять бинарник и в этом было его основное отличие от правила fclean. clean должен удалять object files, а я их и не делал. ¯\_(ツ)_/¯

Поговорим про последние последние проекты на интермишшене…

Комментарии

Популярные сообщения из этого блога

Школа 21, до Бассейна, день первый

Школа 21, Бассейн закончился

Школа 21, Бассейн, день первый