Nerede kalmıştık? Sırasıyla sayısal loto şans oyunu ve Java ile ilgili günn gece paylaştığım 3 örneğin linkini buraya bırakayım:
- Java ile Sayısal Loto çekilişi yapan program kodlamak
- Java'da sayısal loto kuponunun kaç tane tutturduğunu hesaplayan program
- Java'da Sayısal Loto Kazanç Kayıp Simülasyonu Yapmak
Özet geç diyenler için Previously On Java: Dün gece en son milyonlarca deneme yaparak sayısal loto oynadık ama buna rağmen hiç 6 tutturamadık, bir de üzerine binlerce lira zarara girdik. Peki diyelim ki Sayısal Loto'da 6 tutturmakla kafayı iyice bozduk ve tutturuncaya kadar deneme yapmaya devam ediyoruz, kaçıncı denemede 6 tutturduğunu hesaplayan bir Java programı kodlayalım da bu merakımızı gidermek için yüz binlerce lira harcamamıza gerek kalmasın.
Not: Bu kodu çalıştırıp çıktı vermesini beklemek, dün yazdığımız kodlarda performasa hiç dikkat etmediğimiz için biraz fazla uzun sürebilir. Bu yüzden ufak düzeltmeler yapalım ve gereksiz sıralama işlemlerinden kaçınalım ve vektör karşılaştırması için Arrays.equals metodunu kullanalım.
Kodlar:
public static void main(String [] args) {
double denemesayisi=0;
//çekiliş yapalım
int[] cekilis = cekilisYap();
//6 tutturuncaya kadar kupon dolduralım
int[] kupon;
do
{
kupon = kuponDoldur();
denemesayisi++;
}
while (!Arrays.equals(cekilis, kupon));
Arrays.sort(cekilis);
System.out.println("Tebrikler, "+(int)denemesayisi+". denemede sayısal lotodan 6 tutturmayı başardınız");
System.out.println("Kuponunuz: "+Arrays.toString(kupon));
System.out.println("Çekiliş Sonuçları: "+Arrays.toString(kupon));
}
public static int topCek()
{
return (int)(Math.random()*49)+1;
}
public static int[] cekilisYap()
{
int[] cekilis = new int[6];
for (int i=0; i<6; i++)
{
boolean kontrol=true;
while (kontrol)
{
int top=topCek();
kontrol = IntStream.of(cekilis).anyMatch(x -> x == top);
if(!kontrol)
cekilis[i]=top;
}
}
Arrays.sort(cekilis);
return cekilis;
}
public static int[] kuponDoldur()
{
int[] kupon = new int[6];
for (int i=0; i<6; i++)
{
boolean kontrol=true;
while (kontrol)
{
int top=topCek();
kontrol = IntStream.of(kupon).anyMatch(x -> x == top);
if(!kontrol)
kupon[i]=top;
}
}
Arrays.sort(kupon);
return kupon;
}
Çıktı:
Tebrikler, 34293188. denemede sayısal lotodan 6 tutturmayı başardınız
Kuponunuz: [7, 19, 23, 26, 31, 37]
Çekiliş Sonuçları: [7, 19, 23, 26, 31, 37]
Sonuç: Yaklaşık 34 milyon kupon doldurarak sayısal lotoda 6 tutturmayı başardık, her hafta sayısal loto oynamasına rağmen 6 tutturamadığında şanssızlığına ve kadere isyan eden kişilere de bu yazıyı gönderin olur mu.
Edit: Birkaç deneme daha yaptım, şimdilik rekorum 674.477. Yani her hafta bir kupın yapsam bu şansla 12.970 yılda sayısal lotodan büyük ikramiyeyi kazanabilirim.