evg
Дан план замка.
Напишите программу, которая определяет:
1) Количество комнат в замке;
2) Площадь крупнейшей комнаты;
3) Какую стену в замке нужно удалить, чтобы получить комнату наибольшей площади;
4) Замок условно разделен на m ∙ n ячеек (1≤ m ≤ 50, 1≤ n ≤ 50).
Каждая такая клетка может иметь от 0 до 4 стен.

Входные данные: план замка размещается во входном файле с именем Input.txt в виде последовательности чисел - по одному числу, характеризующий каждую клеточку. В первой строке файла записано число клеток в направлении с севера на юг. Во второй строке - число клеток в направлении с запада на восток. В следующих строках каждая клетка описывается числом р (0 ≤ р ≤ 15). Это число является суммой следующих номеров:

1 - если ячейка имеет западную стену;
2 - если ячейка имеет северную стену;
4 - если ячейка имеет восточную стену;
8 - если ячейка имеет южную стену.

Считается, что внутренняя стена принадлежит обоим клеточкам. Например, южная стена в ячейке (1, 1) также является северной стеной в ячейке (2, 1). Замок содержит минимум две комнаты.

Выходные данные: в исходном файле Output.txt должно быть три строки. В первой строке содержится число комнат, во втором - площадь крупнейшей комнаты (измеряется количеством ячеек). Третью строчку определяет стену, которую необходимо удалить: номер строки и номер столбца ячейки, содержит стену, которую необходимо удалить, и положение этой стены в клетке (N - север, W - запад, S - юг, E - восток)

Пример ввода и вывода:
Input.txt
4
7
11 6 11 6 3 10 6
7 9  6 13 5  15 5
1 10 12 7 13 7 5
13 11 10 8 10 12 13 5
Output.txt
9
4  1  Е
evg

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

Каждый шаг на пути может осуществляться вниз по диагонали влево или вниз по диагонали вправо.

Число строк в треугольнике от 1 до 100.
Треугольник составлен из целых чисел от 0 до 99.

Входные данные:
Первым числом во входном файле с именем INPUT.TXT является количество строк в треугольнике. Пример файла исходных данных представлен ниже.

 5
 7
 3 8
 8 1 0
 2 7 4 4
 4 5 2 6 5

Выходные данные:
В выходной файл с именем OUTPUT.TXT записывается только наибольшая сумма в виде целого числа. Ниже приведен OUTPUT.TXT для данных выше исходных данных. 7+3+8+7+5=30

evg

Пятнашки

Развиваем тему решателей пятнашек. Теперь используем алгоритм IDA*

Работает - очень быстро. Малые требования к ресурсам.

2 5 4 6
1 13 11 3
14 12 7 10
8 15 9 0

В пятнашки можно поиграть :)

Результат движения пустой клетки(U-вверх, D-вниз, R-вправо,L-влево):
ULURULDRDLLUULDRRDDLLURRDRULDLLURRDRULURDLDR

Те же 44 хода. Но в отличии от A*, в котором расчет получался за 8 мин., теперь получаем время решения 1 сек.

evg

Программма - решатель пятнашек.
Реализация на pascal-е.
Проверенно в PascalABC.NET.

Работает дико медленно :) Но работает.

Имеем на воходе разложение пятнашек в виде массива 4x4, с цифрами от 0 до 15. Где "0" пустая клетка. Разложение может быть случайным. Решением является перестановка фишек в строй по порядку от 1 до 15.

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0

Ровно в половине случаев задачу невозможно разрешить.
Решение необходимо выполнить за минимально возможное количество ходов.

Для решения задачи используется алгоритм A star(A*). Он заключается в обходе графа всех возможных состояний поля с учетом предыдущих.

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

evg

Задание:

У нас есть 3 чашки с максимальными объемами A,B,C. Объемы находящейся в чашках жидкости X,Y,Z.

Мы можем выливать воду из чашки и наливать ее в другие. Вода в чашку наливается до заполнения (т.е. до максимального объема), остаток остается в чашке. Воду нельзя никуда больше выливать.

Нужно определить все объемы которые мы можем получить в результате переливаний.
Вывести в виде 0:1 1:2 2:3.
Первая цифра объем, вторая минимальное количество переливаний.

Язык: pascal