Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Combinaties Lottonummers.  (gelezen 22640 keer)

0 leden en 1 gast bekijken dit topic.

Offline danny147

  • Oplosser
  • ****
  • Berichten: 564
  • Geslacht: Man
  • Lotto, de sleutel tot het succes.
Combinaties Lottonummers.
« Gepost op: 10 november 2007, 21:03:28 »
Beste ;)

Heb onlangs op de volgende topic gelezen
https://www.oplossing.be/index.php/topic,29460.0.html
Hoe men alle combinaties van de LOTTO kan maken, ongeveer een kleine 5 miljoen combinaties.
Is dit te maken in Excel.
Het kleinste is : 1,2,3,4,5,6 en het grootste is
37,38,39,40,41,42.
Werk met Excel 2007, dus heb ik meer mogelijkheden.

Misschien iets voor de Leo of Eric om mij hier wegwijs van te maken.  :D

Groetjes Danny.  :)
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz 1200
SAMSUNG_NP1234567890
Intel(R) HD Graphics 4000 2112MB -
Realtek High Definition Audio
Nr: 1 Model: Hitachi HTS727575A9E364
C:\ NTFS 670,11GB 494,48GB 8 080MB
AV: Trend Micro Maximum Security

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Combinaties Lottonummers.
« Reactie #1 Gepost op: 10 november 2007, 22:03:10 »
danny147,

Ik zal proberen om dit in excell gedaan te krijgen.
In access is het al gelukt.
In excell dien ik dan rekening te houden, dat na de laatste rij, naar de volgende kolom wordt weggescheven. Dus ik zou een tellertje moeten bijhouden en ook moeten weten hoeveel combinaties er binnen een range voorkomen.

Opmerking: het kan even tijd in beslag nemen, maar ik hou uw vraag in gedachte. Hier zijn ook excell-specialisten te vinden; Het is de kwestie een goede uitvoerbare code te hebben dat op vrij korte tijd alles kan genereren, of per range. De output kan op verschillende manieren gerealiseerd worden.

Vriendelijke groet,

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Combinaties Lottonummers.
« Reactie #2 Gepost op: 10 november 2007, 22:50:18 »
Danny147, Als je de functie Combin (combinaties) loslaat op de getallenreeks 1 - 42 met 6 getallen in 1 combinatie, dan zie je dat je maarliefst 5.245.786 combinaties (= cellen) kan maken. Hier heb je in Excel (versies vóór 2007) dus 81 kolommen bij nodig.
Als ik zo de topic in de Access-sectie heb gevolgd, is daar schitterend resultaat geboekt. Het lijkt me voor Excel een behoorlijk tijdrovende klus om alle cellen te vullen (maar wel leuk om te proberen).
Ik zal 'ns mee gaan proberen... ;D

Groet, Leo
______________________________

Groet, Leo

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Combinaties Lottonummers.
« Reactie #3 Gepost op: 11 november 2007, 04:53:03 »
Leo,

Dit zou ik fijn vinden als jij ook eens zou meezoeken.

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline danny147

  • Oplosser
  • ****
  • Berichten: 564
  • Geslacht: Man
  • Lotto, de sleutel tot het succes.
Re: Combinaties Lottonummers.
« Reactie #4 Gepost op: 11 november 2007, 13:39:36 »
Beste Diezel en Leo.
  ;)
Bedankt voor de snelle reactie voor de medewerking.

Sorry aan Diezel dat ik je naam niet in mijn topic vermeld heb, want het idee komt van jou hé ?  :D

Groetjes Danny.  :)
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz 1200
SAMSUNG_NP1234567890
Intel(R) HD Graphics 4000 2112MB -
Realtek High Definition Audio
Nr: 1 Model: Hitachi HTS727575A9E364
C:\ NTFS 670,11GB 494,48GB 8 080MB
AV: Trend Micro Maximum Security

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Combinaties Lottonummers.
« Reactie #5 Gepost op: 12 november 2007, 13:16:09 »
Hallo,

Als we dit als een oefening beschouwen ... (want ik zie niet goed in, wat je me deze lijst kan doen)
Ik heb wel een oplossing, maar die zal naar schatting een uur - of toch zeker een half uur - draaien op mijn PC. Het komt er op neer dat er een matrix met strings aangemaakt en weggeschreven wordt per kolom. De traagheid berust naar alle waarschijnlijkheid op het werken met strings, maar 't is toch een goed begin, denk ik.
Option Explicit

Dim i As Long
Dim j As Long
Dim rc As Long
Dim ItemsCount As Long
Dim arr() As Variant

Sub Combinations()
Dim n As Integer
Dim m As Integer
Dim test As Boolean

rc = Rows.Count
ReDim arr(1 To rc)
i = 0
j = 0

n = InputBox("Number of items?", "Combinations")
m = InputBox("Taken how many at a time?", "Combinations")

    With Application
    ItemsCount = .WorksheetFunction.Combin(n, m)
    .StatusBar = ItemsCount & " combinations to generate ... calculating ..."
    .ScreenUpdating = False
    Comb2 n, m, 1, ""

    On Error Resume Next
    test = UBound(arr) > 0
    On Error GoTo 0


    If test Then
    Columns(j + 1).ClearContents
    Cells(1, j + 1).Resize(UBound(arr)) = .Transpose(arr)
    End If
    .StatusBar = False
    .ScreenUpdating = True
    End With

End Sub

'Generate combinations of integers k..n taken m at a time, recursively
'Original codeidea by Myrna Larson
'https://www.mydatabasesupport.com/forums/spreadsheets/250561-combinations.html
Private Function Comb2(ByVal n As Integer, ByVal m As Integer, _
ByVal k As Integer, ByVal s As String)

If m > n - k + 1 Then Exit Function

    If m = 0 Then
    i = i + 1
    arr(i) = s
        If i = rc Then
        i = 0
        j = j + 1
        Columns(j).ClearContents
            With Application
            Cells(1, j).Resize(rc) = .Transpose(arr)
            .StatusBar = Format(j * rc / ItemsCount, "000 %")
            End With
        Erase arr
        ReDim arr(1 To rc)
        End If
    Exit Function
    End If

Comb2 n, m - 1, k + 1, s & k & " "
Comb2 n, m, k + 1, s
End Function
Als Diesel zijn 18seconden oplossing terugvindt, staan we heel wat verder.

beste groeten,
Erik

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Combinaties Lottonummers.
« Reactie #6 Gepost op: 12 november 2007, 22:44:14 »
Erik,

Ik ga jou voorbeeld uitproberen in access.

Vriendelijke groet,

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Combinaties Lottonummers.
« Reactie #7 Gepost op: 13 november 2007, 17:32:32 »
Hier is dan de code uit mijn access topic.
Kan dit efficienter uitgevoerd worden?

!!!Je dient wel het pad voor de tekstfile aan te passen!!!

Vriendelijke groet,

Diezel


Option Compare Database
Option Explicit
Private Sub Cmd1_Click()
'Code geschreven door Diezel
'Versie 13/11/2007

Dim bal(6) As Byte
Dim Teller As Double
Dim j As Byte
Dim Lottocombinatie As String
Dim Antwoord As String
Dim IntTeller As Integer

Teller = 0
bal(1) = 1


IntTeller = 1

For j = 6 To 42

IntTeller = j + 1

bal(6) = IntTeller

If IntTeller = 43 Then
j = 0
bal(5) = bal(5) + 1
End If


If bal(5) > 41 Then
bal(4) = bal(4) + 1
bal(5) = bal(4)
End If

If bal(4) > 40 Then
bal(3) = bal(3) + 1
bal(4) = bal(3)
End If

If bal(3) > 39 Then
bal(2) = bal(2) + 1
bal(3) = bal(2)
End If

If bal(2) = 39 Then
bal(1) = bal(1) + 1
bal(2) = bal(1)

End If

If bal(1) > 37 Then GoTo einde

'clean en sweep hen eruit
If IntTeller = 43 Then GoTo Verder
If bal(6) <= bal(5) Then GoTo Verder
If bal(5) <= bal(4) Then GoTo Verder
If bal(4) <= bal(3) Then GoTo Verder
If bal(3) <= bal(2) Then GoTo Verder
If bal(2) <= bal(1) Then GoTo Verder



On Error Resume Next
     Open "C:\WINDOWS\Desktop\Lotto1.txt" For Output As #1 'Open file for output.
Lottocombinatie = bal(1) & ";" & bal(2) & ";" & bal(3) & ";" & bal(4) & ";" & bal(5) & ";" & bal(6)
Print #1, Lottocombinatie
Teller = Teller + 1

Verder:

 Next j


einde:
Close #1
 
 
Antwoord = "De tekstfile is ok"
 lblInfo.Caption = Antwoord

 Antwoord = Teller
 lblInfo.Caption = Antwoord
 
MsgBox "De lottolijst met combinaties" & vbCrLf _
       & Space(1) & "is weggeschreven", vbInformation + 0, "Lottocombinaties"
 lblInfo.Caption = ""
    Exit Sub
 
End Sub





OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Combinaties Lottonummers.
« Reactie #8 Gepost op: 13 november 2007, 18:42:28 »
Hoi, Diezel,

Enkele losse opmerkingen na eerste kort "nazicht": mogelijk sla ik de bal mis, maar vandaag rest me toch geen tijd en wellicht de komende dagen ook niet.

Het geheim van de snelheid zit hem blijkbaar in het schrijven naar een txt-bestand in plaats van naar een matrix. 'k Heb zo een vermoeden dat een combinatie van beide nog sneller zou kunnen zijn. Bijvoorbeeld 1000 elementen in de matrix en dan schrijven naar de textfile.
Je code uitgetest in Excel - mits paar minieme wijzigingen- : een paar minuten was voldoende: 'k heb het niet getimed.

Wil je even je testbestand toevoegen? Dan bespaar je ons het aanmaken van formulier ... Bovendien heb ik compleet nog geen kaas gegeten van Acces, nog nooit van mijn leven nodig gehad.

fijne avond verder,
Erik

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Combinaties Lottonummers.
« Reactie #9 Gepost op: 13 november 2007, 18:51:26 »

Hier het bestand

Er is niet veel access aan hoor.
Het is puur VBA

Vriendelijkegroet,

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Combinaties Lottonummers.
« Reactie #10 Gepost op: 13 november 2007, 22:19:29 »
Er is niet veel access aan hoor.
Het is puur VBA
Misschien, maar ik heb nog nooit Access gebruikt en heb op dit ogenblik geen tijd en zin om me daarin te verdiepen. Lachen jullie maar zoveel je wil  :) maar het heeft me een paar minuten gekost, eer ik doorhad, hoe je de code aan de praat krijgt. (F5 in VBA werkt niet)
Laat het voor jullie dus duidelijk zijn, dat ik op Office gebied een vakidioot ben voor Excel (en redelijk in Word)  :)

Moet dit lijntje niet 38 bevatten in plaats van 39?
If bal(2) = 39 Then
Zo op 't eerste zicht zou ik "GoTo" er zoveel mogelijk uit zwieren. En - 'k heb hier weinig ervaring mee - kan je die textfile niet slechts 1 keer openen ("for Append")

Dit snap ik niet:
If bal(1) > 1 Then GoTo eindeHet lijkt er op dat het eerste cijfer niet groter dan 1 mag worden, zoniet stopt de code. Maar dan heb je toch enkel combinaties met 1 als eerste getal?

Ben ik moe, of aan het flippen ???

goeienacht,
Erik

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Combinaties Lottonummers.
« Reactie #11 Gepost op: 15 november 2007, 00:03:16 »
Er staat in de code:

If bal(1) > 37 Then GoTo einde
In bijlage staat inderdaad >1 maar in de code op het forum staat >37. Ik ging er van uit om te gaan testen.

maw uit de lus springen en de procedure stoppen.
Om te testen kan je daar ook >1 zetten bijv.

Met GoTo verder bedoel ik; die combinatie niet wegschrijven, want er is aan de voorwaarde niet voldaan. Tijdens het uitvoeren van de code kunnen één van de zes elementen gelijk zijn aan elkaar of een nul bevatten, ect...
Opmerking over:
If bal(2) = 39 Then

is aangepast :'(

Mijn redenering was De intTeller heeft ook één element méér!
IntTeller = j +1

("for Append") is inderdaad aangewezen,  :'( maar voor het testen was dat gemakkelijker dat er telkens een nieuwe file werd gemaakt. ;)

De code komt misschien bizar over en misschien niet volgens de regels, maar het werkt. Door onze inzichten te delen komen we misschien tot een nieuwe ontdekking.

Vriendelijke groet,

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Combinaties Lottonummers.
« Reactie #12 Gepost op: 15 november 2007, 22:32:26 »
Je kan nu al 5.000.000 combinaties in een paar minuten genereren, niet?
Voor mij is het geen zaak van staatsbelang.
't Is natuurlijk wel leuk om de code te optimaliseren, maar vertrekkend van jouw code zie ik geen andere tips meer dan bovenstaande.

Eerlijk gezegd: de code - vooral de laatste regels van de Private Function - uit mijn post, is ook wel bizar :)

Offline danny147

  • Oplosser
  • ****
  • Berichten: 564
  • Geslacht: Man
  • Lotto, de sleutel tot het succes.
Re: Combinaties Lottonummers.
« Reactie #13 Gepost op: 16 november 2007, 10:01:07 »
Beste Diezel, Erik en Leo  ;)

Ik zie dat jullie al goed opgeschoten zijn.

De code van Diezel kan ik die al gebruiken in Excel of moet ik nog eventjes afwachten op het eindresultaat ?

Groetjes Danny.  :)
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz 1200
SAMSUNG_NP1234567890
Intel(R) HD Graphics 4000 2112MB -
Realtek High Definition Audio
Nr: 1 Model: Hitachi HTS727575A9E364
C:\ NTFS 670,11GB 494,48GB 8 080MB
AV: Trend Micro Maximum Security

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: Combinaties Lottonummers.
« Reactie #14 Gepost op: 16 november 2007, 10:31:08 »
Je kan Diezels code in Excel gebruiken mits een paar kleine aanpassingen.

volgende regel weglaten (enkel in Access mogelijk)
Option Compare Database

laatste regels met "lblInfo" weglaten

regel met "MsgBox" aanpassen aan jouw behoeften ("Space(1)" weglaten)


Deze aanpassingen merk je trouwens vanzelf.
De eerste regel zal in het rood staan en als je vervolgens de code porbeert te runnen, komt er "variabele niet gedefinieerd met "lblInfo" in het blauw, dit geldt ook voor "Space"

'k Heb dit niet getest, maar 't zal wel kort bij de waarheid liggen.

fijne dag verder,
Erik

 


www.combell.com