-
Notifications
You must be signed in to change notification settings - Fork 1
/
sayi-dizisi-oyunu.pl
108 lines (87 loc) · 2.21 KB
/
sayi-dizisi-oyunu.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
Sayi Dizisi Tahmini Oyunu
Oyuncu : Insan
Tolga Okur
Programi run. komutu ile calistirin ve tahmininizi [X,Y,Z,T]. seklinde girin.
SWI-Prolog ile test edilmistir.
*/
clear :- format('~c~s~c~s',[0x1b,"[H",0x1b,"[2J"]).
:- dynamic
cozum/1, % Bilgisayar tarafindan uretilen random dizi
sayi/1. % Kullanicinin her adimda girdigi deger
/* ********************** OYUN ************************* */
run:-
basla.
basla:- %Oyunu baslatan procedure
clear,
retractall(cozum(_)),
randomListGenerator(4,1,9,Random),
assert(cozum(Random)),
oyna,
write('\n'),write('Cozumunuz dogru, tebrikler').
sayiAl:-
write('Diziyi Girin : '),
read(A),
assert(sayi(A)).
sayiYaz:-
sayi(X),
write(X),
cozum(C),
icermeSayisi(X,C,R),
eslesmeSayisi(X,C,E),
write('--> Icerme : '),write(R),
write(' Eslesme :'),write(E),write('\n'),
fail.
sayiYaz.
oyna:-
not(cozumKontrol),
retractall(sayi(_)),
sayiAl,
sayiYaz,
oyna,
fail.
oyna:-
cozumKontrol,
fail.
oyna.
icermeSayisi([],_,0). % Bir listede diger listedeki elemanlardan kac tane bulundugu
icermeSayisi([H|T],List2,R):-
icermeSayisi(T,List2,R2),
memberchk(H,List2),
R is R2 + 1.
icermeSayisi([H|T],List2,R):-
icermeSayisi(T,List2,R2),
not(memberchk(H,List2)),
R is R2.
eslesmeSayisi([],[],0). % Iki listede tam olarak eslesen sayilarin sayisi
eslesmeSayisi([H|T],[B|S],R):-
eslesmeSayisi(T,S,R2),
esitMi(H,B),
R is R2 + 1.
eslesmeSayisi([H|T],[B|S],R):-
eslesmeSayisi(T,S,R2),
not(esitMi(H,B)),
R is R2.
esitMi(S1,S2):- % Iki degerin esitlik kontrolu
S1 = S2.
lengthOf([], 0). % Liste uzunlugu
lengthOf([_|T], L):-
lengthOf(T, TailLength),
L is TailLength + 1.
cozumKontrol:- % Cozumun dogrulugunun kontrolu
cozum(X),
sayi(Y),
eslesmeSayisi(X,Y,C),
lengthOf(X,L),
C = L.
% Cozum'un random olarak olusturulmas,
randomListGenerator(ListSize,Start,End,RandomList):-
Dif is End - Start + 1,
Operation is Start - 1,
randseq(ListSize,Dif,TempList),
placeList(TempList,Operation,RandomList).
% Istenen degerin listede istenilen noktaya eklenmesi
placeList([],_,[]).
placeList([H|T],Op,[L|R]):-
placeList(T,Op,R),
L is H + Op.