Oyunda;
- Verilen tüm sayılar kullanılmalı,
- Verilen bir sayı birden fazla kez kullanılamaz. (4466 sayıları verilmişse 2 kez 4, 2 kez 6 kullanılmalı!),
- 4 işlem dışında bir işlem kullanılmamalı,
- İşlemin sonucu 24'e eşit olmalı.
Oyun çözümleri: https://drive.google.com/file/d/0Bwiyh2g5UiGWZ212RnZMSEpEOVU/view?usp=sharing
Oyun linki: https://drive.google.com/file/d/0Bwiyh2g5UiGWUFNNX3hMc2s5WGs/view?usp=sharing
import random
with open("24solutions.txt" ,"r") as f: #dosyayı okumak için açıyoruz
lines = f.readlines() #tüm satırları okuyoruz
randomNumber = random.randrange(0,len(lines)) #0 ile satır sayısı-1 arasında bir sayı üretiyoruz
randomLine = lines[randomNumber].split("\t") #Ürettiğimiz sayıyı index sayısı olarak kullanıp bir satırı alıyoruz
numbers = [] #sayı listemiz için boş bir liste kullanıyoruz
numbers.extend(randomLine[1]) #dosyamızda satırlar 1.\t1118\t((1+1)+1)x8 şeklindeydi
#numbers.extend() fonksiyonu ile dosyadan text olarak aldığımız sayıları teker teker liste elemanı olarak numbers listesine ekliyoruz.
solution = randomLine[2] #bu satırı yukarıda split ile ayırıp liste oluşturduk. listemizin 2. elemanı kullanılabilecek sayılar, 3. elemanı çözümü içeriyor.
allowedChars = ["(",")","/","*","+","-"] #kullanılabilecek karakterler listemiz
allowedChars.extend(numbers) #bunlara bir de sayılarımızı ekliyoruz
print allowedChars #kullanıcıya kullanılabilecek karakter ve sayıları gösteriyoruz.
userSolution = raw_input("Please enter your solution: ") #kullanıcı çözümünü alıyoruz.
flag = True #kullanıcının hata yapmadığını farz ediyoruz.
for char in userSolution: #kullanıcıdan aldığımız metindeki karakterleri tek tek alıyoruz.
if char not in allowedChars: #herhangi bir karakter kullanılabilecek karakter sayılar içinde yoksa
message = "You used an invalid character. " #mesajımızı belirliyor ve geri kalan karakterleri kontrol etmemek için break kullanıyoruz.
flag = False #kullanıcının hata yaptığını belirlemek için flag değişkenimizi False yapıyoruz.
break
elif char in numbers: #kullanıcının girdiği karakterlerde sayı varsa
allowedChars.remove(char) #sayıyı allowedChars ve numbers listemizden çıkarıyoruz.
numbers.remove(char)
if len(allowedChars) != 6: #kullanıcı tüm sayıları kullanmışsa allowedChars listemizde tam olarak 6 eleman kalması gerekiyor. kalmamışsa;
message = "You did not use all the numbers or characters. " #mesajımız
flag = False #hata değişkenimiz False oluyor
elif eval(userSolution) != 24: #eval fonksiyonu matematiksel bir ifadeyi string olarak alıp, çözebiliyor.
#try.. except.. hata bloğu kullanılmalı burada aslında ancak şimdilik es geçiyorum.
message = "Your result is incorrect!"
if flag == True: #Bu adıma kadar flag değişkenimiz True olarak kaldıysa kazandınız mesajı
print "You won..!"
else: #False olarak değişmişse mesajımızı ve çözümümüzü gösteriyoruz.
print message
print "You lost. The solution might be: ", solution