Эта задача настолько простая, что авторы даже поленились составить для нее условия. Вам нужно написать две функции. Первая - DecToN, принимает целое число и размер системы счисления, в которую это число нужно перевести (размер лежит в интервале от 2 до 35). Возвращает строку. Вторая - NToDec, принимает строку и размер исходной системы, возвращает число в десятичной. За первую функцию Вы получаете 15 баллов, за вторую - 10.
2. Идеальное покрытие
Ландер Лёня оборудует спальню графа, который очень любит шахматы. Разумеется, пол в этой спальне должен быть выложен черными и белыми тайлами. Лёня желает, чтобы все было идеально - а для этого плитки пола должны иметь определенное соотношение. Он хочет перебрать несколько вариантов и выбрать из них лучший. Лёня сообщает вам два положительных числа M и N - размеры спальни по горизонтали и вертикали соответственно. Третье число равно 1, если верхняя левая плитка должна быть черной, или (-1), если она белая. От вас требуется вычесть из количества черных плиток количество белых. Таким образом, если больше окажется черных, результат будет положительным, а если белых - отрицательным (соответственно, если поровну, то ноль). Если Ваша функция поможет Лёне создать идеальную комнату, Вы получите 25 баллов.
3. Уберкод
васяиллидан11754 решил написать свою функцию. К сожалению, пока он писал, он забыл, что она делает и для чего вообще нужна. Вася помнит только, что функция должна каким-то образом обрабатывать глобальный массив, причем в этом массиве никогда не бывает чисел, меньших единицы. Помогите бедному Васе разобраться с этой проблемой: объясните задачи, которые выполняют его основная и вспомогательная фукнции (10 баллов) и, если возможно, напишите более оптимальное решение (15 баллов).
Код
globals integer array udg_Ar endglobals
// Вспомогательная фукнция function ghjkl takes integer l returns integer local integer array a local integer i = 1 local integer j local integer k set a[0] = l loop set j = 0 set k = 0 loop exitwhen j >= l if udg_Ar[j] > i then set k = k + 1 endif set j = j + 1 endloop exitwhen k <= 0 set a[i] = k set i = i + 1 endloop set j = 0 loop exitwhen j >= i set udg_Ar[j] = a[j] set j = j + 1 endloop return i endfunction
function MyUberFunc takes integer n returns nothing call ghjkl(ghjkl(n)) endfunction
Код
library MyUberLib { int udg_Ar[ ]
/* Вспомогательная фукнция */ private int ghjkl(int l) { int a[ ], i = 1, k a[0] = l loop { k = 0 for (int j = 0; j < l; j++) { if udg_Ar[j] > i { k++ } } exitwhen k <= 0 a[i++] = k } for (int j = 0; j < i; j++) { udg_Ar[j] = a[j] } return i }
void MyUberFunc(int n) { ghjkl(ghjkl(n)) } }
Код
var udg_Ar: array[0 .. 8191] of integer;
procedure MyUberFunc(n: integer);
{ Вспомогательная фукнция } function ghjkl(l: integer): integer; var a: array[0 .. 8191] of integer; i, j, k: integer; begin a[0] := l; i := 1; repeat j := 0; k := 0; while j < l do begin if udg_Ar[j] > i then k := k + 1; j := j + 1; end; if k <= 0 then break; a[i] := k; i := i + 1; until false; j := 0; while j < i do begin udg_Ar[j] := a[j]; j := j + 1; end; ghjkl := i; end;
begin ghjkl(ghjkl(n)); end;
4. Морской бой
Адмирал Праудмур очень гордится своим флотом. Однажды он решил посчитать, сколько кораблей у него имеется. Однако флот его был столь огромен, что он быстро сбился со счета. Тогда он достал квадратную карту, изображающую боевое построение судов, и дал ее Вам. Карта расчерчена на клетки и имеет размер NxN. Несколько подряд идущих клеток закрашены, если в этом месте стоит корабль (размеры кораблей варьируются от 1 до 4 клеток). Корабли не соприкасаются ни бортами, ни углами. Необходимо подсчитать количество кораблей на карте. Если Вы справитесь с возложенной на Вас задачей, Вы получите в награду 25 баллов. Ваша функция должна принимать число N. Чтобы проверить, закрашена ли клетка, обращайтесь к функции Filled (function Filled takes integer x, integer y returns boolean). Клетки нумеруются с 0 до (N - 1).
Сообщение отредактировал SirNikolas - Четверг, 24 Января 2013, 00:00:55
Маленький заводной гоблин находится в лабиринте. Лабиринт представляет собой прямоугольник размера MxN, разделенный на клетки. Между некоторыми клетками стоят стенки.
Заводной гоблин может выполнять четыре команды, переходя на соседнюю клетку в соответствующем направлении. Если гоблин врезается в стену, он разрушается.
up right down left
right down down left up right up left
На вход Вам подаются размеры лабиринта по горизонтали и вертикали, координаты робота и строка с алгоритмом, который он должен выполнить (гарантируется, что робот находится внутри лабиринта, а строка корректна). Строка состоит из слов "up", "down", "left" и "right", разделяемых ровно одним пробелом. Требуется записать в переменные udg_X и udg_Y координаты робота после исполнения алгоритма. Если в процессе выполнения он убьется об стену, следует задать координаты клетки, в которой это произойдет. Клетки нумеруются с нуля. Для получения информации о стенах вызывайте функцию Labyrinth (function Labyrinth takes integer x, integer y returns integer). Список значений, которые может возвращать эта функция:
0 - { # }
1 - { # }
2 - { |# }
3 - { |# }
4 - { _ }
5 - { _ }
6 - { |_ }
7 - { |_ }
8 - { #| }
9 - { #| }
10 - { |#| }
11 - { |#| }
12 - { _| }
13 - { _| }
14 - { |_| }
15 - { |_| }
За решение задачи в таком виде Вы получаете 20 баллов.
Дополнительные баллы:
За реализацию условного оператора - 10 баллов. Пишется слово if, затем направление и wall/empty. Следующее действие выполняется, только если условие истинно.
down if down wall left if up empty up
За реализацию цикла с условием - 10 баллов. Пишется слово while, затем условие, как в предыдущем пункте. Действие выполняется, пока условие истинно. Гарантируется, что никогда не будет происходить зацикливаний.
while right empty right while down empty down while left empty left while up empty up
За реализацию цикла со счетчиком - 10 баллов. Пишется слово times, затем целое положительное число. Следующее действие выполняется указанное количество раз.
times 2 right times 2 down times 2 right
За реализацию блоков для предыдущих пунктов - 10 баллов за каждый. Действия для предыдущих пунктов могут оборачиваться в begin и end, и тогда они выполняются все вместе.
times 4 begin up right end
За реализацию вложенности условий и циклов - 20 баллов. Вы получаете 20 баллов, если сделали хотя бы один из первых трех пунктов, и при этом конструкции можно вкладывать друг в друга.
if left empty if down empty down down if left wall while down empty right
Сообщение отредактировал SirNikolas - Суббота, 02 Февраля 2013, 00:01:42
Для одной настольной игры используется прямоугольное поле (карта) размером MxN. В некоторых клетках карты находятся города. Перед началом игры поле нужно разделить между двумя государствами так, чтобы у каждого было поровну клеток-городов. При этом сами государства могут не иметь равную площадь. Единственное условие: из каждого уголка каждого государства должен существовать путь в любую точку того же государства без пересечения границы.
На вход подаются целые положительные числа M и N. В строковом массиве udg_Field1 находится карта: пустые клетки представляются пробелами, клетки-города - буквой 'O'. Гарантируется, что на карте есть хотя бы два города и при этом всего их четное количество. Необходимо заполнить массив udg_Field2 строками, состоящими из единиц и двоек - какая клетка должна принадлежать какому государству.
2. Теоретическая магия
Нархиз учится в школе юных волшебников. Он интересуется теоретической магией.
Все заклинания делятся на классы по количеству частей, из которых они состоят. Так, заклинания первого порядка состоят из одного слова, второго порядка - из двух различных слов, третьего - из трех различных и так далее. Магические формулы по общепринятому соглашению записываются латинскими рунами, компоненты в сложном заклинании разделяются дефисом. У заклинаний есть так называемая магическая сила, которую принято обозначать целыми числами по шкале Акромониона. Для заклинаний первого порядка сила положительна, если длина слова четная, и отрицательна, если длина нечетная. Модуль силы равен длине волшебного слова. Например, компонент "Abra" обладает силой 4, а компонент "Cadabra" - силой (-7). Магическая сила заклинаний второго порядка равна произведению сил составляющих. Так, заклинание "Abra-Cadabra" (равно как и "Cadabra-Abra") имеет силу (-28).
Нархиз составил конспект по теоретической магии, в котором выписал все существующие заклинания первого порядка. Он хочет узнать, какое заклинание второго порядка будет обладать наибольшей магической силой, а какое - наименьшей.
На вход подается строка со списком компонентов, разделенных пробелом. Размер списка не превышает 4000 символов, список состоит хотя бы из двух слов, а заклинания в списке не повторяются. Требуется вернуть строку из двух заклинаний второго порядка, разделенных пробелом: первое должно иметь наибольшую силу, а второе - наименьшую. Ввиду того, что всегда существует несколько правильных ответов, можно выбрать любой из них. Примечание: один и тот же компонент может входить в оба заклинания, но не в одно два раза.