Tauri și vaci

Tauri și vaci

E un fel de joc de genul ăsta. Poate există cineva la care se află o legătură cu implementarea sa (pe un cod sursă)? Sau cunoaște cineva algoritmul?
Condiții ca aceasta: o persoană ghicește un număr (4 caractere), iar computerul încearcă să ghicească. Dar nu numai acest lucru: oferă propriul număr de versiune, iar răspunsurile de utilizator: Cât de mulți tauri (numere, stând în locurile lor) și vaci (numere prezente în număr necunoscut, dar nu în picioare în locurile lor).






Aștept cineva să spună.

Îmi place că era undeva, dacă o găsesc, o voi trimite.

A venit pliz.
Poate cineva să o aibă?

Nu am, dar există o carte a lui Chesterella "Programarea Etudes" - este jocul cu o descriere a strategiei optime. Este simplu - pentru a construi tot felul de combinații. Și după fiecare încercare, imposibilul este îndepărtat (destul de mult). Fiecare mișcare este făcută astfel încât să reducă numărul de elemente la minim. Totuși, puteți colecta statistici despre preferințele unei persoane. În general, din punctul de vedere al companiei, jocul nu este deloc interesant - algoritmul este rigid. Un joc din seria "strategie fără joc" (Există, de asemenea, o carte a lui G. Arsak - vechi, dar acolo este de asemenea dezmembrat)

Aș fi cel puțin o bucată de cod.
Cum se păstrează opțiunile (set matrice.) Cum să se ocupe cu cea introdusă de către utilizator (fără nici o cunoaștere a ceea ce cifrele reale, și care nu sunt greu de ghicit ca variantele să-și amintească ceea ce utilizatorul a intrat și a fost convenabil de a folosi atunci?). Pe scurt, nu am făcut nimic bun, poate că există și alte gânduri / sfaturi?

faceți contrariul. lasa calculatorul sa ghiceasca calculatorul, dar ghiceste persoana. dar, în general, soluția este o serie de patru înregistrări

Simt ca adevarul este undeva aproape, dar ca si Mulder, nu pot intelege in nici un fel :).
Se poate vedea că TButton a presupus că eu voi ghici ce este o serie de patru înregistrări.

Este așa:
TMyArray = array [0..3] din
record
byte_: octet;
bol: boolean;
se încheie;
sau așa

TMyArray = array [0..9999] din
byte1: octet;
byte2: octet;
byte3: octet;
byte4: octet;
bol: boolean;
se încheie;

Sau altfel.
De asemenea, nu este clar ce să intrăm în această gamă.
Button (puteți fi numit familiar, nu ca o clasă, ci ca reprezentant, fără T.)), ați putea specifica.
Îmi pare rău dacă scriu prostii.

o înregistrare

tip TMyRec = înregistrare
# xA0; ghiciți: boolean; // adevărat - ghicit corect
# xA0; num: octet; # xA0; # xA0; # xA0; // numărul (dacă este ghicit - nu se modifică)
se încheie;

mulțime

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

bucată de cod

pentru i: = 1 la 4 nu
# xA0; dacă sapă [i] .guess
# xA0; # xA0; apoi continuați
# xA0; # xA0; altfel sapă [i] .dig: = Random (10);

Z., În calitate de reprezentant, este mai bine pentru Button1. dar eu sunt încă obișnuit să fiu o clasă.







ZY, m-am gândit. este posibil fără T, dar apoi - prin blestem (adică Baton)

> Șterse de moderator
Pentru ce?
> TButton
Mă tem că nu miroase, nu știm când să punem quess: = adevărat, deoarece utilizatorul nu ne spune numărul cifrelor corecte!

Spațiul de joc este o matrice a formei (dacă este de 4 cifre)

Joc: array [0..9.0..9.0..9.0..9] de boolean;

Inițial, totul este adevărat (toate opțiunile sunt posibile)

Deși îl puteți transforma într-un vector.

Dacă există o combinație de abcd - și cele cunoscute taur colo (x) și vaca (y), și x<>4, atunci este clar că combinația însăși nu se potrivește (devine Falsă). Revizuirea suplimentară a gamei de opțiuni. Și o operație a formulei Game [i, j, k, n] și CanBe (); Canbe dă Adevărat dacă ABCD modificarea cu x și y cunoscute pot da ijkn și false în caz contrar (de exemplu, dacă aveți un 1111 - zero, și tauri și vaci, combinația cu cel puțin un yedinichku va Fals). Apoi alegeți o nouă mișcare din spațiul jocului cu Adevărat, bine, etc. Până când o singură valoare rămâne.

