Mastermind
Számkitaláló játék
Adatszerkezetek | Enumerációk | Függvények
mastermind.c fájlreferencia

a MasterMind játék algoritmikus megoldása Részletek...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

Ugrás a fájl forráskódjához.

Adatszerkezetek

struct  Response
 egy választ tároló típus Részletek...
 

Enumerációk

enum  { NUM_COLORS = 10, NUM_PEGS = 4, N0 = 10000 }
 egész konstansok Részletek...
 

Függvények

void printResponse (Response r)
 egy válasz kiírása a képernyőre Részletek...
 
int isSameResponse (Response r1, Response r2)
 két válasz megegyezik-e Részletek...
 
void digits (int a, int d[])
 egész szám jegyeinek előállítása Részletek...
 
Response common_digits (int guess, int secret)
 tipp és titkos szám közös jegyeinek meghatározása Részletek...
 
int filter (int S[], int N, int guess, Response response)
 Lehetséges megoldások halmazának szűrése tipp és válasz alapján. Részletek...
 
int weight (int S[], int N, int guess, Response response)
 tipp súlya egy adott válasz esetén Részletek...
 
int worstWeightOfGuess (int S[], int N, int guess)
 tipp maximális súlya minden lehetséges válasz esetére Részletek...
 
int findBestGuess (int S[], int N)
 legjobb tipp kikeresése az S halmazból Részletek...
 
int main (void)
 a főprogram
 

Részletes leírás

a MasterMind játék algoritmikus megoldása

Definíció a(z) mastermind.c fájlban.

Enumerációk dokumentációja

◆ anonymous enum

anonymous enum

egész konstansok

Enumeráció-értékek
NUM_COLORS 

színek száma

NUM_PEGS 

számjegyek száma

N0 

összes lehetséges választás.

Definíció a(z) mastermind.c fájl 9. sorában.

9  {
10  NUM_COLORS = 10,
11  NUM_PEGS = 4,
12  N0 = 10000
13 };

Függvények dokumentációja

◆ common_digits()

Response common_digits ( int  guess,
int  secret 
)

tipp és titkos szám közös jegyeinek meghatározása

Paraméterek
[in]guessa tipp
[in]secreta titkos szám
Visszatérési érték
a fekete és fehér tüskéket tartalmazó válasz

Definíció a(z) mastermind.c fájl 54. sorában.

54  {
55  Response res = {0, 0};
56  int i, j, dg[NUM_PEGS], ds[NUM_PEGS];
57 
58  digits(guess, dg); /* tipp jegyeinek számítása */
59  digits(secret, ds); /* titok jegyeimek számítása */
60 
61  /* fekete tüskék gyűjtése */
62  for (i = 0; i < NUM_PEGS; ++i)
63  if (dg[i] == ds[i]) {
64  res.black++;
65  dg[i] = -1;
66  ds[i] = -2;
67  }
68 
69  /* fehér tüskék gyűjtése */
70  for (i = 0; i < NUM_PEGS; ++i)
71  for (j = 0; j < NUM_PEGS; ++j)
72  if (dg[i] == ds[j]) {
73  res.white++;
74  ds[j] = -2;
75  break;
76  }
77 
78  return res;
79 }

Hivatkozások Response::black, digits(), NUM_PEGS és Response::white.

Hivatkozások: filter(), main() és weight().

◆ digits()

void digits ( int  a,
int  d[] 
)

egész szám jegyeinek előállítása

Paraméterek
[in]aaz egész szám
[out]da számjegyek tömbjének kezdőcíme

Definíció a(z) mastermind.c fájl 41. sorában.

41  {
42  int i;
43  for (i = 0; i < NUM_PEGS; ++i) {
44  d[i] = a % NUM_COLORS;
45  a /= NUM_COLORS;
46  }
47 }

Hivatkozások NUM_COLORS és NUM_PEGS.

Hivatkozások: common_digits().

◆ filter()

int filter ( int  S[],
int  N,
int  guess,
Response  response 
)

Lehetséges megoldások halmazának szűrése tipp és válasz alapján.

Paraméterek
[in]Sa megoldástömb kezdőcíme
[in]Na tömb mérete
[in]guessa tipp
[in]responsea válasz
Visszatérési érték
a szűrt tömb mérete

Definíció a(z) mastermind.c fájl 88. sorában.

89 {
90  int n = 0, i;
91  for (i = 0; i < N; ++i)
92  if (isSameResponse(common_digits(S[i], guess), response))
93  S[n++] = S[i];
94  return n;
95 }

