ОК, отлично. Тогда вот все пояснения: Электронный оракул.
Одно время я пытался сделать программу для сетевой магии. Нужного опыта у меня нет, поэтому доделать программу так пока и не получилось. Решил сделать что-то попроще – а именно, электронного оракула.
Теперь о том, как работает программа и как ею пользоваться.
Представим следующий процесс гадания: у нас мешочек с табличками, на каждой написано какое-то слово. Еще у нас есть кубик с номерами. Задаем мирозданию вопрос, бросаем кубик. Выпадает число от 1 до 6. Допустим, выпало 4. Это – количество слов в будущем ответе. Теперь хорошо перетрясаем таблички в мешке и по очереди вынимаем четыре таблички. Кладем их в ряд, смотрим, что за фраза получилась.
В программе, о которой идет речь, я попытался реализовать именно этот алгоритм. Обычно гадальные машины делают на генераторах случайных чисел. Но этот путь для нас не подходит. Почему? Причин несколько. Во-первых, все эти ГСЧ выдают далеко не случайные числа (поэтому чаще говорят о псевдослучайных числах). А во-вторых, главное в такой программе – это возможность Сети реально влиять на выбор нужного слова. Когда мы зашиваем в программу какой-то жесткий алгоритм, такой возможности у Сети не остается. Выбор делает компьютер, нам же необходим диалог с Сетью.
Поэтому я поступил следующим образом: сделал в программе два… генератора? Не знаю, как их точно назвать (пусть знающие люди подскажут). Короче, они просто последовательно перебирают числа. Первый генератор перебирает по кругу числа от 1 до 6. В момент нажатия кнопки выбора мы выбираем то число, которое в данный момент выдает генератор. Фишка здесь в том, что числа перебираются именно последовательно. Они абсолютно прогнозируемы, при этом Сеть имеет возможность влиять на выбор нужного числа – тем, что заставляет нас нажать кнопку в какой-то конкретный момент. Итого, первый выбор дает нам число слов в будущем ответе.
Второй генератор тоже бесконечно перебирает числа, но уже от 1 до 100. Каждому числу соответствует одно слово – таким образом, словарный запас Оракула составляет сто слов. Не слишком много, но для начала сойдет. Работает все так: после запуска программы надо мысленно сформулировать вопрос и нажать «ОК». Загораются от 1 до 6 индикаторов. Дальше надо нажать на кнопки под загоревшимися индикаторами (можно вразброс, можно подряд - как хотите). Каждый раз, нажимая на кнопку, мы выхватываем из вертящегося в мозгах программы цикла число от 1 до 100. Выбор конкретного слова, опять же, зависит от момента нажатия кнопки. Сто слов перебираются примерно за 1,5 секунды. Надо бы быстрее, но как это сделать, пока не знаю – я только учусь. Все выбранные слова помещаются в буфер, и при дальнейшем нажатии на кнопку «Ответ» выводятся в поле ответа. Дальше жмете «Очистить», и можете задавать новый вопрос.
При написании программы появилась еще одна сложность: так как программа перебирает сто слов за 1,5 секунды, то если мы будем нажимать на кнопки выбора слов точно с этим интервалом, то каждый раз будем выбирать одно и то же слово. Чтобы этого не произошло, в программу веден ГСЧ. Он генерирует числа от 1 до 100, в случайном порядке. Когда мы нажимаем кнопку выбора слова – допустим, выпало число 20 – то из генератора берется его текущее значение – скажем, 85 – и подставляется в цикл перебора чисел. То есть дальше программа уже считает не «21, 22, 23…» и т.д., а «86, 87, 88…» Короче, при каждом выборе слова цикл сдвигается на какую-то величину в ту или иную сторону, что не позволяет выбирать одни и те же слова. Описываю все так подробно для тех, кто хорошо разбирается в программировании и сможет улучшить эту программу (исходники для Builder C++ тоже выложу) или сделает свою по сходным принципам.
Разумеется, сделав прогу, я сразу ее опробовал. Самым удивительным было то, что эта зараза работала! Работала в том смысле, что был реальный контакт с Сетью. Да, программа пока очень косноязычна – маленькое количество слов не позволяет вставить все варианты их написания. И вместо «Мама мыла раму» прога напишет «Мама мыть рама». Но смысл понять можно. Некоторые ответы меня, прямо скажу, просто поражали – настолько они были точны. При этом в полной мере проявил себя обычный гадательный эффект: сначала все шло на ура, но потом мои постоянные вопросы Сети явно надоели. То есть здесь все должно быть в меру: Сеть готова ответить на какие-то вопросы, но отключится, если все это переходит разумные пределы. В этом случае ответы становятся бессмысленным набором слов. В целом понял, что здесь очень многое зависит от самого работающего с программой человека – здесь надо быть настоящим медиумом, чтобы установить с Сетью хороший контакт.
Сейчас думаю, как улучшить программу. Она должна гораздо быстрее осуществлять перебор чисел – скажем, за секунду хотя бы до 1000. Плюс должен быть внешний словарь: просто открываешь какой-то текст, и прога выбирает слова из него. Но пока у меня не хватает умений это сделать…