Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Sudoku oplossen.  (gelezen 22483 keer)

0 leden en 3 gasten bekijken dit topic.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #15 Gepost op: 22 december 2019, 19:40:43 »
Leuke werkwijze heb je daar in elkaar geknutseld !
Ik snap nu ook het gebruik van samengevoegde cellen in deze uitdaging.
Dank u, en ja, die samengevoegde wilden niet zo goed samenwerken in het begin  ;D
Voor de zekerheid: met 'Maak nieuwe Sudoku' bedoel je toch gewoon dat het linker kader wordt leeggemaakt ?
En voor een letterlijk nieuwe maak je zelf het rechter kader leeg en vult daar de nieuwe opdracht in ?
Ja, neen.... De rechter is maar tijdelijk, of als reserve, maar ook maar om te testen.
In principe gaat het enkel om de linker. Laten we op een later tijdstip beginnen. Je hebt de linker opgelost. Nu wil je een andere beginnen.
Dus maak je het (linker) "bord" leeg, vul je waarden in (die komen van een Sudoku uit de krant of zo) en laat de macro de hulpcellen in de niet-gebruikte cellen plaatsen. Daarna kan je de sudoku verder oplossen.
Het ging mij (tot nu toe) enkel om de hulpgetallen. Daar verlies je zo enorm veel tijd mee als het een echte moeilijke Sudoku is. Dat is me dan toch al gelukt  8)
Maar ik heb ook al enkele zaken gezien die ik gemakkelijk kan toepassen om verdere stappen naar een oplossing te maken  ;)

Ik zal jou werkstuk morgen pas bekijken, voor vandaag heb ik er helemaal genoeg van.

Maar ik twijfel er niet aan dat het perfect zal werken. Of ik er ook op kan verder borduren is een andere zaak (vermoed ik....)

Groeten,

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline emields

  • Ervaren lid
  • ***
  • Berichten: 257
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #16 Gepost op: 23 december 2019, 02:11:04 »
dit lijkt, mij dan toch, een gemakkelijke oplossing voor de hulpcellen.
Het vullen van de kaders moet ook wel een leuke uitdaging zijn.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #17 Gepost op: 23 december 2019, 11:20:35 »
emields, sorry als ik het moet zeggen, maar je bent gebuisd  ;)  ;D  0:-).

Mijn macro's werken niet meer, en degene die jij bijgemaakt het doen het ook niet (of doe er een handleiding bij als ik mis ben  :))

Dit is waar ik het meest voor vreesde toen ik mijn perfect werkend projectje op tafel gooide.

Mijn andere vraag was om de code zeer leesbaar te houden omdat ze bedoeld is voor beginners, en mensen die maar pas beginnen met macro's, of iets willen leren (zoals ik).
Ik heb bijna 15 jaar terug veel complexere macro's geschreven, eentje zelf voor een groot bouwbedrijf.
Het werd gebruikt om ramingen van betonconstructies te genereren aan de hand van complexe formules.
Dat was in Excel 2003 of jonger. Wel, dat excel-werkboek wordt op de dag van vandaag nog steeds gebruikt in dat bedrijf.
Ik wil maar zeggen, eenvoudige zaken gaan soms lang mee. Maar toen was mijn verstand nog niet versleten :blink:


pitufo,

iets beter, maar....

Zoals je zelf schrijft:
Tenminste, dat lijkt zo, want er zitten nog niet-samengestelde cellen in van de 'vorige' keer.

Dat "lijkt" met je vereenvoudigde code in Sub Maak_Nieuwe_Sudoku() normaal. Maar nu "maak" je geen nieuw leeg Sudoku-veld, je wist enkel de gegevens. En dat lost dus niets op zoals jij verwacht (door de gegevens rechts over te zetten naar links). Het rechter veld is namelijk een leeg (reserve-) veld waar niets op toegepast wordt. Je cijfers daar invullen, om ze dan over te zetten naar het linker veld lijkt me verder gezocht dan een "sjabloon" in de map "Data". Het rechter veld verdwijnt waarschijnlijk ook later. Dit had ik eigenlijk enkel geplaatst om het testen wat gemakkelijker te maken. Maar je kan het ook gebruiken om te kopiëren.
Of je kan er de gevonden cijfers van het linker vak bij invullen, zo zie je een macro zonder de wirwar van hulp-cellen.
Je schrijft:
en zo niet betekent het dat van de linkerkant geen gebruik zal worden gemaakt, dus altijd goed).
Dan heb je niet goed opgelet, want alle code in de macro is net geschreven voor het linker veld  :-\

