böyle biraz karışda olsa sonuca giden bir şey yazdım
sorun şurda çıkıyor
istenenler=[]
for i in kullanılacak:
ekle=[]
for j in i:
ekle.append(int(j))
if sum(ekle)==100:
istenenler.append(i)
for i in istenenler:
if set(i)=={'123','45','-67','8','-9'}:
True
Şimdi 10 tane buldum. Yukarıda attığım kodda saçma bir hata yapmışım, düzelttim.
import itertools
sayılar = "123456789"
sonuçlar = set()
for ayıraç_sayısı in range(7):
ayıraçlar = itertools.combinations(range(1, 9), ayıraç_sayısı)
for ayıraç in ayıraçlar:
sayı_listesi = []
start = 0
for i in ayıraç:
if not (e := sayılar[start:i]): continue
sayı_listesi.append(e)
start = i
if e := sayılar[start:]: sayı_listesi.append(e)
for k in range(2 ** (len(sayı_listesi) - 1)):
toplam = sayı_listesi[0]
for i, j in enumerate(sayı_listesi[1:]):
if k & 2**i:
toplam += "+" + j
else:
toplam += "-" + j
## print(toplam)
if eval(toplam) == 100:
sonuçlar.add(toplam)
## print()
print(sonuçlar)
import itertools
sayılar = "123456789"
sonunsonu=[]
for ayıraç_sayısı in range(8):
ayıraçlar = itertools.combinations(range(1, 9), ayıraç_sayısı)
aranan_listeler = []
for ayıraç in ayıraçlar:
## print(ayıraç)
sayı_listesi = []
start = 0
for i in ayıraç:
if not (e := sayılar[start:i]): continue
sayı_listesi.append(sayılar[start:i])
start = i
if e := sayılar[start:]: sayı_listesi.append(e)
for j in sayı_listesi:
aranan_listeler.append(sayı_listesi)
ekle1 = []
for i in aranan_listeler:
if i not in ekle1:
ekle1.append(i)
ekle2 = []
for i in ekle1:
a = ' -'.join(i)
ekle2.append(a)
ekle3 = []
for j in ekle2:
b = j.split(' ')
ekle3.append(b)
işlem_listesi = []
for i in range(0, len(ekle1)):
işlem_listesi.append(ekle1[i] + ekle3[i])
kullanılacak = []
for i in işlem_listesi:
for k in range(1, len(i) + 1):
a = itertools.combinations(i, k)
for j in a:
kullanılacak.append(list(j))
istenenler = []
for i in kullanılacak:
sayaç = 0
for j in i:
sayaç += int(j)
if sayaç == 100:
istenenler.append(i)
sonuç = []
for i in istenenler:
kullan = []
for j in i:
kullan.append(abs(int(j)))
if len(set(kullan)) == len(kullan):
sonuç.append(i)
ensonunda=[]
for i in sonuç:
ekle=[]
for j in i:
a=j.replace('-','')
ekle.append(a)
topla=''
for k in ekle:
topla+=k
if len(topla)==9:
ensonunda.append(i)
sonunsonu.append(ensonunda)
buraya=[]
for i in sonunsonu:
for j in i:
buraya.append(j)
vurgun=[]
for i in buraya:
if set(i) not in vurgun:
vurgun.append(set(i))
print(vurgun)
print(len(vurgun))
Ufak bir sayı sonucu ne kadar da çok değiştiriyor for ayıraç_sayısı in range(7):yi for ayıraç_sayısı in range(8): yaptım ve sonuç çıktı.
import itertools
sayılar = "123456789"
sonuçlar = set()
toplamlar = []
for ayıraç_sayısı in range(8):
ayıraçlar = itertools.combinations(range(1, 9), ayıraç_sayısı)
for ayıraç in ayıraçlar:
sayı_listesi = []
start = 0
for i in ayıraç:
if not (e := sayılar[start:i]): continue
sayı_listesi.append(e)
start = i
if e := sayılar[start:]: sayı_listesi.append(e)
## if len(sayı_listesi) > 2 and sayı_listesi[-2] == "78": print(sayı_listesi)
for k in range(2 ** (len(sayı_listesi))):
toplam = ""
for i, j in enumerate(sayı_listesi):
if k & 2**i:
toplam += "+" + j
else:
toplam += "-" + j
## print(toplam)
toplamlar.append(toplam)
if eval(toplam) == 100:
sonuçlar.add(toplam)
print(sonuçlar)
Kodun github’daki halini de düzelttim, en başta döngüyü kurarken ayıraç sayısını yanlış düşünüp 8 yerine 7 yazmışım. Şimdi kodun son hali bu:
from algoritmalar import hepsini_ayır
sayılar = "123456789"
sonuçlar = set()
for sayı_listesi in hepsini_ayır(sayılar):
for k in range(2 ** (len(sayı_listesi))):
toplam = ""
for i, j in enumerate(sayı_listesi):
if k & 2**i:
toplam += "+" + j
else:
toplam += "-" + j
if eval(toplam) == 100:
sonuçlar.add(toplam)
print(sonuçlar)
from algoritmalar import hepsini_ayır, product
sayılar = "123456789"
sonuçlar = set()
for sayı_listesi in hepsini_ayır(sayılar):
for k in range(2 ** (len(sayı_listesi) -1)):
toplam = sayı_listesi[0]
for i, j in enumerate(sayı_listesi[1:]):
if k & 2**i:
toplam += "+" + j
else:
toplam += "-" + j
if eval(toplam) == 100:
sonuçlar.add(toplam)
print(sonuçlar)
print()
print(len(sonuçlar))