Задержка распространения сигнала внутри цифровых микросхем стандартной логики -- очень удобный "кирпичик" для построения простых схем.
"Генератор = отрицательная обратная связь + линия задержки"
Если мы прошли змейкой по прямой X клеток, то мы можем повернуть на 1 клетку вправо и затем назад к точке выхода -- вот и полоска площадью X. Какую бы мы не нарисовали ломаную с момента выхода из рамки и до любого момента до возвращения на рамку, мы знаем минимальную площадь нашей фигуры, которая получится если из данной точки вернуться на рамку по прямой.
Идея задать инвариант тут только для того, чтобы на любом шаге был корректный результат.
А еще есть идея, как можно вырезать в прямоугольнике разные многоугольники нужной площади. Вспомним игру qix (en.wikipedia.org/wiki/Qix). Вылетаем "змейкой" по прямой, из любой точки рамки, а дальше на каждом шаге считаем максимально возможную площадь фигуры по правую сторону "головы", учитывая пройденный и оставшийся путь до рамки. Из формулы Пика у нашей змейки, получается, есть запас "топлива", и мы на каждом шаге можем найти точку невозврата, из которой мы сможем замкнуть контур только по прямой до ближайшей сетки.
Например, рекурсивно.
Сначала остановимся на числе стран = 2^N. Была одна страна, будет две. Проверяем, можно ли ее разрезать на две равные части прямой линией. Режем. Так режем, пока не достигнем нужного числа стран. А потом каждую прямую линию, кроме рамки, режем пополам и рекурсивно "мутируем", проверяя инвариант стран по обе ее стороны.
Если число стран не степень двойки, то надо свести задачу к этому. Возьмем и разрежем прямыми линиями исходный прямоугольник на будущие блоки стран по 2^k стран в каждом блоке (исходя из площади). Потом каждый блок рекурсивно разрежем и мутируем границы.
Что еще можно принять во внимание:
все возможные (с точностью до симметрии) сочетания стран вокруг одного узла сетки:
00 10 00 12 12
00 00 11 00 34
И смотрите в самый последний по дате файл *.scan в %TEMP% — там весело.
Unexpected SCALAR(0x339e50) in harness() parameter 1 at B:\jpegrescan.pl line 34.
Unexpected SCALAR(0x318408) in harness() parameter 2 at B:\jpegrescan.pl line 34.
Там еще приколы. jpegtran под винду обязательно хочет два файла — входной и выходной, а под линух ему достаточно одного входного. Второй вызов надо тоже переписать на IPC.
На винде проблемы с list form of pipe open. Надо переписывать как указал ниже SleepingLion, или пилить perl из msys либо cygwin (ActivePerl и StrawberryPerl не работают). IPC::Run на винде тоже выдает какие-то глюки. Я запустил сразу под линухом — и все завелось.
Честно, это будет быстрее, чем править и тестировать. Скачайте готовую виртуалку с любым линухом (например, тут bitnami.com/stack/lamp), скомпильте jpegtran, пропишите ему libjpeg в LDCONFIG и всё. Пять минут на скачку и минуту на остальное.
Массив — это не переменная. Имя массива — это псевдоним. Имени массива в С даже присвоить ничего нельзя. Его содержимое можно только инициализировать строкой, да и то — просто конструкция для удобства.
У Вас, вероятно, не настроены символы, поэтому в стеке нет имен функций, одни смещения.
0) Создайте переменную окружения _NT_SYMBOL_PATH (тут для примера символы будут скачиваться и сохраняться в c:\symbols,
Вы можете также указать еще папки через *, например, с:\my_symbols, где лежат символы QT и Вашего проекта, например)
_NT_SYMBOL_PATH=srv*c:\symbols*c:\my_symbols*http://msdl.microsoft.com/download/symbols
1) Поставьте Debugging Tools for Windows
2) Укажите в procmon в «Configure Symbols» путь к dbghelp.dll из установленного Debugging Tools for Windows
и, если не подхватился путь к символам из _NT_SYMBOL_PATH, то пропишите в соотв. поле ту же строчку (srv*c:\symbols*c:\my_symbols*http://msdl.microsoft.com/download/symbols).
И, конечно же, не забываем про findstr /r, который умеет регэскпы. Но вообще здесь все довольно грустно и лучше использовать Powershell или VBS/JScript (WSH).
Мне кажется, интересно было бы подумать над концепцией такой даже не мегаштуки, а меташтуки.
Попробовать наваять высокоуровневую модель вообще без привязки к реализации, алгоритмам, протоколам.
Если в построенной по исходной модели гипотетической системе будут выполняться заданные отношения и условия, то поверх нее можно будет развернуть что угодно (на это указывают попытки нецелевого использования существующих технологий — хранение данных в блокчейне bitcoin, передача данных поверх DNS, IM на базе DHT и bittorrent и т.д.).
"Генератор = отрицательная обратная связь + линия задержки"