практическая задача

Байк и около него
Ответить
  • Автор
  • Сообщение
Аватара пользователя
Сообщения: 3985
Зарегистрирован: 2007-май-09 05:06
Стиль катания: выпас скотта
Способ связи: 8 927 758 57 38
Откуда: Самара

практическая задача

Сообщение TopIce » 2009-авг-29 04:40

Была у меня на старом сотовом занимательная игра, в ней предлогалось отгадать задуманое ею шестизначное число с наименьшего количества попыток, на каждую попытку программа выдавала подсказку в виде:
х-чисел верны и находятся на своих местах
у-чисел верны, но не на своем месте

на примере:
Пусть загадано число 9245, а угадывающий делает ход 1294. Тогда ему приходит следующий ответ от загадавшего: 1х (совпали вторые цифры по позиции) + 2у (так как в обоих числах есть четвёрки и девятки, но они на разных позициях).

Задача:
Придумать алгоритм программы которая будет разгадывать число загаданое человеком с минимальным количеством попыток

Сообщения: 986
Зарегистрирован: 2009-май-13 11:19
Стиль катания: безаварийный
Способ связи: 8 929 705 47 08
Откуда: Самара, Аврора

Re: практическая задача

Сообщение Ольга_13 » 2009-авг-29 08:42

Вроде бы есть такие программы типа : разделить на ... , вычесть ... , потом умножать....
А вообще врятли какая либо программа может угадать цисло находящееся в мыслях. Это скорее экстрасенс, и то они этим не занимаются... мыслей в голове много и 1 цифорку найти....
Хотя если придумать аппарат, одеваемый на голову... и проводимым током в определенную часть головы он мог бы выводить хотя бы что нибудь похожее на цифру.... было бы весело...

Сообщения: 1958
Зарегистрирован: 2005-авг-08 07:52
Реальное имя: Алексей
Стиль катания: По набережной
Способ связи: 9033028245
Откуда: Самара

Re: практическая задача

Сообщение Balrog » 2009-авг-29 08:53

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

Аватара пользователя
Сообщения: 3985
Зарегистрирован: 2007-май-09 05:06
Стиль катания: выпас скотта
Способ связи: 8 927 758 57 38
Откуда: Самара

Re: практическая задача

Сообщение TopIce » 2009-авг-29 13:56

Вы пропустили важны момент, на каждый запрос игрока ему выдается подсказка, и на основании этой подсказки можно подобрать загаданое число

KIZ
Аватара пользователя
Сообщения: 558
Зарегистрирован: 2009-апр-29 15:37
Байк: Квазимонохромный
Реальное имя: Антон
Стиль катания: Воин Воскресенья
Способ связи: мобилка 8917-9пять2-07-сорок
Откуда: Куй бы шефф

Re: практическая задача

Сообщение KIZ » 2009-авг-29 14:20

Число представляем в виде массивчега из 6 элементов.(a) Ещё один булевский такой же размерности - это будет вектор совпавших цифр(на своих местах стоят уже, ни в одном из пунктов их не учитываем).(b) Ещё треба матрицу 6 на 10, для запоминания уже проверенных и не совпавших чисел на каждой позиции(при случайном бросании на это место их уже не учитываем).(c)

1.Очередная попытка - случайная.(Здесь и далее уже совпавшие цифры не трогаем.)

2.После каждой попытки анализ:
Если число совпавших чисел с предыдущей попытки не увеличилось(ни x ни y) - ещё раз случайно за вычетом уже совпавших и уже попробованных цифр.

3.Если увеличилось число совпавших(x): последовательно меняем на любую другую цифру элементы массива а, добиваемся того, чтобы выдаваемое число x уменьшилось на 1. Таким образом вычисляем совпавшую цифру, отмечаем в массиве b соответствующий элемент. Если совпало больше двух - повторяем.(Есть простор оптимизации, если к примеру в процессе отыскания x или y увеличился, неплохо бы с этим числом в начало пункта идти).

4.Если увеличилось y: Последовательно берём каждую цифру и меняем её местами с другими. Ждём пока x не увеличится, а y не уменьшится(на 1 или 2).Важно, чтобы x увеличился на столько же, насколько y уменьшился, только тогда можно иметь гарантию что совпали нужные числа. Если x увеличился только на 1, тогда ещё надо выяснить, какое из двух обменянных чисел совпало. (Ясен пень, что только первое число меняем со всеми остальными, второе уже с первым не меняем, третье с первыми двумя и т.д.)

5.Усё, запоминаем новые текущие x и y и идём пытать щастье дальше на пункт 1.
_________________
Изображение

Аватара пользователя
Сообщения: 3985
Зарегистрирован: 2007-май-09 05:06
Стиль катания: выпас скотта
Способ связи: 8 927 758 57 38
Откуда: Самара

Re: практическая задача

Сообщение TopIce » 2009-авг-29 15:09

перебор в пол дня. можно делать это в меньшее количество ходов(попыток).

KIZ
Аватара пользователя
Сообщения: 558
Зарегистрирован: 2009-апр-29 15:37
Байк: Квазимонохромный
Реальное имя: Антон
Стиль катания: Воин Воскресенья
Способ связи: мобилка 8917-9пять2-07-сорок
Откуда: Куй бы шефф

Re: практическая задача

Сообщение KIZ » 2009-авг-29 16:36

Даже самый старенький микропроцессор сделает это максимум за несколько секунд, ибо постоянно вычёркиваются совпавшие + уже опробованные. Есесено ИМХО, не отрицаю существование более быстрого алгоритма.
_________________
Изображение

Аватара пользователя
Сообщения: 3985
Зарегистрирован: 2007-май-09 05:06
Стиль катания: выпас скотта
Способ связи: 8 927 758 57 38
Откуда: Самара

Re: практическая задача

Сообщение TopIce » 2009-авг-29 18:03

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

Аватара пользователя
Сообщения: 6187
Зарегистрирован: 2006-сен-03 12:48
Байк: C1*v^2+C2*v=F
Реальное имя: Кирилл
Стиль катания: Fc=mv^2/R
Способ связи: https://vk.com/onkel_q
Откуда: null

Re: практическая задача

Сообщение kudessnik » 2009-авг-29 18:16

форум упоротых программистов?
_________________
Столяр-кораблекрушитель.
FAQ раздела Техника и аксессуары
А что вы ожидали здесь увидеть?

KIZ
Аватара пользователя
Сообщения: 558
Зарегистрирован: 2009-апр-29 15:37
Байк: Квазимонохромный
Реальное имя: Антон
Стиль катания: Воин Воскресенья
Способ связи: мобилка 8917-9пять2-07-сорок
Откуда: Куй бы шефф

Re: практическая задача

Сообщение KIZ » 2009-авг-30 09:31

Упростил немного, хотя быстрее или медленнее стал работать - ?

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

Если уменьшилось x или y - делаем откат на предыдущее число. Фиксируем этот разряд, как уже совпавший, больше его не трогаем.

Не изменилось - ещё раз случайно бросаем тот же разряд.

Увеличилось - запоминаем новое число, фиксим этот разряд как совпавший.

Делаем так, пока x + y < 6.

Как только все цифры стали известны, осталось делать перестановки, по дороге фиксируя увеличение x.

(Ради простоты выкинул из процесса случайного бросания момент учитывания уже попробованных на этот разряд цифр. Лучше конечно его вставить, будет гарантия сходимости.)
_________________
Изображение
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]