Школа 21, Бассейн, день второй и третий
Во втором дне (day02) началось программирование на C.
Не буду сильно вдаваться в стандарты написания кода, лишь удивлюсь запрету
Да, нет. Давайте гореть вместе.
Начну с нашего внутренного линтера, великолепной Норминетты (
Вторая история дня второго заключалась в прошедшей инфе, что мы обязаны использовать одну функцию размером в 25 строк для решения всех задач. Норминетта действительно ругалась на функции длиннее 25 строк и поэтому все начали превращать нормальный код в, хм, тот, в котором сложнее разобраться, хм…
Когда я стал делать задание последнего дня, я понял, что невозможно уместить этот код в 25 строк и решил, что сделаю его при помощи дополнительных функциё и буду таков. Пусть его не засчитают, зато я его решу. Дальше было часа четыре размышлений как решить задачу, закончившиеся эврикой после стояния у доски с маркером. Стоять у доски с маркером, вообще, очень полезно. Код написан, вывод верный, красота.
Решил я, однако, перечитать Норм и внезапно обнаружил в нем, что мы не можем использовать больше 5 функций на один C файл. “¯\(ツ)/¯”, – подумал я, и пошел переписывать все предыдущие задания с целью удобочитаемости.
Также где-то в середине ночи была забавная сессия объяснения вложенных циклов на основе парня, который хочет скосить траву на футбольном поле, также мы веселились с
Не до смеха стало, правда, в тот момент, когда стало не ясно нужно ли оставить в коде для сдачи декларацию внешних функций или нет. Мое мнение за оставление было такое – мы не знаем в каком порядке подключаются файлы для компиляции и, соответственно, должны оставить декларацию внешних функций, чтобы компиляция не зафейлилась в случае, если наш файл подключается первым (или еще чего-нибудь там,
В целом, вторым днем я доволен, последнее задание заставило реально подумать над алгоритмом. Идем дальше.
Третий день (day03) был посвящен указателям.
Мне нечего особо сказать про указатели, ибо я ними более-менее разобрался когда мне это было надо. Единственное, что я забыл, так это то, как поменять местами данные по двум указателям. У меня почему-то постоянно вылетает из головы то, что надо менять местами разименованные указатели. Что ж, надеюсь теперь это я запомнил.
Также смешно было то, что когда пришли люди на третий день с утра и попросили дать наводку на последнее задание дня второго, я смог объяснить ключевую идею итерации массива по номеру позиции с оффсетом, но объяснить свой код, я не смог. Чем дольше я на него смотрел, тем меньше я понимал, что я написал и почему оно работает. Мы полезли дебажитьт это дело и оказалось, что я совершенно случайно вместо простой проверки условия в нужном месте написал сложный и странный гейт, который открывался, когда менялся номер позиции в массиве, и закрывался, когда накапливал в себе достаточно массы (однако это было неважно, потому что он после открытия редактировал данные в треш-регионе массива).
Черт знает, смогу ли я донести принцип работы этого магического кода до проверяющего, но он прекрасен в своей непонятности. Те, кто спишут его, уж точно не смогут. Так что вот вам листинг, а я поеду в школу, сегодня у нас там экзамен.
Не буду сильно вдаваться в стандарты написания кода, лишь удивлюсь запрету
switch
и злорадно порадуюсь запрету for
и do..while
. В остальном, все в поря…Да, нет. Давайте гореть вместе.
Начну с нашего внутренного линтера, великолепной Норминетты (
norminnete
). Она, в целом, довольно точно указывает на несовпадения кода указанному стандарту, однако в моем случае она внезапно отказалась воспринимать стандартный заголовок в кодовом файле. Да, нам нужно указывать красивый свег заголовок в каждом файле, создает он автоматически при помощи vim
или emacs
и все бы ничего, но Норминнета упорно заявляла, что заголовка в моих файлах нет. Сорок минут ушло на то, чтобы понять, что дело в том, что у меня вместо email указано /var/log/mail
, тогда как у 99% остальных участников там указан какой-то внутренний email школы (причем у всех одинаковый). Предположительно, случилось это из-за того, что в нулевой день я решил, после выполнения задания на отправку письма, перестраховаться и отправить его еще из консоли, при помощи sendmail
. Очередное горе от ума?Вторая история дня второго заключалась в прошедшей инфе, что мы обязаны использовать одну функцию размером в 25 строк для решения всех задач. Норминетта действительно ругалась на функции длиннее 25 строк и поэтому все начали превращать нормальный код в, хм, тот, в котором сложнее разобраться, хм…
int i;
i = 0;
while (i < 10)
{
i++;
}
везде стало превращаться вint i;
i = -1
while (++i < 10)
{
}
А дальше там вложенные циклы, дополнительные условия и прочее. В результате этого код, как бы, перестал следовать Норму (название нашего code style), так как стал запутанным и плохо читаемым, зато прошел проверку Норминеттой.Когда я стал делать задание последнего дня, я понял, что невозможно уместить этот код в 25 строк и решил, что сделаю его при помощи дополнительных функциё и буду таков. Пусть его не засчитают, зато я его решу. Дальше было часа четыре размышлений как решить задачу, закончившиеся эврикой после стояния у доски с маркером. Стоять у доски с маркером, вообще, очень полезно. Код написан, вывод верный, красота.
Решил я, однако, перечитать Норм и внезапно обнаружил в нем, что мы не можем использовать больше 5 функций на один C файл. “¯\(ツ)/¯”, – подумал я, и пошел переписывать все предыдущие задания с целью удобочитаемости.
Также где-то в середине ночи была забавная сессия объяснения вложенных циклов на основе парня, который хочет скосить траву на футбольном поле, также мы веселились с
INT_MIN
, также мы просто веселились всяким юморескам.Не до смеха стало, правда, в тот момент, когда стало не ясно нужно ли оставить в коде для сдачи декларацию внешних функций или нет. Мое мнение за оставление было такое – мы не знаем в каком порядке подключаются файлы для компиляции и, соответственно, должны оставить декларацию внешних функций, чтобы компиляция не зафейлилась в случае, если наш файл подключается первым (или еще чего-нибудь там,
gcc
, я в тебе не силен). Также при компиляции обрезанного файла (согласно указаниям мы должны отдавать на проверку файл, который просто не компилится, в нем нет main()
), если оставить декларацию, то произойдет ошибка времени линковки, а если убрать, то ошибка времени компиляции, и второе кажется гораздо хуже, чем первое. Мнение против – опять горе от ума, делают то, о чем нигде особо не сказано.В целом, вторым днем я доволен, последнее задание заставило реально подумать над алгоритмом. Идем дальше.
Третий день (day03) был посвящен указателям.
Мне нечего особо сказать про указатели, ибо я ними более-менее разобрался когда мне это было надо. Единственное, что я забыл, так это то, как поменять местами данные по двум указателям. У меня почему-то постоянно вылетает из головы то, что надо менять местами разименованные указатели. Что ж, надеюсь теперь это я запомнил.
Также смешно было то, что когда пришли люди на третий день с утра и попросили дать наводку на последнее задание дня второго, я смог объяснить ключевую идею итерации массива по номеру позиции с оффсетом, но объяснить свой код, я не смог. Чем дольше я на него смотрел, тем меньше я понимал, что я написал и почему оно работает. Мы полезли дебажитьт это дело и оказалось, что я совершенно случайно вместо простой проверки условия в нужном месте написал сложный и странный гейт, который открывался, когда менялся номер позиции в массиве, и закрывался, когда накапливал в себе достаточно массы (однако это было неважно, потому что он после открытия редактировал данные в треш-регионе массива).
Черт знает, смогу ли я донести принцип работы этого магического кода до проверяющего, но он прекрасен в своей непонятности. Те, кто спишут его, уж точно не смогут. Так что вот вам листинг, а я поеду в школу, сегодня у нас там экзамен.
Комментарии
Отправить комментарий