[hackeroid] hscool Entrance Examination -- 98

КкЗ & АО
(Коментарии к Задачам и Анализ Ошибок)

1 1* 2 2* 3

Скажем сразу, я и не надеялся, что среди проходящих конкурс найдутся супергении, сумеющие за три часа расшифровать и решить все три задачи. У меня самого на формальное выполнение задания ушло два часа (правда, я ненадолго отвлекался). В основном, как я и предупреждал, это был тест на умения не сдаваться, самостоятельно настойчиво решать те задачи, которые возникают в процессе выполнения задания.


1. Хитрость первой задачи в том, что если мы начнем присваивать напрямую (допустим X <- Y), то содержимое одной из переменных (X) теряется безвозвратно. Значит, первая операция присваивания одной из переменной (для определенности, X) должна сохранить информацию, связанную с двумя переменными, чтобы затем, используя переменную Y как ключ, можно было восстановить значение X.

Часть кандидатов привело решение

        X <- X*Y
        Y <- X/Y
        X <- X/Y

Это решение дает сбой, когда одна из переменных равна нулю.

Некоторые кандидаты дали два различных решения, когда X>=Y и когда X<Y. По условию задачи использовать операции сравнения и условный оператор запрещалось. Бояться случая X<Y и отрицательных чисел не стоит. Из суммы X+Y всегда можно вычесть как X, так и Y, получая значение другого слагаемого.

Расшифровало эту задачу большинство. Но понять, в чем же она заключается и решить ее, смогло лишь несколько десятков кандидатов. Из задачи на сообразительность и программистскую смекалку она неожиданно превратилась в задачу на проверку логического мышления.

Привел к этому невинный кусочек сыра. Да, кусочком сыра пользоваться разрешено, хотя я слабо представляю, как его можно использовать в решении задач по информатике или математике. В науке принято, что разрешение пользоваться чем-нибудь вовсе не означает обязательства этим воспользоваться. Ни стандартные функции, ни кусочек сыра в правильном решении первой задачи не участвуют.

Детская фантазия заработала. Некоторые брали сыр из холодильника, другие бегали за ним в магазин. Паре человек пришла в голову идея этот кусочек сыра еще и порезать. Одни ели сами, другие честно делились с членами семьи. Впрочем, никто не написал, почему это помогает менять местами содержимое двух переменных. Некоторые связали гастрономию с математикой, советуя пересчитать кусочки сыра. Помогло это им мало.

Какие только ответы я не находил! Кто-то хотел переставлять X и Y с одной полки(!?) на другую. Вся хитрость была в том, чтобы делать это одновременно. Некоторые в ответе просто писали "Компьютерная Мышь".

Один кандидат пошел еще дальше, чем расшифровка и стал трактовать задачу так, как седовласые равви толкуют Талмуды. Вот его ответ: "кусочек сыра -- курсор мыши; X и Y -- кнопки мыши". Откуда это взялось непонятно. В любом случае, так глубоко смысл я не зашифровываю. Если бы я хотел написать про курсор мыши, я бы так и написал. Я подразумевал именно то, что было зашифровано -- кусочек сыра, не имеющий никакого отношения к задаче. Наверное, в школе этого девятикласника слишком сильно дали Основы Христианства и Духа (или как там это сейчас называется), научив подменять логические рассуждения образами и аллегориями.

Иные даже приводили лже-"обоснования", де при нажатии на кнопку мыши координаты X и Y меняются местами. Где вы увидели, что X и Y -- координаты? В задаче было написано "пыннемерех", что расшифровывается как "переменных". Странная 1019 школа стала чертить координатную плоскость, вычислять загадочные интервалы...

Кто-то писал "от перемены мест, ответ не меняется". Очень даже меняется, господа кандидаты. Поменяешь местами переменные -- правильно решишь задачу. Не поменяешь -- уйдешь с заслуженным минусом.

Списывание приводило к отрицательному результату. Откуда-то возникли фолклорные(?) переменные X1 и Y1 (хотя было сказано -- "Без иинавозьлопся доньлетинлопой птямаи (пыннемерех,", то есть "без использования дополнительной памяти (переменных,") и пошли кочевать из листочка в листочек. Кто-то решил, что надо не поменять местами X и Y, а поменять у них знак. Неправильный ответ вновь вызвал целую серию неправильных ответов у списывающих.

Любопытно было проследить на практике работу "испорченного телефона". Кто-то, подсмотрев начало BASIC-строчки "LET X=" (кстати, что за архаичный BASIC!), ошибочно записал на своем листочке "KETX". Следующий списывающий переписал это слово как "НЕТИ", списавший у списывающего уже как загадочное слово "НЕИТ". Страшно подумать, что произойдет, если обучить этих людей программированию и поручить им рассчитывать, скажем, Чернобыльский реактор. Ясно, что, столкнувшись со сложной проблемой, они не станут пытаться ее решить самостоятельно, а бездумно скопируют фрагмент чужого кода, даже не попытавшись его понять.

Я бы не доверил подобным НЕИТчикам странствовать в глубинах электронной сети, особенно под угаданным паролем в суперзасекреченной американской военной базе. Хотя бы потому, что хочу, чтобы выжили остальные люди, любящие напрягать собственный интеллект, а не списывать.

Три вещи -- стремление использовать все имеющиеся средства, привычка к тому, что X и Y -- название осей координат и привычка бездумного копирования привели большинство к неправильному результату.

