Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Быки и коровы   Найти похожие ветки 

 
pavel_k   (2003-11-04 21:49) [0]

Это вроде игра такая. Может есть у кого линк на ее реализацию (на исходник)? Или кто-то хоть алгоритм знает?
Условия вроде такие: человек загадывает число (4 знака), а комп пытается отгадать. Но не просто так: он предлагает свой вариант числа, а пользователь отвечает: сколько быков (чисел, стоящих на своих местах) и коров (чисел присутствующих в загаданном числе, но не стоящих на своих местах).
Жду кто что скажет.


 
reticon ©   (2003-11-04 23:53) [1]

у меня вроде где-то было, если найду - вышлю.


 
pavel_k   (2003-11-05 19:05) [2]

Пришли плиз...
Может еще у кого есть?


 
Gandalf ©   (2003-11-06 08:56) [3]

У меня нет, но сть книга Чезерелла "Этюды программирования" - там есть эта игра с описанием оптимальной стратегии. Она проста - строиться все множество комбинаций. И после каждой попытки удаляются невозможные (довольно много их). Каждый ход делается таким чтобы свести кол-во елементов к минимому. Можно еще статистику набирать по предпочтениям человека. Вообще с точки зрения компа игра совсем не итересесная - алгоритм жесткий. Игра из серии "стратегия без игры" (Есть еще книга Ж. Арсак - старье, но там она тоже разобрана)


 
pavel_k   (2003-11-06 21:36) [4]

Мне бы хоть кусочек кода...
Как хранить варианты (массив, множество, ...?), как учитывать то, что ввел пользователь (без знания того, какие цифры истинные, а какие нет трудно угадывать варианты, как запоминать то, что ввел юзер и это было удобно потом использовать?). Короче, у меня ничего хорошего не вышло, может есть еще какие мысли/советы?


 
TButton ©   (2003-11-07 18:33) [5]

сделай наоборот. пусть число загадывает компьютер, а отгадывает человек. а вообще решение это массив из четырех записей {byte+boolean}


 
pavel_k   (2003-11-07 21:12) [6]

Я чувствую, что истина где-то рядом, но как и Малдер никак не могу ее постичь :).
Видно TButton предполагал, что я сам догадаюсь, что такое массив из четырех записей {byte + boolean}.

Я не догадался :) .

Это типа так:
TMyArray=array[0..3] of
record
byte_:byte;
bol:boolean;
end;

или так

TMyArray=array [0..9999] of
byte1:byte;
byte2:byte;
byte3:byte;
byte4:byte;
bol:boolean;
end;

Или как-нибудь еще...
Так же не ясно что в этот массив вносить.
Button (можно вас называть фамильярно, не как класс, а как его представителя, без T? :) ), не мог бы ты конкретизировать.
Извините, если пишу глупости...


 
TButton ©   (2003-11-07 22:40) [7]

объясняю:

рекорд

type TMyRec=record
 guess:boolean; // true - угадали
 num:byte;      // число (если угадали - не меняем)
end;


массив

digs:array[1..4] of TMyRec;


вуаля

кусок кода

for i:=1 to 4 do
 if digs[i].guess
   then Continue
   else digs[i].dig:=Random(10);


 
TButton ©   (2003-11-07 22:41) [8]

З.,Ы если как представителя, то лучше Button1... но я все-таки привык как класс...


 
TButton ©   (2003-11-07 23:02) [9]

З.Ы, я тут подумал... можно без T, но тогда - руглишем (i.e. Батон)


 
pavel_k   (2003-11-08 13:20) [10]

Удалено модератором


 
pavel_k   (2003-11-09 17:21) [11]

UP


 
pavel_k   (2003-11-10 20:17) [12]

> Удалено модератором
За что?
>TButton
Боюсь так не запахает, мы не знаем, когда ставить quess:=true, так как пользователь не говорит нам номера правильных цифр!


 
Gandalf ©   (2003-11-12 08:42) [13]

Пространство игры это массив вида (если 4 цифры)

Game:array [0..9,0..9,0..9,0..9] of Boolean;

Изначально все True (т.е. все варианты возможны)

Хотя можно его и развернуть в вектор.

Если есть комбинация abcd - и известно колво быков (x) и коров (y), и x<>4 то ясно что сама комбинация не подходит (жначит она становится False). Далее пересматривает пространнство вариантов. И произовим над каждой яцейкой операцию вида Game[i,j,k,n] and CanBe(); CanBe дает True если модификация abcd при известных x и y может дать ijkn и False иначе (например если у тебя 1111 - и нуля быков и коров, то комбинация хотя бы с одной единичкой даст False). Потом выбираешь новых ход из пространства Game с True, ну т.д. пока не останется одно значение.


 
MegaVolt ©   (2003-11-12 10:15) [14]

