Лабораторные работы (2009) (Пятнашки)

Посмотреть архив целиком

Пятнашки

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

История создания

С 1891 года до самой смерти Сэмюэл Лойд считал, что изобрёл головоломку именно он. Однако существуют доказательства того, что он был непричастен к созданию «пятнашек». Настоящим изобретателем был Ной Палмер Чепмэн, почтмейстер из Канастоты, который ещё в 1874 году показывал друзьям головоломку, состоящую из шестнадцати пронумерованных квадратиков, которые надо было сложить в ряды по четыре штуки так, чтобы сумма чисел в каждом ряду была равна 34. Затем сын Ноя Чепмэна, Фрэнк Чепмэн привёз доработанные головоломки в Сиракузы (штат Нью-Йорк), а затем в Хартфорд (Коннектикут), где слушатели Американской школы для слабослышащих начали производство головоломки. К 1879 году она уже продавалась не только в Хартфорде, но и в Бостоне. Тогда о «пятнашках» узнал художник по дереву Маттиас Райс. В декабре 1879 года он начал бизнес по производству новой головоломки под названием «Драгоценная головоломка» (англ. Gem Puzzle). В начале 1880 года некий Чарльз Певи, дантист из Вустера, привлёк внимание общественности, предложил денежное вознаграждение за решение задачи собирания головоломки, что добавило популярности новой забаве. Весной того же года игра достигла Европы. 21 февраля 1880 года Ной Чепмэн попытался оформить патент на своё изобретение (патент назывался «Головоломка из бриллиантовых блоков», «Block Solitaire Puzzle»), однако заявка на патент была отклонена, так как мало отличалась от уже оформленного тремя годами ранее патента «Хитрые блоки», «Puzzle-Blocks».

Математическое описание

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

Можно показать, что ровно половину из всех возможных 1 307 674 368 000 (=15!) начальных положений пятнашек невозможно привести к собранному виду: пусть квадратик с числом i расположен до (если считать слева направо и сверху вниз) k квадратиков с числами меньшими i. Будем считать ni = k, то есть если после костяшки с i-м числом нет чисел, меньших i, то k = 0. Также введем число e — номер ряда пустой клетки (считая с 1). Если сумма является нечётной, то решения головоломки не существует

Для обобщённых пятнашек (с бо́льшим, чем 15, количеством костяшек) задача поиска кратчайшего решения является NP-полной.

Описание реализации на языке РДО

Способ решения

Первым делом на свои места возвращаются числа младшего порядка, позже высшего. Ходы делаются компьютером по забитой в память логике (см ниже). Игра идет либо до полной сборки либо до неразрешимого положения (приведены выше)

Начальные данные.

Задаются в файле с расширением RSS и имеют вид (к примеру)

$Resources

Фишка1 : Фишка 1 16

Фишка2 : Фишка 2 15

Фишка3 : Фишка 3 14

Фишка4 : Фишка 4 13

Фишка5 : Фишка 5 12

Фишка6 : Фишка 6 11

Фишка7 : Фишка 7 10

Фишка8 : Фишка 8 9

Фишка9 : Фишка 9 8

Фишка10 : Фишка 10 7

Фишка11 : Фишка 11 6

Фишка12 : Фишка 12 5

Фишка13 : Фишка 13 4

Фишка14 : Фишка 14 3

Фишка15 : Фишка 15 2

Пусто : Пусто 1

Ожидание : Ожидания * *

Игра: Игры * * * * *

$End

Отображение графики.

Данные содержатся в файле с расширением frm и при описании этой модели имеют вид:

$Frame Кадр_1

$Back_picture = <255 255 255> 750 680

Show

show_if ФишкаX.Место=1

rect [200, 90, 100, 100, <0 0 0>, <255 255 255>]

