2023-08-30, 20:05
  #109
Medlem
Citat:
Ursprungligen postat av Enterprise
Lågnivåspråk i det här fallet är typ C eller Rust som oftast är betydligt snabbare på att göra stort antal beräkningar jämför med Python, men kräver mer ansträngning att skriva.

Förstår jag dig rätt att du vill att summan av alla 13 kombinationer ska kunna bli ett visst tal (med en viss felmarginal), t.ex. att summan ska bli 200 med felmarginal på +/-0,05 (i intervallet 199,95 - 200,05)?
Alltså om skriptet märker att summan är större än intervallet så kan den sluta räkna och gå vidare till nästa iteration?

Glöm inte bort att för att "bara" räkna ut den högsta och lägsta raden (även om du bara sparar två rader i minnet) så måste man iterera över 13 miljarder kombinationer.

Japp, högsta raden var bara ett exempel för att kolla tiden för en körning och att du inte skulle få ut för många rader, men intervallet ser helt rätt ut, det är ju väldigt svårt att gissa hur många rader det blir i ett intervall, men du har förstått hur jag menar iaf. 🙂
Citera
2023-08-30, 21:51
  #110
Medlem
Enterprises avatar
Efter några timmars kämpande har jag fått fram en version som verkar fungera så pass mycket så att:
A) Skriptet kan hämta hem data från Svenska spel också för Fullträff
B) Det kan normalfördela fullträff-oddsen 0-100
C) Det kan itetera genom alla 13 miljarder kombinationer (varje miljon iterationer skriver ut en rad för att visa att datorn jobbar) och skriva ut på skärmen de kombinationer som fungerar. En begränsning är satt vid 10 000 rader (svenska spels gräns).

Meningen med detta är att du kan finslipa vilken nivå som intervallet ska ligga på.
Om det ligger på 300 +/- 1 så spottar den ur sig 10 000 rader på noll tid.
Däremot 200 +/- 0.05 så står den och tuggar miljoner iterationer utan att hitta några kombinationer med denna summa (jag har inte tålamod som sagt att vänta).

Skriptet i nuvarande form, kommer i sin helhet i nästa post.
Skriptet är alltså inte färdigställt på så sätt att det sparar en textfil i Fullträffs-läget.
Men när du testat det och finkalibrerat vilket intervall som är intressant kan det kompletteras för att kunna spara en textfil på samma sätt som övriga spellägen.

Just här och nu sitter jag på en liten och gammal Nuc med Linux Mint, men den klarar 1 miljon iterationer per sekund, vilket innebär att 13 miljarder (13 000 miljoner) iterationer tar cirka 3 1/2 timme
Det hade förvisso gå att snabba upp koden med parallels, men jag orkar inte.
__________________
Senast redigerad av Enterprise 2023-08-30 kl. 22:04.
Citera
2023-08-30, 21:52
  #111
Medlem
Enterprises avatar
Kod:
import requests
import re
import json

import itertools
import sys

gamemode = int(input("Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff "))

if not gamemode in [1,2,3]:
        print ("Endast 1-3 möjliga val. Avbryter.")
        quit()

if gamemode == 3:
	pgoal = int(input("Önskad summa (heltal) ? "))
	pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? "))
	pmin = pgoal-pdev
	pmax = pgoal+pdev
else:
	pmin = int(input("Golvnivå för antal streck (t.ex. 500)? "))
	pmax = int(input("Taknivå för antal streck (t.ex. 550)? "))

mde = int(input("Tryck 1 för text-fil och 2 för CSV-fil: "))

if not mde in [1,2]:
	print ("Endast 1 eller 2 möjliga val. Avbryter.")
	quit()

urls = ["", "https://spela.svenskaspel.se/stryktipset" , "https://spela.svenskaspel.se/europatipset","https://spela.svenskaspel.se/fulltraff"]

url = urls[gamemode]

outfiles = ["","tips.txt","tips.csv"] # namn för dina output-filer
outfile = outfiles[mde]

response = requests.get(url)
html_content = response.text

pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});'
match = re.search(pattern, html_content)
json_str = match.group(1)
json_obj = json.loads(json_str)
gameDict = json_obj["EventTypeStatistic"]
gameKeys = list(dict.keys(gameDict))

signlists = []

if gamemode == 3:  # om fullträff, sätt upp lista utifrån 13 rader
	rowlist=[]	