Реализация отправлена :)


 
pavel_k   (2003-11-12 15:03) [15]

>Gandalf
Спасибо, я попробую!
>MegaVolt ©
Очень интересно, жаль что без исходника + в том что ты послал решается обратная задача (число загадывает комп, а мне надо, чтобы он отгадывал).
Всем спасибо за участие!!!  


 
now_aleks   (2003-11-13 01:09) [16]

У меня было написанно примерно так, был создан массив возможных варянтов :

type
FourDigit = record
 a : 0..9;
 b : 0..9;
 c : 0..9;
 d : 0..9;
end;

const
FileName = "Data.txt";

procedure TFormMain.ButtonCreateDataFileClick(Sender: TObject);
var
Cykl : integer;
A,B,C,D : 0..9;
OutFile : TextFile;
TempArray : array [0..9999] of FourDigit;
OutRecCount : integer;
begin
 OutRecCount:=0;
 for Cykl:=0 to 9999 do
 begin
   A:=  Cykl DIV 1000;
   B:= (Cykl-(A * 1000)) DIV 100;
   C:= (Cykl-(A * 1000)-(B * 100)) DIV 10;
   D:= (Cykl-(A * 1000)-(B * 100)-(C *10));

   if NOT ((A=B) OR (A=C) OR (A=D) OR (B=C) OR (B=D) OR (C=D) ) then
   begin
     TempArray[OutRecCount].a:=A;
     TempArray[OutRecCount].b:=B;
     TempArray[OutRecCount].c:=C;
     TempArray[OutRecCount].d:=D;
     INC(OutRecCount);
   end;
 end;
 AssignFile(OutFile,FileName);
 Rewrite(OutFile);
 for Cykl:=0 to OutRecCount-1 do
 begin
   write(OutFile,TempArray[Cykl].a,TempArray[Cykl].b,TempArray[Cykl].c,TempArray[Cykl].d);
 end;
 CloseFile(OutFile);
end;


при запуске проги загружасся массив :

const
FileName = "Data.txt";
ArrayLength = 5039;

var
DataArray : array [0..ArrayLength] of FourDigit;

procedure TFormMain.FormCreate(Sender: TObject);
var
InFile : File of byte;
Cykl   : integer;
A,B,C,D : byte;
begin
 AssignFile(InFile,FileName);
 Reset(InFile);
 for Cykl:=0 to ArrayLength do
 begin
   read(InFile,A,B,C,D);
   DataArray[Cykl].A:=StrToInt(Chr(A));
   DataArray[Cykl].B:=StrToInt(Chr(B));
   DataArray[Cykl].C:=StrToInt(Chr(C));
   DataArray[Cykl].D:=StrToInt(Chr(D));
   Application.ProcessMessages;
 end;
 CloseFile(InFile);
end;


а дальше например так, из массива выбиралась запись и после ответа пользывателя (н.п. 3:2 )в новый массив переписывались только те записи, которые соответствуют ответу.
(А дальше подсчет каких цифр в массиве больше. и.т.д.)Этого должно хватить.


 
Arximed ©   (2003-11-13 08:36) [17]

Я новичек в делфе , но переводил эту программу с VB  и ту писал сам только у меня не человек загадывает число ,а прога если интересует вышлю.


 
pavel_k   (2003-11-14 19:32) [18]

>Arximed
Когда загадывает комп - реализовывается намного проще. А не одного примера, когда комп отгадывает я не нашел. Пытаюсь писать сам :) .


 
Cardinal ©   (2003-11-16 18:44) [19]

У меня тоже комп загадывает, только с наворотами.


 
Cardinal ©   (2003-11-16 18:47) [20]

Вот: http://amis.fatal.ru/pic/rar/bk.rar


 
Valdas   (2003-12-18 13:35) [21]

www.algolist.manual.ru - ищите, там есть где комп отгадывает.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
14-1079221368
Кудесник
2004-03-14 02:42
2004.04.11
Воин


3-1079459290
Mike_T
2004-03-16 20:48
2004.04.11
SQL запрос!!! Уважаемые мастера помогите.


4-1075903468
UNIVERSAL
2004-02-04 17:04
2004.04.11
Хук на мышь.


14-1079630678
RealRascal
2004-03-18 20:24
2004.04.11
Если вы в течении 3 минут не смогли увидеть дельфинов - вас уже


7-1080199384
ламерламер
2004-03-25 10:23
2004.04.11
FormClass из строки