Hivatkozások common_digits() és isSameResponse().

Hivatkozások: main().

◆ findBestGuess()

int findBestGuess ( int  S[],
int  N 
)

legjobb tipp kikeresése az S halmazból

Paraméterek
[in]Sa megoldástömb kezdőcíme
[in]Na tömb mérete
Visszatérési érték
a legjobb tipp

Definíció a(z) mastermind.c fájl 139. sorában.

139  {
140  int ming = 0, g;
141  int W = worstWeightOfGuess(S, N, S[ming]);
142  for (g = 1; g < N; ++g) {
143  int w = worstWeightOfGuess(S, N, S[g]);
144  if (w < W) {
145  W = w;
146  ming = g;
147  }
148  }
149  return S[ming];
150 }

Hivatkozások worstWeightOfGuess().

Hivatkozások: main().

◆ isSameResponse()

int isSameResponse ( Response  r1,
Response  r2 
)

két válasz megegyezik-e

Paraméterek
[in]r1az első válasz
[in]r2a második válasz
Visszatérési érték
igaz, ha megegyeznek, hamis egyébként

Definíció a(z) mastermind.c fájl 33. sorában.

33  {
34  return r1.black == r2.black && r1.white == r2.white;
35 }

Hivatkozások Response::black és Response::white.

Hivatkozások: filter() és weight().

◆ printResponse()

void printResponse ( Response  r)

egy válasz kiírása a képernyőre

Paraméterek
[in]ra válasz

Definíció a(z) mastermind.c fájl 24. sorában.

24  {
25  printf("(%d,%d)", r.black, r.white);
26 }

Hivatkozások Response::black és Response::white.

Hivatkozások: main().

◆ weight()

int weight ( int  S[],
int  N,
int  guess,
Response  response 
)

tipp súlya egy adott válasz esetén

Paraméterek
[in]Sa megoldástömb kezdőcíme
[in]Na tömb mérete
[in]guessa tipp
[in]responsea válasz
Visszatérési érték
a tipp és válasz súlya

Definíció a(z) mastermind.c fájl 104. sorában.

105 {
106  int w = 0, i;
107  for (i = 0; i < N; ++i)
108  if (isSameResponse(response, common_digits(S[i], guess)))
109  w++;
110  return w;
111 }

Hivatkozások common_digits() és isSameResponse().

Hivatkozások: worstWeightOfGuess().

◆ worstWeightOfGuess()

int worstWeightOfGuess ( int  S[],
int  N,
int  guess 
)

tipp maximális súlya minden lehetséges válasz esetére

Paraméterek
[in]Sa megoldástömb kezdőcíme
[in]Na tömb mérete
[in]guessa tipp
Visszatérési érték
a maximális (worst case) súly

Definíció a(z) mastermind.c fájl 119. sorában.

119  {
120  Response r;
121  int Weight = 0;
122  for (r.black = 0; r.black <= NUM_PEGS; ++r.black)
123  for (r.white = 0; r.white < NUM_PEGS; ++r.white) {
124  int w;
125  if (r.black+r.white > NUM_PEGS)
126  continue;
127  w = weight(S, N, guess, r);
128  if (w > Weight)
129  Weight = w;
130  }
131  return Weight;
132 }

Hivatkozások Response::black, NUM_PEGS, weight() és Response::white.

Hivatkozások: findBestGuess().

digits
void digits(int a, int d[])
egész szám jegyeinek előállítása
Definition: mastermind.c:41
weight
int weight(int S[], int N, int guess, Response response)
tipp súlya egy adott válasz esetén
Definition: mastermind.c:104
N0
@ N0
összes lehetséges választás.
Definition: mastermind.c:12
common_digits
Response common_digits(int guess, int secret)
tipp és titkos szám közös jegyeinek meghatározása
Definition: mastermind.c:54
Response::white
int white
a fehér tüskék száma
Definition: mastermind.c:18
NUM_PEGS
@ NUM_PEGS
számjegyek száma
Definition: mastermind.c:11
isSameResponse
int isSameResponse(Response r1, Response r2)
két válasz megegyezik-e
Definition: mastermind.c:33
Response::black
int black
a fekete tüskék száma
Definition: mastermind.c:17
NUM_COLORS
@ NUM_COLORS
színek száma
Definition: mastermind.c:10
worstWeightOfGuess
int worstWeightOfGuess(int S[], int N, int guess)
tipp maximális súlya minden lehetséges válasz esetére
Definition: mastermind.c:119
Response
egy választ tároló típus
Definition: mastermind.c:16