else:   # annars sätt upp lista utifrån 3 tecken
	for _ in range(0,3):
		signlists.append([])

for gameKey in gameKeys: # iterera över alla 13 matcher
	if gamemode==3:  # Fullträff
	
		game = gameDict[gameKey]["odds"]["current"]["value"]  # hämtar odds-värden från Fullträff-sidan
		gamesum = 0.0
		floats = []
		fgame = []
		
		for i in range(0,6): # obs! använd enbart 0-5 mål, ignorera 6 och 7+ mål
			f = float(game[i])
			floats.append(f)
		
		gamesum = sum(floats)
	
		for ix,o in enumerate(floats):
			newo = 100.0 * o / gamesum  # normalfördela fullträff-oddsen så att summan blir 100.0
			if ix<6:
				fgame.append(newo)

		rowlist.append(fgame)

	else:   # Tipsspel
		game = gameDict[gameKey]["distributions"][str(gamemode)]["Global"]["current"]["value"] # Hämta streckfördelning
	
		
	for ix,perc in enumerate(game):
		if gamemode<3:
			signlists[ix].append(int(perc)) # använd heltal för tipsen

if gamemode<3:
	P = { "1": signlists[0], "X": signlists[1], "2": signlists[2] } 
	rows = itertools.product(*(['1X2'] * 13))

	cn = 0

	with open(outfile, 'w') as f:  
		for row in rows:
			percentage = sum(P[result][n] for (n, result) in enumerate(row))
		
			if  pmin <= percentage <= pmax:
				cn += 1
				if mde==1:
					f.write("E,"+','.join(row)+"\n")
				if mde==2:
					f.write(','.join(row + (str(percentage),))+"\n")
else:
	maxcoupons = 10000
	cn = 0
	tsts = 0
	
	for ix,row in enumerate(rowlist):
		print(ix,":",row)

	valid_combinations = []

	for comb in itertools.product(*[enumerate(row) for row in rowlist]):  # Cartesian product of all rows with enumerated elements
		
		indices, values = zip(*comb)  # Unzip the enumerated pairs into indices and values
		s = sum(values)
		tsts += 1

		if tsts % 1000000 == 0:
			print(int(tsts / 1000000)," million iterations")
		if pmin <= s <= pmax:
			valid_combinations.append(indices)
			print(indices)
			cn += 1
		if cn>maxcoupons:
		    break


print(f"{outfile} skapad med {cn} rader!")
__________________
Senast redigerad av Enterprise 2023-08-30 kl. 21:54.
Citera
2023-08-31, 07:00
  #112
Medlem
Citat:
Ursprungligen postat av Enterprise
Efter några timmars kämpande har jag fått fram en version som verkar fungera så pass mycket så att:
A) Skriptet kan hämta hem data från Svenska spel också för Fullträff
B) Det kan normalfördela fullträff-oddsen 0-100
C) Det kan itetera genom alla 13 miljarder kombinationer (varje miljon iterationer skriver ut en rad för att visa att datorn jobbar) och skriva ut på skärmen de kombinationer som fungerar. En begränsning är satt vid 10 000 rader (svenska spels gräns).

Meningen med detta är att du kan finslipa vilken nivå som intervallet ska ligga på.
Om det ligger på 300 +/- 1 så spottar den ur sig 10 000 rader på noll tid.
Däremot 200 +/- 0.05 så står den och tuggar miljoner iterationer utan att hitta några kombinationer med denna summa (jag har inte tålamod som sagt att vänta).

Skriptet i nuvarande form, kommer i sin helhet i nästa post.
Skriptet är alltså inte färdigställt på så sätt att det sparar en textfil i Fullträffs-läget.
Men när du testat det och finkalibrerat vilket intervall som är intressant kan det kompletteras för att kunna spara en textfil på samma sätt som övriga spellägen.

Just här och nu sitter jag på en liten och gammal Nuc med Linux Mint, men den klarar 1 miljon iterationer per sekund, vilket innebär att 13 miljarder (13 000 miljoner) iterationer tar cirka 3 1/2 timme
Det hade förvisso gå att snabba upp koden med parallels, men jag orkar inte.

Wow, säger jag bara, du är galet grym på detta

Jag kör just nu och de första 2400000000 raderna tog 30 minuter, så det går lite fortare hos mig, ca: 80 miljoner per minut, snyggt att du kunde lägga alla 3 spelen i samma script.