Только что, кстати, обнаружил работу юной фокусницы. Проделав запутанные математические операции с X и Y, она поменяла их местами, а затем, используя обратные операции, восстановила первоначальные значения, но уже в других переменных. Если бы я был организатором курсов по игре в наперстки, она прошла бы без вопросов. Но, к сожалению или к счастью, для того, чтобы стать Хэкером, кроме умения "пудрить мозги" нужно еще и уметь честно решать сложные задачи.


1*. Как и в предыдущей задаче, решение с делением дает сбой, если одна из переменных равна нулю. Решение, получающееся заменой деления на вычитание, дается в ответе.

Задача была предназначена тем, кто уже был знаком с решением предыдущей задачи. Переход 1->1* примерно такой же сложный, как 0->1. Роль подсказки в первом задании играло слово "ликсечигое" ("логические").

Из листочка в листочек кочевала непонятно откуда взявшееся заклинание с оператором PRINT и точками с запятой. Какое отношение оно имело к решению, непонятно.

Один школьник написал "x=y and y=x". Если он имел в виду под "=" сравнение, а не присваивание, под "and" -- логическую операцию, а свое высказывание считал истинным, то он глубоко ошибался. Отнюдь не всегда x равняется y. Хотя, если уж равно, то, разумеется, и y равно x.


2. В этой задаче требовалось составить инструкцию (последовательность действий, алгоритм) для исполнителя Тупой Сержант. Многие решили даже не читать задание, поставив число 27 (следующее число по спирали) вместо двух точек. Поставили -- и проиграли, ибо задание было далеко не таким простым.

Одна шестикласница, дошедшая до перевода слов "ржсгьж туп ожпусйчбужмэоьц шйтжм" ("первые сто неотрицательных чисел") гордо написала "не проходила отрицательные числа!" и перестала выполнять задания. Дорогие кандидаты, если вы ищете повода не решать задачи -- повода не нужно. Можно было сразу положить задание и выйти из зала, как многие и сделали. Если бы девочка попыталась понять, что же требуется в задаче, то она бы выяснила, что никакие отрицательные числа в задаче не требуются. Тем более, что Тупой Сержант их не знает. Видимо тоже в школе плохо учился.

Вместо этого кандидатка лишь продемонстрировала отсутствие у себя необходимых знаний. Гордится отсутствием знаний не только глупо, но и опасно. Рискуешь выйти зимой, в тридцатиградусный мороз, одетой в панамку и шорты, замерзнуть.

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

Те кандидаты, которые все-таки нашли необходимую последовательность действий, испытывали трудности с тем, когда остановиться. По их команде Тупой Сержант написал бы больше сотни чисел. Сто чисел полностью заполняют квадрат 10x10. Небольшая сложность в том, чтобы не выйти из этого квадрата на новый виток спирали.

Обидно, что никто не смог рассчитать координаты центра листочка в клеточку.

Большинство решивших эту задачу представила ответ в виде программы на алгоритмическом языке академика Ершова ("ершолом") или даже на Си! Навряд ли ТУПОЙ Сержант смог бы исполнить написанное. Я хотел получить ответ в бюрократическом виде, в форме инструкции. Если бы еще была шапка "Исполнителю: Тупому Сержанту от (ФИО)", я бы очень обрадовался.


2*. Как и задание 1*, эта задача не представляет сложности для разбирающихся в компьютере людей. Так как она решается сведением к предыдущей задаче, с ней могли справиться лишь те, кто решили вторую задачу.

Ее сложность в том, что из арифметических операций Супертупой Сержант обучен лишь увеличению и уменьшению на единичку целых чисел, а для вывода чисел требуется знание деления с остатком.


3. Третье задание, видимо, сыграло роль лишь в отсеве пугливых и нервных кандидатов. Справочная информация про синусы и косинусы, которую я дал после задания, заставила многих сдаться и даже гордо написать что-то про то, что "де, мы еще маленькие и вообще подобного не проходили".

Я уже знаю, что напишу в следующем году после задания. Что-нибудь про градиент и дивергенцию. Справочная информация, как и кусочек сыра, дополнительная, и относиться к ней надо либо положительно, либо никак.

Если бы я каждому раздал по справочнику Выгодского "Элементарная Математика", никто бы не стал протестовать, хотя там есть все формулы тригонометрии.

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

Для тех, кто все-таки расшифровал третью задачу или пытался угадать задание без расшифровки, взломать программу оказалось неожиданно трудно. ДО того, что команда CIRCLE рисует окружность, а LINE -- прямую, догадались многие. Но точные координаты не смог угадать никто. Видимо знание геометрии и призвание взломщика у кандидатов не прекрываются, а жаль. В старину по поводу каждой взломанной программы выпускались красивые графические "демки".

А всего-то требовалось найти координаты двух точек! Можно было постараться.

Многие пришли к тому, что не обязательно считать синусы и косинусы вручную, хотя угол 15 градусов (15=45-30=30/2) и располагал к этому. Вычисления вполне можно было возложить на компьютер, как показано в ответе, строчка 570. Но базовые представления о том, что же такое синус и косинус, иметь было все-таки необходимо. К счастью, необходимую информацию я изложил на листочке после зашифрованных заданий.

AtH//HPG@hMoscow
1998г, Москва
исправления и добавления: 1999г, Москва

<<<EOF>>>
E-mail: hscool@netclub.ru
Hosted by uCoz