hscool Entrance Examination -- 98
Ответы
к Вступительным заданиям 1998г.
в Гражданскую Школу Хэкеров
1. Ниже приводится вариант решения Малешова Алексея, 9"Д" класс, 57 школа.
Стрелочка "<-" везде означает команду присваивания.
X <- X+Y Например, когда X=10, Y=6: X <- 10+6 = 16
Y <- X-Y Y <- 16-6 = 10
X <- X-Y X <- 16-10 = 6
1*. Первый вариант решения, публикующийся впервые, является переработанным
вариантом решения Александра Бурцева, второй год обучения в Школе Хэкеров.
X <- 0-X Например, когда X=10, Y=6: X <- 0 - 10 = -10
X <- Y-X X <- 6 -(-10) = 16
Y <- X-Y Y <- 16 - 6 = 10
X <- X-Y X <- 16 - 10 = 6
Второй вариант решения для людей, знающих побитовые логические
операции, короче на одну команду присваивания:
X <- X XOR Y
Y <- X XOR Y
X <- X XOR Y
Например, когда X=10, Y=6
X <- 10 XOR 6 = 1010b XOR 0110b = 1100b = 12
Y <- 12 XOR 6 = 1100b XOR 0110b = 1010b = 10
X <- 12 XOR 10 = 1100b XOR 1010b = 0110b = 6
2. Здесь тоже существуют два способа решения.
Первый способ использовал Виталий Кубалов, 9"и" класс 1525 школы.
Способ хорош тем, что требует от Тупого Сержанта способностей запомнить
лишь четыре числа (x,y,L,n). В качестве приказания написать число N в
строчке Y, столбце X, используется слово "вывести". Слова "увеличить" и
"уменьшить" обозначают, соответственно, прибавить или вычесть единичку из
соответствующего числа. Кстати, по-английски увеличить -- increment (inc),
а уменьшить -- decrement (dec).
Тетрадный листочек содержит около 32х40 клеточек. Если мы хотим
нарисовать спираль в серединке, то надо начать с 20 строчки, 16 столбца.
1. x <- 16; y <-20; n <- 0; вывести; L <- 1;
2. Повторить L раз: увеличить n, увеличить x, вывести;
3. Повторить L раз: увеличить n, увеличить y, вывести;
4. увеличить L;
5. Повторить L раз: увеличить n, Если n=100, закончить работу
Иначе уменьшить х, вывести;
6. Повторить L раз: увеличить n, уменьшить y, вывести;
7. увеличить L, Перейти к пункту 2.
Второй способ попытался реализовать Дмитрий Пономаренко из того же
класса. Он использует переменную d как флаг направления (direction) или
стороны спирали, а М содержит длину стороны спирали.
1. x <- 16; y <- 20; n <- 0; M <- 1; d <- 0;
2. L <- m;
3. вывести, увеличить n, Если n=100, закончить работу;
4. Если d=0, то увеличить х;
Если d=1, то увеличить y;
Если d=2, то уменьшить х;
Если d=3, то уменьшить y;
5. уменьшить L, Если L>0, то Перейти к пункту 3.
6. Если d=0, то d <- 1;
Если d=1, то d <- 2, увеличить m;
Если d=3, то d <- 3;
Если d=4, то d <- 4, увеличить m;
7. Перейти к пункту 2.
2*. Задача сводится к предыдущей. Поскольку Супертупой Сержант знает
только команду "вывести-цифру" и не может выыводить на экран числа, ему
надо предварительно объяснить команду "вывести":
1. m <- n, n <- 0, d <- 0;
2. десять раз увеличить d;
Если d<=m, то увеличить n, Перейти к пункту 2.
3. Если n>0, то уменьшить х, вывести-цифру, увеличить х;
4. n <- m
5. Пока n>9, десять раз уменьшить n;
6. вывести-цифру;
7. n <- m.
После этого надо дать Супертупому Сержанту немного изменённый первый
вариант программы для задачи 2, где не используются переменные m и d:
1. x <- 16; y <- 20; n <- 0; вывести; L <- 1;
2. Повторить L раз: увеличить n, три раза увеличить x, вывести;
3. Повторить L раз: увеличить n, увеличить y, вывести;
4. увеличить L;
5. повторить L раз: увеличить n, Если n=100, закончить работу
Иначе три раза уменьшить x, вывести;
6. Повторить L раз: увеличить n, уменьшить y, вывести;
7. увеличить L, Перейти к пункту 2.
3. Ближе всего к решению этой задачи подошёл Александр Бурцев, второй год
обучения в Школе Хэкеров. Но три грубые ошибки (перепутал направление оси
Y, синусы и косинусы; принял за пи радиан 90 градусов, хотя на листочке с
заданиями были написаны как определения синуса с косинусом, так и
радианная мера развёрнутого угла) не позволили ему получить "+" за эту
задачу.
Для компактности в строчках 580 и 590 опущены координаты первой точки,
так как она совпадает с последней точкой предыдущего оператора LINE.
570 LINE (50,250) - (50+100*COS(3.1416/12), 250-100*SIN(3.1416/12))
580 LINE - (50+25*SQR(2), 250-25*SQR(6))
590 LINE - (50,250)
AtH//HPG@hMoscow
1998г,Москва
<<<EOF>>>
:
hscool@netclub.ru