Dock var det nära att jag gav upp innan jag såg att toleransen skulle skrivas med punkt och inte komma, den var lurig, jag satte ner till 4 decimaler, får se vad jag får ut i antal av det.

Är det möjligt att även ange önskad summa med decimaler ?
Skulle man kunna välja ett visst antal rader, t.ex. att jag vill få ut de 1000 raderna med lägsta tolerans, då skulle man ju inte behöva råka ut för att man får ut för många eller för få godkända rader utan just det antal man vill ha, hade man kunnat göra det så är det ju perfekt, men då måste väl alla rader sparas någonstans först eller hur skulle man lösa det ?

Just ja, en sak till, Fullträff inlämningsfil så behövs omgångsnummer, vad är enklast att att få med det ?
Jag vet inte hur de har tänkt när den infon är gömd då den krävs för flera dagliga spel, finns iaf. på denna sida:

https://spela.svenskaspel.se/tt/matchlist/fulltraff

Det finns ju 2 st. andra tipsspel som är likadana, topptipset och powerplay, den ena fotboll och den andra ishockey, nu spelar inte det någon rol för mig, för mig är det bara siffrorna jag använder mig av, och även det som gör att de färdiga reduceringsverktyg som finns på marknaden tar längre tid, så mycket annan info runt omkring som tar datorkraft.

Jag inbillar mig att det kanske inte är så mycket som ska ändras för att passa dessa 2 spelen, enda skillnaden är att det är 8 matcher istället för 13, annars är det samma som stryk och europatipset.

https://spela.svenskaspel.se/topptipset
https://spela.svenskaspel.se/powerplay

Dessa 2 spel har bara 6561 möjliga rader och lär ju gå med ljusets hastighet att få fram

Hade ju varit guld om man i ett och samma script hade alla 5 spelen, annars är ju 2 olika script bara dubbelt så många som 1, vill du inte så är det ok, jag har alla de möjliga raderna i excel men det blir lite segt med formler hela vägen och inte alls så smidigt som det är med detta script.
__________________
Senast redigerad av Mysadname 2023-08-31 kl. 07:30.
Citera
2023-08-31, 07:11
  #113
Medlem
Citat:
Ursprungligen postat av Mysadname
Wow, säger jag bara, du är galet grym på detta

Jag kör just nu och de första 2400000000 raderna tog 30 minuter, så det går lite fortare hos mig, ca: 80 miljoner per minut, snyggt att du kunde lägga alla 3 spelen i samma script.

Dock var det nära att jag gav upp innan jag såg att toleransen skulle skrivas med punkt och inte komma, den var lurig, jag satte ner till 4 decimaler, får se vad jag får ut i antal av det.

Är det möjligt att även ange önskad summa med decimaler ?

Just ja, en sak till, Fullträff inlämningsfil så behövs omgångsnummer, vad är enklast att att få med det ?
Jag vet inte hur de har tänkt när den infon är gömd då den krävs för flera dagliga spel, finns iaf. på denna sida:

https://spela.svenskaspel.se/tt/matchlist/fulltraff

Det finns ju 2 st. andra tipsspel som är likadana, topptipset och powerplay, den ena fotboll och den andra ishockey, nu spelar inte det någon rol för mig, för mig är det bara siffrorna jag använder mig av, och även det som gör att de färdiga reduceringsverktyg som finns på marknaden tar längre tid, så mycket annan info runt omkring som tar datorkraft.

Jag inbillar mig att det kanske inte är så mycket som ska ändras för att passa dessa 2 spelen, enda skillnaden är att det är 8 matcher istället för 13, annars är det samma som stryk och europatipset.

https://spela.svenskaspel.se/topptipset
https://spela.svenskaspel.se/powerplay

Dessa 2 spel har bara 6561 möjliga rader och lär ju gå med ljusets hastighet att få fram

Hade ju varit guld om man i ett och samma script hade alla 5 spelen, annars är ju 2 olika script bara dubbelt så många som 1, vill du inte så är det ok, jag har alla de möjliga raderna i excel men det blir lite segt med formler hela vägen och inte alls så smidigt som det är med detta script.

Däremot hade jag väldigt gärna velat få till ett lika grymt script för streckspelen på trav, samma beräkningsmodell, och då det bara är olika antal avdelningar men med samma antal möjliga hästar i varje så inbillar jag mig att det kanske inte är alltför knepigt för ett geni som dig att lösa det.