Am scris ceva de genul acesta, a fost creată o serie de variante posibile:

tip
FourDigit = înregistrare
# xA0; 0..9;
# xA0; b. 0..9;
# xA0; c. 0..9;
# xA0; d. 0..9;
se încheie;

const
FileName = "Date.txt";

procedura TFormMain.ButtonCreateDataFileClick (expeditor: TObject);
var
Cykl. întreg;
A, B, C, D. 0..9;
Outfile. textfile;
TempArray. array [0..9999] de FourDigit;
OutRecCount. întreg;
începe
# xA0; OutRecCount: = 0;
# xA0; pentru Cykl: = 0 până la 9999
# xA0; începeți
# xA0; # xA0; A: = # xA0; Cykl DIV 1000;
# xA0; # A0; B: = (Cykl- (A * 1000)) DIV 100;
# xA0; C: = (Cykl- (A * 1000) - (B * 100)) DIV10;
# xA0; D: = (Cykl- (A * 1000) - (B * 100) - (C * 10));

# xA0; (A = C) sau (A = D) sau (B = C) sau (B = D) sau
# xA0; # xA0; începeți
# xA0; # xA0; # xA0; TempArray [OutRecCount] .a: = A;
# xA0; # xA0; # xA0; TempArray [OutRecCount] .b: = B;
# xA0; # xA0; # xA0; TempArray [OutRecCount] .c: = C;
# xA0; # xA0; # xA0; TempArray [OutRecCount] .d: = D;
# xA0; # xA0; # xA0; INC (OutRecCount);
# xA0; # xA0; sfârșitul;
# xA0; sfârșitul;
# xA0; AssignFile (OutFile, NumeFile);
# xA0; Rescrieți (OutFile);
# xA0; pentru Cykl: = 0 până la OutRecCount-1 faceți
# xA0; începeți
# xA0; # XA0; scrie (outfile, tempArray [Cykl] .a, tempArray [Cykl] .b, tempArray [Cykl] .c, tempArray [Cykl] .d);
# xA0; sfârșitul;
# xA0; CloseFile (OutFile);
se încheie;

când programul este încărcat, se încarcă o matrice:

const
FileName = "Date.txt";
ArrayLength = 5 '

var
DataArray. array [0..ArrayLength] din FourDigit;

procedura TFormMain.FormCreate (expeditor: TObject);
var
INFILE. Fișier de octet;
Cykl # xA0;. întreg;
A, B, C, D. octet;
începe
# xA0; AssignFile (InFile, FileName);
# xA0; Resetați (InFile);
# xA0; pentru Cykl: = 0 la ArrayLength do
# xA0; începeți
# xA0; # xA0; citiți (InFile, A, B, C, D);
# xA0; #XA0; DataArray [Cykl] .A: = StrToInt (Chr (A));
# xA0; #XA0; DataArray [Cykl] .B: = StrToInt (Chr (B));
# xA0; #XA0; DataArray [Cykl] .C: = StrToInt (Chr (C));
# xA0; #XA0; DataArray [Cykl] .D: = StrToInt (Chr (D));
# xA0; # xA0; Application.ProcessMessages;
# xA0; sfârșitul;
# xA0; CloseFile (InFile);
se încheie;


și apoi, de exemplu, o intrare a fost selectată din matrice și după răspunsul utilizatorului (punctul 3: 2), numai acele înregistrări care corespundeau răspunsului au fost suprascrise în noua matrice.
(Și numărătoarea în continuare a numerelor din matrice este mai mare., Etc.) Acest lucru ar trebui să fie suficient.

Sunt nou în cazul ăsta. dar a tradus acest program de la VB # xA0; și că el sa scris doar că nu am un bărbat care să ghicească numărul, iar programul dacă mă interesează o să trimit.

> Arximed
Când calculatorul este conceput, este mult mai ușor de implementat. Și nu un exemplu, atunci când computerul presupune că nu am găsit-o. Încerc să mă scriu :).

La mine și computerul gândește, numai cu răsturnări.

www.algolist.manual.ru - căutare, acolo este calculatorul ghicit.







Articole similare

Trimiteți-le prietenilor: