Комментарии 21
Очень интересно. Немного не разобрался в функции «pr», но прочитав статью в википедии «метод „Решето Эратосфена“ стало понятней.
PS а игрушка занятная! Меня компьютер пару раз победил!
PS а игрушка занятная! Меня компьютер пару раз победил!
>не столь известная логическая игра
угу, учитывая что 99% программистов писали реализацию игры еще в школе=)
угу, учитывая что 99% программистов писали реализацию игры еще в школе=)
1.
Это лишнее, не нужно хранить в памяти константы, которые легко посчитать:
Тут мне пришлось брать (i — 1), потому что вы начинаете с 1, а не с 0, что имхо не очень правильно.
2. Обязательно прочитайте про то, как должен выглядеть код, про всякие нотации. Ваш код сложно читать.
3. В самой статье, я так и не понял ничего про применения метода решета. Не хватает формально написанного алгоритма, и примера, который доведет игру до конца.
P. S. Поздравляю с автоматом.
Var A:array[1..Pmax] of Post;
Это лишнее, не нужно хранить в памяти константы, которые легко посчитать:
function getA(i : integer): Post;
begin
result[4] = (i - 1) mod 10;
result[3] = (i - 1) div 10 mod 10;
result[2] = (i - 1) div 100 mod 10;
result[1] = (i - 1) div 1000 mod 10;
end;
Тут мне пришлось брать (i — 1), потому что вы начинаете с 1, а не с 0, что имхо не очень правильно.
2. Обязательно прочитайте про то, как должен выглядеть код, про всякие нотации. Ваш код сложно читать.
3. В самой статье, я так и не понял ничего про применения метода решета. Не хватает формально написанного алгоритма, и примера, который доведет игру до конца.
P. S. Поздравляю с автоматом.
Подход стандартный.
Но в нем самое главное — выбор очередного хода. От этого зависит за сколько ходов программа будет угадывать комбинацию. У вас за сколько? И как выбирается очередной ход?
Но в нем самое главное — выбор очередного хода. От этого зависит за сколько ходов программа будет угадывать комбинацию. У вас за сколько? И как выбирается очередной ход?
если ход первый то выбираем случайно 4 разные цифры, разные — чтобы исключить больше.
если же ход не первый то из невычеркнутых комбинаций так же выбираем числа с 4 разными цифрами, если они есть. ничего лучше я, к сожалению, не смог тогда придумать.
если же ход не первый то из невычеркнутых комбинаций так же выбираем числа с 4 разными цифрами, если они есть. ничего лучше я, к сожалению, не смог тогда придумать.
И как — наверно за пять-шесть ходов отгадывал?
Насколько я помню (давненько я не брал в руки шашек) — случайный выбор дает шесть. Кстати вон и ниже так пишут. Но можно получить пять, если выбирать комбинацию, которая как можно сильнее ограничивает множество решений. То есть для разных комбинаций и разных ответов множество возможных решений уменьшается по-разному. И в наших интересах выбрать ход, который уменьшает его как можно больше.
Насколько я помню (давненько я не брал в руки шашек) — случайный выбор дает шесть. Кстати вон и ниже так пишут. Но можно получить пять, если выбирать комбинацию, которая как можно сильнее ограничивает множество решений. То есть для разных комбинаций и разных ответов множество возможных решений уменьшается по-разному. И в наших интересах выбрать ход, который уменьшает его как можно больше.
выбор очередного хода подробно освещен в иностранных статьях, я же, к сожалению, в него не углублялся — там слишком много вариантов нужно разобрать(как вы и сказали «для разных комбинаций и разных ответов множество возможных решений уменьшается по-разному»). это задача намного сложнее чем отсечение заведомо неверных вариантов в методе решета
Школа, турбо паскаль, 286. Изобретенный алгоритм — это было откровение. Тут же написанный перебор всех вариантов — за сколько ходов будет отгадано. Два варианта выбора — первое допустимое или случайное. Случайное, насколько помню, давало чуть меньшее среднее число попыток, но все равно они оставались на уровне 5-6.
Недавнее время, fallout 3. Взлом компьютеров по тому же самому алгоритму.
Недавнее время, fallout 3. Взлом компьютеров по тому же самому алгоритму.
Конечно возможно перебор и перестановки всячески оптимизировать, например перебирать поочередно с двух концов — «1111», «0000», «2222», «9999»...
Какая же это опимизация, если вероятность «выпадения» любого числа одинакова?
Меня забавляет объяснение неиспользования алгоритма угадывания за 7 ходов — «слишком много ветвления». Лолшто? И за сколько шагов ваш алгоритм угадывает?
Играем иногда в универе в эту игру (правда с несколько модифицированными правилами):) к даному алгоритму приходишь интуитивно игр после пяти;) а вот с выбором максимально эффективного следующего хода уже сложнее…
Объясните пожалуйста про переменные bk и kr в фунции pr. А именноусловия x
Не совсем по теме, но как забавно смотрится меню «Файл»! Как будто в нём действительно собраны операции для работы с файлами, а не кнопка выход. И это ни в коем случае не упрёк в ваш адрес.
Только что написал программу, используя этот метод решета.
Вероятно, я чего-то не понял, но у меня крайне редко случаются ситуации, когда нет ни одного попадания, так что программа работает практически на генераторе случайных чисел.
Вероятно, я чего-то не понял, но у меня крайне редко случаются ситуации, когда нет ни одного попадания, так что программа работает практически на генераторе случайных чисел.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Метод решета в игре «Быки и коровы»