Det som kan klura till det är väl URL, https://www.atg.se/spel/2023-09-02/V75/jagersro

Det antal olika avdelningar som gäller är 4,5,6,7,8 men adressen är ju dels både datum spelform och bana, men går det kanske att lösa att man kopierar in den aktuella adressen så skulle det kanske fungera ?
Citera
2023-08-31, 11:49
  #114
Medlem
Citat:
Ursprungligen postat av Enterprise
Lågnivåspråk i det här fallet är typ C eller Rust som oftast är betydligt snabbare på att göra stort antal beräkningar jämför med Python, men kräver mer ansträngning att skriva.

Förstår jag dig rätt att du vill att summan av alla 13 kombinationer ska kunna bli ett visst tal (med en viss felmarginal), t.ex. att summan ska bli 200 med felmarginal på +/-0,05 (i intervallet 199,95 - 200,05)?
Alltså om skriptet märker att summan är större än intervallet så kan den sluta räkna och gå vidare till nästa iteration?

Glöm inte bort att för att "bara" räkna ut den högsta och lägsta raden (även om du bara sparar två rader i minnet) så måste man iterera över 13 miljarder kombinationer.

Något som knasar. 1748 rader till tips.csv men i den fanns en gammal stryktips körning med 33 tusen rader
Jag startade en ny och valde tips.txt och då började den visa normalfördelning först, minns inte att den gjorde det vid csv valet.

Fick du till en ut fil när du körde ?
Citera
2023-08-31, 14:19
  #115
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
Något som knasar. 1748 rader till tips.csv men i den fanns en gammal stryktips körning med 33 tusen rader
Jag startade en ny och valde tips.txt och då började den visa normalfördelning först, minns inte att den gjorde det vid csv valet.

Fick du till en ut fil när du körde ?
1. Uppfattar jag dig rätt att CSV-filen inte blev utbytt (alltså ersattes med en ny fräsch fil) utan att skriptet bara gjorde filen längre?

2. Vilken spelform körde du när normalfördelningen printades ut på skärmen?

Edit:
Som jag skrev igår så kommer inte Fullträff-spelformen att spara någon fil just nu. Det är en så kallad TO DO.
Därför ligger den gamla filen kvar.
__________________
Senast redigerad av Enterprise 2023-08-31 kl. 14:39.
Citera
2023-08-31, 15:23
  #116
Medlem
Citat:
Ursprungligen postat av Enterprise
1. Uppfattar jag dig rätt att CSV-filen inte blev utbytt (alltså ersattes med en ny fräsch fil) utan att skriptet bara gjorde filen längre?

2. Vilken spelform körde du när normalfördelningen printades ut på skärmen?

Edit:
Som jag skrev igår så kommer inte Fullträff-spelformen att spara någon fil just nu. Det är en så kallad TO DO.
Därför ligger den gamla filen kvar.

CSV-filen skrevs inte, gjorde den inte heller längre, körde Fullträff, missade att du skrev att den inte skrivs ännu, men 1700 rader är ju nära det önskade, i värsta fall kan jag ju få ner det sista med formler i excel men då behöver jag få med antingen summan eller toleransen. Men det är ju 48 timmar till spelstopp för Fullträff 🙂

Provade köra europatipset då det är spelstopp ikväll men den går inte att köra, trodde först att det var med toleransen där, det hade ju varit önskvärt då det verkar ge för många rader om man sätter samma summa både som golv och tak, men någonting är tokigt där.
Citera
2023-08-31, 17:29
  #117
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
CSV-filen skrevs inte, gjorde den inte heller längre, körde Fullträff, missade att du skrev att den inte skrivs ännu, men 1700 rader är ju nära det önskade, i värsta fall kan jag ju få ner det sista med formler i excel men då behöver jag få med antingen summan eller toleransen. Men det är ju 48 timmar till spelstopp för Fullträff 🙂

Provade köra europatipset då det är spelstopp ikväll men den går inte att köra, trodde först att det var med toleransen där, det hade ju varit önskvärt då det verkar ge för många rader om man sätter samma summa både som golv och tak, men någonting är tokigt där.
Vad satte du för golv och tak för Europatipset?
Citera
2023-08-31, 17:33
  #118
