forked from Workintech/FSWeb-S2G1-Scope-ve-Closure
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
216 lines (169 loc) · 6.76 KB
/
index.js
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
//README DOSYASINDAKİ ADIMLARI TAKİP ETTİKTEN SONRA AŞAĞIDAKİLERİ YAPINIZ
// Başlangıç Challenge'ı
/**Örnek Görev: İlkini Dön
*
* Bu örnek sonradan gelecek olan görevleri nasıl çözeceğinizi size gösterecek.
*
* Aşağdıaki Yüksek dereceden fonskiyonu(higher-order function) kullanarak aşağıdakileri yapınız
* 1. Stringlerden oluşan bir array'i parametre olarak alın
* 2. Bir string'i değişken olarak alan bir callback fonksiyonunu parametre olarak alın
* 3. Array'in İLK elemanını değişken olarak alarak çalışacak olan callback fonksiyonunun sonucunu dönün
*
* Aşağıdaki kodlar bu görevin nasıl yapılacağına örnek olacaktır
* Bu fonskiyon 'asas' dönmeli(return)
*/
function ilkiniDon(stringArray, callback) {
return callback(stringArray[0])
}
console.log('örnek görev:', ilkiniDon(['as','sa'],function(metin){return metin+metin}));
// Başlangıç Challenge'ı Sonu
///// M V P ///////
/*Görev 1: macSkoru()
Aşağıdaki skor1 ve skor2 kodlarını inceleyiniz ve aşağıdaki soruları altına not alarak cevaplayın
1. skor1 ve skor2 arasındaki fark nedir?
2. Hangisi bir closure kullanmaktadır? Nasıl tarif edebilirsin? (yarınki derste öğreneceksin :) )
3. Hangi durumda skor1 tercih edilebilir? Hangi durumda skor2 daha mantıklıdır?
*/
// skor1 kodları
function skorArtirici() {
let skor = 0;
return function skorGuncelle() {
return skor++;
}
}
const skor1 = skorArtirici();
// skor2 kodları
let skor = 0;
function skor2() {
return skor++;
}
/* Görev 2: takimSkoru()
Aşağıdaki takimSkoru() fonksiyonununda aşağıdakileri yapınız:
1. Bir çeyrekte bir takımın ürettiği skoru rastgele(random) elde eden bir sonuc dönünüz(return)
Ön Bilgi: Bir çeyrekte takımlar ortalama 10 ile 25 sayı üretebiliyor
Örnek: takimSkoru çağrıldığında 10-25 arasında bir skor dönmeli
Not: Bu fonskiyon, aşağıdaki diğer görevler için de bir callback fonksiyonu olarak da kullanılacak
*/
function takimSkoru(){
let random_skor = Math.floor(Math.random() * 15) + 10;
return random_skor;
}
console.log(takimSkoru());
/* Görev 3: macSonucu()
Aşağıdaki macSonucu() fonksiyonununda aşağıdakileri yapınız:
1. Görev 2'de oluşturduğunuz 'takimSkoru'nu callback fonskiyonunu olarak ilk parametrede alın
2. Bir basketbol maçında oynanan çeyrek sayısını ikinci parametre olarak alın
3. Her çeyrekte EvSahibi ve KonukTakim için bir skor oluşturun
4. Her oynanan çeyrekten sonra EvSahibi ve KonukTakim için skoru güncelleyin
5. Son çeyrekten sonra, maçın bitiş skorunu bir object olarak dönün(return)
Örneğin: macSonucu(takimSkoru, 4) çalıştırınca aşağıdaki object'i dönmeli
{
"EvSahibi": 92,
"KonukTakim": 80
}
*/
const tablo_skor = {
"EvSahibi": 0,
"KonukTakim": 0
};
function macSonucu(takimSkoru, ceyrek_sayisi){
for (let i=0;i<ceyrek_sayisi;i++){
tablo_skor.EvSahibi= tablo_skor.EvSahibi + takimSkoru();
tablo_skor.KonukTakim= tablo_skor.KonukTakim + takimSkoru();
}
return tablo_skor;
}
console.log(macSonucu(takimSkoru, 4));
/* Zorlayıcı Görev 4: periyotSkoru()
Aşağıdaki periyotSkoru() fonksiyonununda aşağıdakileri yapınız:
1. Görev 2'de oluşturduğunuz 'takimSkoru'nu callback fonskiyonunu olarak ilk parametrede alın
2. takimSkoru callback fonksiyonunu kullanarak, EvSahibi ve KonukTakim için bir skor üretin
3. Bir object olarak EvSahibi ve KonukTakim skorunu dönün
Örneğin: periyotSkoru(takimSkoru) çalıştırınca aşağıdaki object'i dönmeli
{
"EvSahibi": 18,
"KonukTakim": 12
}
*/
function periyotSkoru(takimSkoru) {
const tablo_skor = {
"EvSahibi": 0,
"KonukTakim": 0
};
tablo_skor.EvSahibi=takimSkoru();
tablo_skor.KonukTakim=takimSkoru();
return tablo_skor;
}
console.log(periyotSkoru(takimSkoru));
/* Zorlayıcı Görev 5: skorTabelasi()
Aşağıdaki skorTabelasi() fonksiyonunu kullanarak aşağıdakileri yapınız:
1. İlk parametre olarak Görev 4'te oluşturduğumuz 'periyotSkoru'nu bir değişken olarak almalı
2. İkinci parametre olarak Gröev 2'de oluşturduğumuz 'takimSkoru'nu bir değişken olarak almalı
3. Üçüncü parametre olarak da oynanacak olan çeyrek sayısını alın
4. Her bir çeyreğin sonucunu bir string olarak bir array içinde dönün. Aşadaki örnek gibi olmalı. Her çeyrekteki atılan sayıları ayrı ayrı yazmalı(toplam skoru değil!).
5. Eğer maç berabere biterse uzatmalar oynanmalı ve "Uzatma 1: Ev Sahibi 13 - Konuk Takım 11" eklemeli. (Her uzatma için ayrı ayrı eklemeli)
6. Maç bitince de final skoru yazmalı: "Maç Sonucu: Ev Sahibi 101 - Konuk Takım 98"
MAÇ UZAMAZ ise skorTabelasi(periyotSkoru,takimSkoru,4)
[
"1. Periyot: Ev Sahibi 10 - Konuk Takım 21",
"2. Periyot: Ev Sahibi 20 - Konuk Takım 13",
"3. Periyot: Ev Sahibi 13 - Konuk Takım 9",
"4. Periyot: Ev Sahibi 18 - Konuk Takım 11",
"Maç Sonucu: Ev Sahibi 61 - Konuk Takım 54"
]
MAÇ UZAR ise skorTabelasi(periyotSkoru,takimSkoru,4)
[
"1. Periyot: Ev Sahibi 10 - Konuk Takım 21",
"2. Periyot: Ev Sahibi 20 - Konuk Takım 13",
"3. Periyot: Ev Sahibi 13 - Konuk Takım 9",
"4. Periyot: Ev Sahibi 18 - Konuk Takım 18",
"1. Uzatma: Ev Sahibi 10 - Konuk Takım 6"
"Maç Sonucu: Ev Sahibi 71 - Konuk Takım 67"
]
] */
// NOTE: Bununla ilgili bir test yoktur. Eğer logladığınız sonuçlar yukarıdakine benziyor ise tmamlandı sayabilirsiniz.
function skorTabelasi(periyotSkoru,takimSkoru,ceyrek_sayisi) {
const tablo_skor = {
"EvSahibi": 0,
"KonukTakim": 0
};
let ceyrek_sayac=0;
let ceyrek_dizi=[];
for(let i = 0 ; i<ceyrek_sayisi; i++){
let ceyrek=periyotSkoru(takimSkoru);
console.log(`${i+1} Periyot: Ev Sahibi ${ceyrek.EvSahibi} - Konuk Takım ${ceyrek.KonukTakim}`);
tablo_skor.EvSahibi=tablo_skor.EvSahibi + ceyrek.EvSahibi;
tablo_skor.KonukTakim=tablo_skor.KonukTakim+ ceyrek.KonukTakim;
}
/*
tablo_skor.EvSahibi=40;
tablo_skor.KonukTakim=40;
*/
if(tablo_skor.EvSahibi===tablo_skor.KonukTakim){
let uzatma_sayac=0;
while(tablo_skor.EvSahibi===tablo_skor.KonukTakim){
let uzatma=periyotSkoru(takimSkoru);
console.log(`${uzatma_sayac+1} Uzatma: Ev Sahibi ${uzatma.EvSahibi} - Konuk Takım ${uzatma.KonukTakim}`);
tablo_skor.EvSahibi=tablo_skor.EvSahibi + uzatma.EvSahibi;
tablo_skor.KonukTakim=tablo_skor.KonukTakim+ uzatma.KonukTakim;
uzatma_sayac=uzatma_sayac+1;
}
}
console.log(`Maç Sonucu: Ev Sahibi ${tablo_skor.EvSahibi} - Konuk Takım ${tablo_skor.KonukTakim} `);
}
/* Aşağıdaki satırları lütfen değiştirmeyiniz*/
function sa(){
console.log('Kodlar çalışıyor');
return 'as';
}
sa();
module.exports = {
sa,
ilkiniDon,
skor1,
skor2,
takimSkoru,
macSonucu,
periyotSkoru,
skorTabelasi,
}