text [245, 125, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=2

rect [300, 90, 100, 100, <0 0 0>, <255 255 255>]

text [345, 125, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=3

rect [400, 90, 100, 100, <0 0 0>, <255 255 255>]

text [445, 125, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=4

rect [500, 90, 100, 100, <0 0 0>, <255 255 255>]

text [545, 125, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=5

rect [500, 190, 100, 100, <0 0 0>, <255 255 255>]

text [545, 225, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=6

rect [400, 190, 100, 100, <0 0 0>, <255 255 255>]

text [445, 225, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=7

rect [300, 190, 100, 100, <0 0 0>, <255 255 255>]

text [345, 225, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=8

rect [200, 190, 100, 100, <0 0 0>, <255 255 255>]

text [245, 225, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=9

rect [200, 290, 100, 100, <0 0 0>, <255 255 255>]

text [245, 325, 20, 20, <0 0 0>, <255 255 255>, Фишка1.Номер]

show_if ФишкаX.Место=10

rect [300, 290, 100, 100, <0 0 0>, <255 255 255>]

text [345, 325, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=11

rect [400, 290, 100, 100, <0 0 0>, <255 255 255>]

text [445, 325, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=12

rect [500, 290, 100, 100, <0 0 0>, <255 255 255>]

text [545, 325, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=13

rect [500, 390, 100, 100, <0 0 0>, <255 255 255>]

text [545, 425, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=14

rect [400, 390, 100, 100, <0 0 0>, <255 255 255>]

text [445, 425, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=15

rect [300, 390, 100, 100, <0 0 0>, <255 255 255>]

text [345, 425, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

show_if ФишкаX.Место=16

rect [200, 390, 100, 100, <0 0 0>, <255 255 255>]

text [245, 425, 20, 20, <0 0 0>, <255 255 255>, ФишкаX.Номер]

Где Х – номер фишки от 1 до 15 либо Пусто, но при этом исключается указание немера в графике, просто пустое окно.

Действия, правила и функции

Описаны в модулях с расширением dpr, Pat и func соответственно. Имеют вид:

$Activities

Далее : Образец_Далее 'SPACE'

$End

$Decision_point Реализация_Стратегии : some

$Condition

Игра.Состояние = Реализация_стратегии and Игра.Стратегия <> 0

$Activities

Реализовать_Стратегию : Образец_Реализовать_Стратегию

$End

$Decision_point Ожидание : some

$Condition

Игра.Состояние = Ожидание

$Activities

Ожидать_хода : Образец_Ожидать_хода

$End

$Decision_point Выбор_Стратегии : some

$Condition

Игра.Состояние = Выбор_стратегии

$Activities

Выбрать_стратегию : Образец_Выбрать_стратегию

$End

$Decision_point Реализация_Стратегии_0 : some

$Condition

Игра.Состояние = Реализация_стратегии and Игра.Стратегия = 0

$Activities

Реализовать_Стратегию_0 : Образец_Реализовать_Стратегию_0

$End

$Decision_point Подвод : some

$Condition

Игра.Состояние = Подвод

$Activities

Реализовать_Подвод : Образец_Реализовать_Подвод

$End

$Decision_point Смена_1 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=8

$Activities

Реализовать_Смену_1 : Образец_ход_вверх_1

$End

$Decision_point Смена_2 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=8

$Activities

Реализовать_Смену_2 : Образец_ход_вправо_1

$End

$Decision_point Смена_3 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=8

$Activities

Реализовать_Смену_3 : Образец_ход_вправо_1

$End

$Decision_point Смена_4 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=4 and Игра.Ключевое_место=8

$Activities

Реализовать_Смену_4 : Образец_ход_вправо_1

$End

$Decision_point Смена_5 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=5 and Игра.Ключевое_место=8

$Activities

Реализовать_Смену_5 : Образец_ход_вправо_2

$End

$Decision_point Смена_6 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=7

$Activities

Реализовать_Смену_6 : Образец_ход_вверх_2

$End

$Decision_point Смена_7 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=7

$Activities

Реализовать_Смену_7 : Образец_ход_вправо_1

$End

$Decision_point Смена_8 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=7

$Activities

Реализовать_Смену_8 : Образец_ход_вправо_2

$End

$Decision_point Смена_9 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=6

$Activities

Реализовать_Смену_9 : Образец_ход_вправо_1

$End

$Decision_point Смена_10 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=6

$Activities

Реализовать_Смену_10 : Образец_ход_вверх_2

$End

$Decision_point Смена_11 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=6

$Activities

Реализовать_Смену_11 : Образец_ход_вправо_2

$End

$Decision_point Смена_12 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=5

$Activities

Реализовать_Смену_12 : Образец_ход_вправо_1

$End

$Decision_point Смена_13 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=5

$Activities

Реализовать_Смену_13 : Образец_ход_вправо_1

$End

$Decision_point Смена_14 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=5

$Activities

Реализовать_Смену_14 : Образец_ход_вправо_1

$End

$Decision_point Смена_15 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=4 and Игра.Ключевое_место=5

$Activities

Реализовать_Смену_15 : Образец_ход_вверх_1

$End

$Decision_point Смена_16 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=5 and Игра.Ключевое_место=5

$Activities

Реализовать_Смену_16 : Образец_ход_вправо_2

$End

$Decision_point Смена_17 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=4 and Игра.Стратегия <> 3

$Activities

Реализовать_Смену_17 : Образец_ход_вверх_2

$End

$Decision_point Смена_18 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=4 and Игра.Стратегия <> 3

$Activities

Реализовать_Смену_18 : Образец_ход_вправо_1

$End

$Decision_point Смена_19 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=4 and Игра.Стратегия <> 3

$Activities

Реализовать_Смену_19 : Образец_ход_вправо_2

$End

$Decision_point Смена_20 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=3

$Activities

Реализовать_Смену_20 : Образец_ход_вправо_1

$End

$Decision_point Смена_21 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=3

$Activities

Реализовать_Смену_21 : Образец_ход_вверх_2

$End

$Decision_point Смена_22 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=3

$Activities

Реализовать_Смену_22 : Образец_ход_вправо_2

$End

$Decision_point Смена_23 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=2

$Activities

Реализовать_Смену_23 : Образец_ход_вправо_1

$End

$Decision_point Смена_24 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=2

$Activities

Реализовать_Смену_24 : Образец_ход_вправо_1

$End

$Decision_point Смена_25 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=2

$Activities

Реализовать_Смену_25 : Образец_ход_вправо_1

$End

$Decision_point Смена_26 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=4 and Игра.Ключевое_место=2

$Activities

Реализовать_Смену_26 : Образец_ход_вверх_1

$End

$Decision_point Смена_27 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=5 and Игра.Ключевое_место=2

$Activities

Реализовать_Смену_27 : Образец_ход_вправо_2

$End

$Decision_point Смена_28 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=1 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_28 : Образец_ход_вправо_1

$End

$Decision_point Смена_29 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=2 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_29 : Образец_ход_вверх_1

$End

$Decision_point Смена_30 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=3 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_30 : Образец_ход_вправо_1

$End

$Decision_point Смена_31 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=4 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_31 : Образец_ход_вправо_1

$End

$Decision_point Смена_32 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=5 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_32 : Образец_ход_вправо_1

$End

$Decision_point Смена_33 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=6 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_33 : Образец_ход_вправо_1

$End

$Decision_point Смена_34 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=7 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_34 : Образец_ход_вверх_2

$End

$Decision_point Смена_35 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=8 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_35 : Образец_ход_влево_1

$End

$Decision_point Смена_36 : some

$Condition

Игра.Состояние = Смена and Игра.Стадия_Смены=9 and Игра.Ключевое_место=4 and Игра.Стратегия = 3

$Activities

Реализовать_Смену_36 : Образец_ход_вниз_1

$End


_Фишка

Choice from _Фишка.Место=Пусто.Место + 7

first

Convert_rule

Место set _Фишка.Место - 7

_игра

Choice NoCheck

first

Convert_rule

Состояние set Ожидание

Действие set Нет

Стадия_Смены set 1

$End

$Pattern Образец_ход_вниз_2 : rule

$Relevant_resources

_Пусто : Пусто Keep

_Фишка : Фишка Keep

_игра : Игра Keep

$Body

_Пусто

Choice NoCheck

first

Convert_rule

Место set _Пусто.Место + 5

_Фишка

Choice from _Фишка.Место=Пусто.Место + 5

first

Convert_rule

Место set _Фишка.Место - 5

_игра

Choice NoCheck

first

Convert_rule

Состояние set Ожидание

Стадия_Смены set _игра.Стадия_Смены + 1

$End

$Pattern Образец_ход_вниз_3 : rule

$Relevant_resources

_Пусто : Пусто Keep

_Фишка : Фишка Keep

_игра : Игра Keep

$Body

_Пусто

Choice NoCheck

first

Convert_rule

Место set _Пусто.Место + 7

_Фишка

Choice from _Фишка.Место=Пусто.Место + 7

first

Convert_rule

Место set _Фишка.Место - 7

_игра

Choice NoCheck

first

Convert_rule

Состояние set Ожидание

Действие set Нет

Стадия_Смены set 1

$End


$Function Новая_стадия : such_as Ожидания.Стадия_ожидания

$Type = algorithmic

$Parameters

_стадия : such_as Ожидания.Стадия_ожидания

$Body

Calculate_if _стадия = 400 Новая_стадия = 1

Calculate_if _стадия <> 400 Новая_стадия = _стадия + 1

$End

$Function Функ_назад : integer [1..16]

$Type = algorithmic

$Parameters

Место: integer [1..16]

$Body

Calculate_if Место > 1 Функ_назад = Место - 1

Calculate_if 0=0 Функ_назад = Место

$End

$Function Функ_вперед : integer [1..16]

$Type = algorithmic

$Parameters

Место: integer [1..16]

$Body

Calculate_if Место < 16 Функ_вперед = Место + 1

Calculate_if 0=0 Функ_вперед = Место

$End

$Function Новая_стратегия : integer [0..16]

$Type = algorithmic

$Parameters

Фишка1: integer [1..16]

Фишка2: integer [1..16]

Фишка3: integer [1..16]

Фишка4: integer [1..16]

Фишка5: integer [1..16]

Фишка6: integer [1..16]

Фишка7: integer [1..16]

Фишка8: integer [1..16]

Фишка9: integer [1..16]

Фишка10: integer [1..16]

Фишка11: integer [1..16]

Фишка12: integer [1..16]

Фишка13: integer [1..16]

Фишка14: integer [1..16]

Фишка15: integer [1..16]

Пусто: integer [1..16]

$Body

Calculate_if Пусто <> 16 Новая_стратегия = 0

Calculate_if Фишка1 <> 1 Новая_стратегия = 1

Calculate_if Фишка2 <> 2 Новая_стратегия = 2

Calculate_if Фишка3 <> 3 Новая_стратегия = 3

Calculate_if Фишка4 <> 4 Новая_стратегия = 4

Calculate_if Фишка5 <> 5 Новая_стратегия = 5

Calculate_if Фишка6 <> 6 Новая_стратегия = 6

Calculate_if Фишка7 <> 7 Новая_стратегия = 7

Calculate_if Фишка8 <> 8 Новая_стратегия = 8

Calculate_if Фишка9 <> 9 Новая_стратегия = 9

Calculate_if Фишка10 <> 10 Новая_стратегия = 10

Calculate_if Фишка11 <> 11 Новая_стратегия = 11

Calculate_if Фишка12 <> 12 Новая_стратегия = 12

Calculate_if Фишка13 <> 13 Новая_стратегия = 13

Calculate_if Фишка6 <> 14 Новая_стратегия = 14

Calculate_if Фишка6 <> 15 Новая_стратегия = 15

Calculate_if 0=0 Новая_стратегия = 16

$End

$Function Смена_состояния : such_as Игры.Состояние

$Type = algorithmic

$Parameters

Стратегия: integer[0..16]

Смена1: such_as Игры.Действие

$Body

Calculate_if Стратегия = 0 Смена_состояния = Выбор_стратегии

Calculate_if Стратегия <> 0 and Смена1 <> Смена Смена_состояния = Реализация_стратегии

Calculate_if 0=0 Смена_состояния = Смена

$End

$Function Проверка_состояния : such_as Игры.Состояние

$Type = algorithmic

$Parameters

_Пусто: integer[1..16]

_Фишка: integer[1..16]

_Стратегия: integer[0..16]

$Body

Calculate_if _Пусто = _Фишка + 1 and _Стратегия <> _Фишка Проверка_состояния = Смена

Calculate_if _Пусто = _Фишка + 1 and _Стратегия = _Фишка Проверка_состояния = Выбор_стратегии

Calculate_if 0=0 Проверка_состояния = Подвод

$End

$Function Установка_Смены : such_as Игры.Действие

$Type = algorithmic

$Parameters

_Пусто: integer[1..16]

_Фишка: integer[1..16]

_Стратегия: integer[0..16]

$Body

Calculate_if _Пусто = _Фишка + 1 and _Стратегия <> _Фишка Установка_Смены = Смена

Calculate_if 0=0 Установка_Смены = Нет

$End


Ресурсы и сборка

Записаны соответсвенно в файлах с расширением rtp и smr

$Resource_type Фишка : permanent

$Parameters

Номер: integer[1..15]

Место: integer[1..16]

$End

$Resource_type Пусто : permanent

$Parameters

Место: integer[1..16]

$End

$Resource_type Игры : permanent

$Parameters

Состояние : (Ожидание, Выбор_стратегии, Реализация_стратегии, Выход, Подвод, Смена)= Ожидание

Действие: (Смена, Нет,Выход)=Нет

Стадия_Смены: integer [1..8]=1

Стратегия: integer [0..16]=0

Ключевое_место: integer [1..16]=1

$End

$Resource_type Ожидания : permanent

$Parameters

Выход : (Да, Нет, Сеанс_игры, Неизвестно) = Сеанс_игры

Стадия_ожидания : integer [1..400] = 1

$End


// Имя модели (*.pat, *.rtp, *.fun и *.dpt)

Model_name = eight


// Ресурсы (*.rss)

Resource_file = eight


// Операции (*.opr)

// Одновременно в модели может присутствовать или файл *.opr или файл *.dpt, но не оба сразу



// Собираемые показатели (*.pmd)

Statistic_file = eight


// Результаты прогона (*.pmv), выводятся внизу экрана

Results_file = eight


// Трассировка (*.trc)

// Если файл трассировки закомментировать, то отключится вся трассировка в модели

Trace_file = eight


// Анимация (*.trc)

Frame_file = eight

// Отображение анимации начинается с кадра Frame_number

Frame_number = 1


// Режим прогона, включить анимацию

Show_mode = Animation

// Скорость анимации. Чем больше значение, тем быстрее прогон

Show_rate = 10000.0


// Условие остановки модели. После Terminate_if можно указать любое логическое выражение

Terminate_if Time_now >= 10*60*60.0


Случайные файлы

Файл
73060.rtf
131710.rtf
175815.rtf
23360-1.rtf
61793.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.