Medlem
Citat:
Ursprungligen postat av Enterprise
Vad satte du för golv och tak för Europatipset?

Provat flera, provade nu 500 och 550

får upp:

Cell In[10], line 81
signlists[ix].append(int(perc)) # använd heltal för tipsen

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

Stryktipset fungerar, där får jag 1867 rader med 550 på båda.
__________________
Senast redigerad av Mysadname 2023-08-31 kl. 17:37.
Citera
2023-08-31, 17:37
  #119
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Mysadname
Provat flera, provade nu 500 och 550

får upp:

Cell In[10], line 81
signlists[ix].append(int(perc)) # använd heltal för tipsen

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

Stryktipset fungerar, där får jag 1867 rader med 550 på båda.
Testa nu istället:

Kod:
import requests
import re
import json

import itertools
import sys

gamemode = int(input("Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff "))

if not gamemode in [1,2,3]:
        print ("Endast 1-2 möjliga val. Avbryter.")
        quit()

if gamemode == 3:
	pgoal = int(input("Önskad summa (heltal) ? "))
	pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? "))
	pmin = pgoal-pdev
	pmax = pgoal+pdev
else:
	pmin = int(input("Golvnivå för antal streck (t.ex. 500)? "))
	pmax = int(input("Taknivå för antal streck (t.ex. 550)? "))

mde = int(input("Tryck 1 för text-fil och 2 för CSV-fil: "))

if not mde in [1,2]:
	print ("Endast 1 eller 2 möjliga val. Avbryter.")
	quit()

urls = ["", "https://spela.svenskaspel.se/stryktipset" , "https://spela.svenskaspel.se/europatipset","https://spela.svenskaspel.se/fulltraff"]

url = urls[gamemode]

outfiles = ["","tips.txt","tips.csv"] # namn för dina output-filer
outfile = outfiles[mde]

response = requests.get(url)
html_content = response.text

pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});'
match = re.search(pattern, html_content)
json_str = match.group(1)
json_obj = json.loads(json_str)
gameDict = json_obj["EventTypeStatistic"]
gameKeys = list(dict.keys(gameDict))

signlists = []

if gamemode == 3:  # om fullträff, sätt upp lista utifrån 13 rader
	rowlist=[]	
else:   # annars sätt upp lista utifrån 3 tecken
	for _ in range(0,3):
		signlists.append([])

for gameKey in gameKeys: # iterera över alla 13 matcher
	if gamemode==3:  # Fullträff
	
		game = gameDict[gameKey]["odds"]["current"]["value"]  # hämtar odds-värden från Fullträff-sidan
		gamesum = 0.0
		floats = []
		fgame = []
		
		for i in range(0,6):
			f = float(game[i])
			floats.append(f)
		
		gamesum = sum(floats)
	
		for ix,o in enumerate(floats):
			newo = 100.0 * o / gamesum  # normalfördela fullträff-oddsen så att summan blir 100.0
			if ix<6:
				fgame.append(newo)

		rowlist.append(fgame)

	else:   # Tipsspel
		game = gameDict[gameKey]["distributions"][str(gamemode)]["Global"]["current"]["value"] # Hämta streckfördelning
	
	
	for ix,perc in enumerate(game):
		if gamemode<3:
			if perc is not None:
				signlists[ix].append(int(perc)) # använd heltal för tipsen

if gamemode<3:
	P = { "1": signlists[0], "X": signlists[1], "2": signlists[2] } 
	rows = itertools.product(*(['1X2'] * 13))

	cn = 0

	with open(outfile, 'w') as f:  
		for row in rows:
			percentage = sum(P[result][n] for (n, result) in enumerate(row))
		
			if  pmin <= percentage <= pmax:
				cn += 1
				if mde==1:
					f.write("E,"+','.join(row)+"\n")
				if mde==2:
					f.write(','.join(row + (str(percentage),))+"\n")
else:
	maxcoupons = 10000
	cn = 0
	tsts = 0
	
	for ix,row in enumerate(rowlist):
		print(ix,":",row)

	valid_combinations = []

	for comb in itertools.product(*[enumerate(row) for row in rowlist]):  # Cartesian product of all rows with enumerated elements
		
		indices, values = zip(*comb)  # Unzip the enumerated pairs into indices and values
		s = sum(values)
		tsts += 1

		if tsts % 1000000 == 0:
			print(int(tsts / 1000000)," million iterations")
		if pmin <= s <= pmax:
			valid_combinations.append(indices)
			print(indices)
			cn += 1
		if cn>maxcoupons:
		    break