De rest van 'Maak hulpcellen' leg ik even terzijde. 'k Ben er zo goed als zeker van dat we hier aan snelheid kunnen winnen. Het lastigste is daarbij misschien om tegemoet te komen aan je verzoek om niet te geweldig af te wijken van wat je al gedaan hebt.
Welke snelheidswinst? Ga mij nu niet vertellen dat mijn code zo traag is dat je een kop koffie kan drinken vooraleer ze klaar is. Hoe lang duurt het? 1 seconde? Maximum 2 seconden. Who cares.....Deze code wordt (later) maar 1 of 2 keer per dag uitgevoerd. maar als men er verder aan wil werken moet ze vooral eenvoudig te lezen zijn, niet snel.
Trouwens, je hebt gelijk, iets zelf werkend krijgen zal altijd wel de meeste voldoening blijven geven. Geen seconde twijfel ik eraan dat ik vaak methodes bricoleer die sneller en beter kunnen, maar vooral werken. En dat doet die van jou ook, chapeau dus !
Bedankt voor de pluim 8).

Maar, ik wil best leren uit jullie werk, toch blijf ik verder bouwen op wat ik tot nu toe bereikt heb.
Straks ga ik het werkblad gebruiksvriendelijker maken (invullen van gevonden cellen).

Ik post wel als er vorderingen zijn.

PS: En dat geldt eigenlijk voor iedereen(mijzelf incluus) en met alle reacties met bijlagen.
      Als je een bijlage aanpast, en post, geef ze dan een unieke naam, en vermeld ook jou gebruikersnaam in de naam.
      Vermijd "onderwerp(1).xlsx". Want dit leid dan bij een volgende download tot "onderwerp(1)(1).xlsx"
      Beter je eigen versie "onderwerp_gebruikersnaam_v1.xlsx" noemen, en dan worden de bomen weer zichtbaar in het
      bos.

Toch veel dank voor de (eerste) reacties en tot straks  :)

Groeten,

:) SoftAid :)             

Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #18 Gepost op: 23 december 2019, 11:21:26 »
Hallo SoftAid,

Citaat
Schoonheidsfoutjes in de code mogen altijd gemeld worden, maar...
Het is een beetje lastig inschatten of dit volgens jouw normen ook onder 'schoonheidsfoutjes' valt, maar het viel me wel op dat je code wat overbodige lussen en controles bevat om de hulpcellen in te vullen. In bijgevoegde versie 2 heb ik die code een beetje opgeschoond.

Citaat
Heel waarschijnlijk zal iemand met meer "scills" dan ik daar via VBA een tabel van maken, en hetzelfde of beter maken dan mijn. Maar daar leer ik niets uit, omdat het mijn petje te boven gaat.
Er zijn wel wat ingrepen gebeurd (maar toch binnen de perken gebleven, vind ik zelf). Maar: ik verwacht ook niet van jou dat je aangereikte code blindelings zou beginnen toepassen zonder er verder naar om te zien. Dus hopelijk zitten we op hetzelfde spoor als ik meen dat je er ook kan uit leren als je de nieuwe code eens onder de microscoop legt (leve de F8-toets). Als sommige regels niet geheel duidelijk zijn hoor ik het wel?

Even iets anders:
Citaat
De rechter is maar tijdelijk, of als reserve, maar ook maar om te testen.
In principe gaat het enkel om de linker.
Het is waarschijnlijk je bedoeling om nog andere stukken code toe te voegen? Want als je enkel de linkse kader behoudt, dan is je Excel in zijn huidige vorm enkel bruikbaar als hulpmiddel om de sudoku op papier in te vullen (?)
Feit is anderzijds dat je rechter kader momenteel al prima geschikt is om mee aan het oplossen te gaan, waarbij je desgewenst tussendoor de hulptabel kan refreshen. Hangt er natuurlijk allemaal maar van af wat je eindbedoeling is.
Wordt vermoedelijk dus vervolgd (?)

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #19 Gepost op: 23 december 2019, 12:28:05 »
Hallo pitufo,
ik verwacht ook niet van jou dat je aangereikte code blindelings zou beginnen toepassen zonder er verder naar om te zien. Dus hopelijk zitten we op hetzelfde spoor als ik meen dat je er ook kan uit leren als je de nieuwe code eens onder de microscoop legt (leve de F8-toets). Als sommige regels niet geheel duidelijk zijn hoor ik het wel?
Doe ik zeker, maar ... wat soms moeilijk uit te leggen is: niet iedereen heeft de capaciteit om ganse processen te onthouden.
codes die ik stukje bij beetje opgebouwd heb en werkend gekregen, dat zit er (bijna en voorlopig  ;D) ingebrand.
Delen van diezelfde code heb ik straks nodig om verder te bouwen. Het is mijn matrijs, een die ik ken. Daarom...;
Het is waarschijnlijk je bedoeling om nog andere stukken code toe te voegen? Want als je enkel de linkse kader behoudt, dan is je Excel in zijn huidige vorm enkel bruikbaar als hulpmiddel om de sudoku op papier in te vullen (?)
Dat is zeker waar, maar ik ben ook nog niet klaar (hé, dat rijmt)
Ik heb van in het begin (en tussendoor) aangegeven dat ik nu enkel een macro wilde schrijven die  (in de linker) de hulp-cellen-cijfers invult.
Het linker kader en zijn code moeten nu verder uitgewerkt worden.
Feit is anderzijds dat je rechter kader momenteel al prima geschikt is om mee aan het oplossen te gaan, waarbij je desgewenst tussendoor de hulptabel kan refreshen. Hangt er natuurlijk allemaal maar van af wat je eindbedoeling is.
Het is zeker niet de bedoeling om rechts de sudoku op te lossen met behulp van de linker hulp-cellen. Dat zou een belachelijke situatie worden.
Wordt vermoedelijk dus vervolgd (?)
Ofcourse...  ;)

Groeten,

:) SoftAid :)             

Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #20 Gepost op: 23 december 2019, 14:21:54 »
Hoi,

Nog even terug naar je voorgaande post (vermits deze de mijne ongeveer had gekruist)
Citaat
Dan heb je niet goed opgelet, want alle code in de macro is net geschreven voor het linker veld
Nochtans deden mijn procedures exact hetzelfde als die van jou, enkel een ietsje vlotter (lees: zonder nood aan een leeg kader op ander werkblad). Heeft dus overduidelijk te maken met mijn interpretatie van je nog in opbouw zijnde project. Ik dacht namelijk dat het gedeelte dat je klaar had bedoeld was om verder zo te blijven werken.

Citaat
Hoe lang duurt het? 1 seconde? Maximum 2 seconden. Who cares...
Inderdaad, jij niet, en ik ook niet hoor! De essentiële bedoeling was een alternatieve code die enkel het nodige doet en om dat te bereiken ook merkelijk korter kon; de 'tijdswinst' komt daar dan onvermijdelijk automatisch bij.
Ik heb ook niet de pretentie dat je nu maar mijn code moet gaan gebruiken, maar ben er wel zeker van dat ze minstens als studiemateriaal haar nut kan hebben.

Citaat
Het is zeker niet de bedoeling om rechts de sudoku op te lossen met behulp van de linker hulp-cellen. Dat zou een belachelijke situatie worden.
Maar dan heb je zonder het te willen een project gecreëerd waarmee sudoku-adepten hun vaardigheden verder kunnen leren ontwikkelen  :)
Maar misschien ben je toch al van plan om dat in te bouwen in het ene resterende kader, dus ik wacht met spanning het vervolg van je werkzaamheden af .

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #21 Gepost op: 24 december 2019, 17:24:59 »
Hallo beste helpers,

Ik heb een vraag onder de kerstboom gelegd:

Hoe kan ik (IN VBA !!) in een range zien welke ranges "samengevoegde cellen" zijn, en deze negeren in een optelpoging van unieke waarden in die Range?

De waarde van de samengevoegde komt nooit voor in de niet-samengevoegde cellen.

zie bijlage voor een beter begrip van de situatie.

¡muchas gracias,

:) SoftAid :)             

Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #22 Gepost op: 24 december 2019, 18:06:55 »
Hoi,

Er lag al vlug ook een antwoord onder (die boom).
Zomaar met één instructie (of formule) misschien mogelijk, al zie ik het niet direct, maar met een paar regeltjes zeker te doen:
Sub test()

Dim testrange As Range
Set testrange = Range(Cells(1, 1), Cells(2, 5))
For Each cel In testrange
    If cel.MergeCells = False And cel.Value = 4 Then
        gevonden = True: Exit For
    End If
Next cel
Cells(5, 1) = IIf(gevonden, "X", "0")

End Sub

Citaat
¡muchas gracias,

Por nada !   ;D 0:-)
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #23 Gepost op: 24 december 2019, 18:36:49 »
Oeps, stukje uit je vraag (in de bijlage) niet goed gelezen
Citaat
Als  het getal 4 slechts eenmaal voorkomt

Dan moet het dit zijn
Sub test()

Dim testrange As Range
Set testrange = Range(Cells(1, 1), Cells(2, 5))
aantal = 0
For Each cel In testrange
    If cel.MergeCells = False And cel.Value = 4 Then
        aantal = aantal + 1
        If aantal > 1 Then Exit For
    End If
Next cel
Cells(5, 1) = IIf(aantal = 1, "X", "0")

End Sub

En nu echt aan tafel  :D
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #24 Gepost op: 24 december 2019, 18:40:03 »
Hallo pitufo,

Hoop dat het gesmaakt heeft !!!

Alleszins dank voor het snelle antwoord.
RedHead zou dit in een functie gieten  ;D ;D ;D , maar ik kan hier wel mee verder  :thumbsup:

Maar een functie die ik vaker zie, en waar ik maar onvoldoende (te volgen) uitleg van vind (en die jij hier nu ook gebruikt) is de iif-functie. Voor als je eten wat gezakt is.... ;)

Gustoso,

:) SoftAid :)             



 
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #25 Gepost op: 24 december 2019, 18:51:22 »
Hey,

't Stond in je eigen probeersel ook in een sub maar je kan daar moeiteloos een functie van maken. Probeer maar eens !
By the way, de IIF-functie werkt eigenlijk exact hetzelfde als de ALS-functie (voorwaarde, waarde als WAAR, waarde als ONWAAR)

Poging 2 om de beentjes onder tafel te steken...
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #26 Gepost op: 24 december 2019, 19:00:02 »
Ik laat je nu echt gerust.
Smakelijk eten!

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline emields

  • Ervaren lid
  • ***
  • Berichten: 257
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #27 Gepost op: 25 december 2019, 02:01:14 »
natuurlijk moet ik met iets anders komen.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #28 Gepost op: 25 december 2019, 12:50:29 »
Hallo pitufo,

Dat gaat het hem zijn:
If cel.MergeCells = False And cel.Value = 4 Then
en dat in een For Each - next loop lost het probleem op.
Kort en krachtig. Bedankt  :thumbsup:

emields,
dank voor je poging. Je Sub om cellen samen te voegen of uit te plooien heeft geen zin voor mij.
Je hebt mij het nut en gebruik van MergeCells heel goed uitgelegd in een eerder stadium, en ik heb er ook dankbaar gebruik van heb gemaakt in mijn vorige testfase.

De CommandButton1_Click() doet wel wat hij moet doen, maar je beschouwd hier enkel cel C2 als samengevoegde, niet de mogelijkheid dat eender welke cel een samengevoegde kan zijn. (Een voorbeeldbestand moet je wel interpreteren)

Dat euvel wordt dan weer wel opgevangen door de code van pitufo, waar ik dan ook verder op kan bouwen.
Toch bedankt voor de moeite en interesse.

Tot als ik deze info verwerkt heb, of andere vragen kan bedenken  ;D, prettige eindejaarsdagen  \o/

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #29 Gepost op: 25 december 2019, 13:18:32 »
Hoi SoftAid,

Jawel hoor, 'k ben ook al (om niet te zeggen: een tijdje) wakker...

Is het je ondertussen gelukt die code om te bouwen tot een functie?
Anders hierbij een voorbeeldje met 2 verschillende werkwijzen. Je ziet maar of je ze gebruikt in je project of als 'studiemateriaal' tijdelijk aan de kant zet. Er zit een functie in zonder argumenten (zie A5), dus bruikbaar binnen het eenvoudige voorbeelddocument dat je had bezorgd, en een functie mét (zie H1). Op die manier is de werkwijze volledig vergelijkbaar met interne Excel-functies (kopiëren met of zonder $-tekens bijvoorbeeld).

Nog veel ontwikkelgenot gewenst  :)

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

 


www.combell.com