print(f"{outfile} skapad med {cn} rader!")
__________________
Senast redigerad av Enterprise 2023-08-31 kl. 17:41.
Citera
2023-08-31, 17:42
  #120
Medlem
Citat:
Ursprungligen postat av Enterprise
Testa nu istället:

Kod:
import requests
import re
import json

import itertools
import sys

gamemode = int(input("Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff "))

if not gamemode in [1,2,3]:
        print ("Endast 1-2 möjliga val. Avbryter.")
        quit()

if gamemode == 3:
	pgoal = int(input("Önskad summa (heltal) ? "))
	pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? "))
	pmin = pgoal-pdev
	pmax = pgoal+pdev
else:
	pmin = int(input("Golvnivå för antal streck (t.ex. 500)? "))
	pmax = int(input("Taknivå för antal streck (t.ex. 550)? "))

mde = int(input("Tryck 1 för text-fil och 2 för CSV-fil: "))

if not mde in [1,2]:
	print ("Endast 1 eller 2 möjliga val. Avbryter.")
	quit()

urls = ["", "https://spela.svenskaspel.se/stryktipset" , "https://spela.svenskaspel.se/europatipset","https://spela.svenskaspel.se/fulltraff"]

url = urls[gamemode]

outfiles = ["","tips.txt","tips.csv"] # namn för dina output-filer
outfile = outfiles[mde]

response = requests.get(url)
html_content = response.text

pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});'
match = re.search(pattern, html_content)
json_str = match.group(1)
json_obj = json.loads(json_str)
gameDict = json_obj["EventTypeStatistic"]
gameKeys = list(dict.keys(gameDict))

signlists = []

if gamemode == 3:  # om fullträff, sätt upp lista utifrån 13 rader
	rowlist=[]	
else:   # annars sätt upp lista utifrån 3 tecken
	for _ in range(0,3):
		signlists.append([])

for gameKey in gameKeys: # iterera över alla 13 matcher
	if gamemode==3:  # Fullträff
	
		game = gameDict[gameKey]["odds"]["current"]["value"]  # hämtar odds-värden från Fullträff-sidan
		gamesum = 0.0
		floats = []
		fgame = []
		
		for i in range(0,6):
			f = float(game[i])
			floats.append(f)
		
		gamesum = sum(floats)
	
		for ix,o in enumerate(floats):
			newo = 100.0 * o / gamesum  # normalfördela fullträff-oddsen så att summan blir 100.0
			if ix<6:
				fgame.append(newo)

		rowlist.append(fgame)

	else:   # Tipsspel
		game = gameDict[gameKey]["distributions"][str(gamemode)]["Global"]["current"]["value"] # Hämta streckfördelning
	
	
	for ix,perc in enumerate(game):
		if gamemode<3:
			if perc is not None:
				signlists[ix].append(int(perc)) # använd heltal för tipsen

if gamemode<3:
	P = { "1": signlists[0], "X": signlists[1], "2": signlists[2] } 
	rows = itertools.product(*(['1X2'] * 13))

	cn = 0

	with open(outfile, 'w') as f:  
		for row in rows:
			percentage = sum(P[result][n] for (n, result) in enumerate(row))
		
			if  pmin <= percentage <= pmax:
				cn += 1
				if mde==1:
					f.write("E,"+','.join(row)+"\n")
				if mde==2:
					f.write(','.join(row + (str(percentage),))+"\n")
else:
	maxcoupons = 10000
	cn = 0
	tsts = 0
	
	for ix,row in enumerate(rowlist):
		print(ix,":",row)

	valid_combinations = []

	for comb in itertools.product(*[enumerate(row) for row in rowlist]):  # Cartesian product of all rows with enumerated elements
		
		indices, values = zip(*comb)  # Unzip the enumerated pairs into indices and values
		s = sum(values)
		tsts += 1

		if tsts % 1000000 == 0:
			print(int(tsts / 1000000)," million iterations")
		if pmin <= s <= pmax:
			valid_combinations.append(indices)
			print(indices)
			cn += 1
		if cn>maxcoupons:
		    break


print(f"{outfile} skapad med {cn} rader!")

Japp nu fungerar det, även fast det blev många rader förstås
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in