Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Sudoku oplossen.  (gelezen 22388 keer)

0 leden en 1 gast bekijken dit topic.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #45 Gepost op: 28 december 2019, 23:51:33 »
Hey kerstmannekes  ;D

Ik ga er mee stoppen, want het wordt te veel voor Korneel  ;)

pitufo,

ik vind geen zinnig ding in mijn code dat ik als trigger kan gebruiken.
Morgen nog maar eens proberen.

De code van Bart (zoeken naar singels) heb ik aan de praat gekregen met bijna goed resultaat.
De code zoekt nu al de "singels" op tot op een zeker punt (waar ik nu zit).
Na dat punt zou hij opnieuw moeten beginnen zoeken met de eerste routine, 2 de, 3 de en zo verder tot er geen meer kunnen gevonden worden.

Ik weet niet of je hier Do-While-loops moet gaan nesten, of dat het beter is van de hele blok in een loop te zetten.

Bart, de code maakt nog 2 foutjes.
1 - ergens in de laatste (kolom) zoekactie maakt hij een vakje buiten het Sudoku-veld groen. Niet erg..maar....
2 - bij de laatste Do-While-loop geraakt hij er niet uit.
     - of de Do staat niet op de juiste plaats.
     - of de voorwaarde van de While is fout om uit de loop te gaan.
3 - Denk ik...  :-[  :-[     Ik heb controlepunten gezet waar het fout loopt, want anders geraak je er niet uit.

Goede nacht,

Ik ga onder zeil.

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 #46 Gepost op: 29 december 2019, 01:26:00 »
het is met blijven proberen dat je het meest leert, tenminste als je nog goed kan onthouden.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #47 Gepost op: 29 december 2019, 09:59:54 »
Hallo SoftAid,

Gisteren niet meer in de buurt van een pc geweest...
Nog vóór de nieuwe bijlage(n) te bekijken waag ik liever eerst een gokje met een soort algemeen principe (dat m.a.w. voor vele doeleinden bruikbaar is, inclusief je sudoku-uitdaging dus):
Citaat
...ga ik dit proberen toe te passen op ons Oplossing.be werkstukje als ik een variabele vind...?
ik vind geen zinnig ding in mijn code dat ik als trigger kan gebruiken.
Na dat punt zou hij opnieuw moeten beginnen zoeken met de eerste routine
Ik zou dan maar zelf een extra variabele 'uitvinden'. Wat je nodig hebt is een switch (in de betekenis van een aan/uit-schakelaar). Eén do...while-methode moet dan volstaan.

Toegepast op je project zou ik de variabele (het kan nooit té duidelijk zijn) 'single_gevonden' noemen.
De structuur kan er dan zo uitzien:
Do
    'uitgangspunt binnen deze lus: er moet aan het eind ervan gestopt worden (gecheckt in "while")
    single_gevonden = False
    For a = b To c
        If x = y Then
            'we hebben een single gevonden
            [code indien gevonden]  'deze zorgt er voor dat we hier volgende keer misschien niet meer passeren
            single_gevonden = True 'wordt en blijft True van zodra een eerste single gevonden werd
        End If
    Next a
Loop While single_gevonden = True 'is op False blijven staan als geen enkele gevonden werd > we verlaten de lus

Zo, en nu even bijlezen, al viel deze me meteen op:
Citaat
inderdaad stonden daar enkele kemels en ezels tussen
Dat is wel héél streng voor jezelf. Je code werkte toch!?

Tot de volgende...
pitufo
"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 #48 Gepost op: 29 december 2019, 12:41:40 »
Oeioeioeioeioei, nu zitten we pas met een probleem !
Ik heb even Bart's zoekmethode er bij genomen maar helaas mijn pogingen (sorry Bart!) om ze wat te verbeteren moeten opgeven.
Ben dan maar van nul begonnen en mijn eigen (summiere) zoekmethode ontworpen met gebruikname van het idee uit mijn voorgaande post.

Probleem is dat ik mijn werkstukje hier (voorlopig?) niet durf posten, want deze werkwijze lost verduiveld de ganse sudoku volledig op, en ik herinner me dat je een macro(set) wou die je enkel op weg helpt om hem zelf verder op te lossen.
Wat nu gezongen?  :D :D :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.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #49 Gepost op: 29 december 2019, 13:03:29 »
Hallo pitufo,

jij hebt een probleem, niet ik (ik ook wel, maar dat is de ouderdom  ;D ;D)
Een stukje afknippen van je macro?  0:-) ;D

Nee, helemaal oplossen is geen plezier meer aan. Dan hoef je zelfs die moeite niet meer te doen.

In het begin ging het mij enkel om die hulpgetallen te filteren/te tonen.
Maar dan is Bart met een stuk code gekomen om al "Singles" te melden.
Ik kon het toen niet laten om die gevonden "Singles" om te zetten in Merged cells.
Daarna laat ik nieuwe hulpgetallen maken, aan de hand van de oude én nieuwe Merged cells.
En dat tot tot er geen "Singles" meer kunnen gevonden worden.
DAN begint het eigenlijke puzzelen  ;D

Laat eens zien (als je er zin in hebt) wat je hebt, misschien kunnen we een stuk er van gebruiken?

Ik ben nu de 1 -9 knoppen aan het zetten in de laatste versie waar ik aan gewerkt hebt (v.9).

als die af is dan post ik hem, met de fout dat de macro vastloopt.

Ik zal je advies in je vorige reactie proberen te gebruiken om uit die Do-While loop te geraken.

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 #50 Gepost op: 29 december 2019, 13:40:45 »
Hoi,

Er staat hier al iemand te trappelen om aan onze geplande boswandeling te beginnen. 'k Zal vanavond mijn werkstukje posten, want wil er her en der nog wat commentaren aan toevoegen.

Citaat
Ik kon het toen niet laten om die gevonden "Singles" om te zetten in Merged cells.
Daarna laat ik nieuwe hulpgetallen maken, aan de hand van de oude én nieuwe Merged cells.
En dat tot tot er geen "Singles" meer kunnen gevonden worden.
Dat is exact wat ik ook heb gedaan, maar dan op een stabielere manier. "tot geen meer gevonden worden" is dus de boosdoener: er worden er altijd opnieuw gevonden, en inderdaad tot de sudoku opgelost is. Maar met andere sudoku's zal dat mogelijk niet het geval zijn.

Citaat
Een stukje afknippen van je macro?
Ik zou ik niet zijn als ik daarvoor van tevoren ook al niets in gedachten zou hebben, maar ik wou eerst eens de reactie(s) zien  0:-)

Mijn oplossing daarvoor is weeral redelijk opportunistisch: we zouden een extra conditie kunnen aanwenden (gekoppeld aan de vraag of er nog singles zijn gevonden), namelijk maximaal x cellen mergen, waarbij je als user uiteraard x zelf kan kiezen (lees: de moeilijkheidsgraad, of nog beter gezegd 'het hulpniveau' instellen).

Maar nu eerst die frisse neus halen.

Tot straks,
pitufo
"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 #51 Gepost op: 29 december 2019, 19:15:10 »
Hoi,

Zoals afgesproken!

Vermits je mijn werkstukje waarschijnlijk toch niet als dusdanig gaat gebruiken maar enkel die gedeeltes die je uitzonderlijk bekoren in je eigen project gaat implementeren heb ik een pakketje overbodige zaken weggelaten, en alle coderingen (vooral de zoekroutine) wat gestructureerder en compacter gemaakt, niet met de bedoeling andermans code af te breken, maar om je een duidelijk beeld te geven van wat in feite slechts nodig is om dit netjes te laten werken. Om dezelfde reden heb je maar één werkblad meer.

Al ziet de code er dan nogal anders uit, toch blijft ze volledig trouw aan de principes die je voor ogen had, en m.i. nog altijd verstaanbaar.

In een veel vroegere versie zaten "maak_hulpcellen" en "wis_hulpcellen" in één enkele procedure. Door jou of door een andere helper zijn die inmiddels opgesplitst, en dat was een uitstekend idee. Op die manier moet binnen de zoekroutine niet nodeloos het ganse boeltje opnieuw gaan draaien, want er werd echt wel heel wat afge'loop't.
In plaats daarvan wordt "wis_hulpcellen" nu ook vanuit "zoeken" aangeroepen. Dat is goed genoeg, want er kunnen onmogelijk cijfertjes bijkomen na een merge.

Zoals beloofd kan je nu ook het hulpniveau instellen, EN op het moment dat je al zelf aan het oplossen bent er desgewenst nog een (zelfde of ander) aantal extra laten mergen met dezelfde knop, en dit zo vaak je wil (in dat geval wel eerst zelf "wis_hulpcellen" nog eens uitvoeren).

Geef maar een gil als iets nog bijkomende uitleg nodig heeft  ;)

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.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #52 Gepost op: 29 december 2019, 21:59:50 »
pitufo,

je macro werkt goed. Geen vastlopen of zo. Ik ga morgen eens testen of hij zo ver opruimt als met die van Bart.

Maar de essentie is en was toch nog steeds om de hulpcijfers te tonen, en dat lukt jou en mij heel goed, dus ik blij  :)

De volgende dagen ga ik het wat rustig aan doen met die macro's want, alhoewel ik enorm bijgeleerd heb, komt het mij eerlijk gezegd een beetje aan mijn oren uit  ;D

Ik wens je nog een goede nacht.

:) 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 #53 Gepost op: 30 december 2019, 10:13:56 »
Hallo SoftAid,

Als je de zoekroutine van Bart en die van mij naast elkaar legt zou je wel eens de indruk kunnen krijgen dat het over iets totaal verschillend gaat. Maar de realiteit is dat ze exact hetzelfde doen. Ik snap natuurlijk wel dat het jouw gemoedsrust ten goede kan komen door dat uitgebreid te testen. In elk geval blijft mijn code op zoek gaan naar singles zolang er kunnen gevonden worden; er zullen dus nooit minder hits zijn dan met de code van Bart.
't Is ook waarom ik een rempedaal heb ingebouwd waarvan je zelf de kracht kan instellen  0:-)

Ik ga trouwens zelf ook nog wat testen, want ik kan me niet voorstellen dat elke sudoku hiermee volledig opgelost zal raken. Want dat zou betekenen dat er geen moeilijke sudoku's bestaan... (het menselijk oog kan namelijk mits voldoende geduld maar zonder echt nadenken ook alle singles vinden die aan onze eenvoudige voorwaarden voldoen)

Je ziet het hé, ik blijf dit een uiterst aangenaam projectje vinden  :)

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.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #54 Gepost op: 30 december 2019, 10:55:20 »
Hallo pitufo,

met deze code kan je inderdaad geen iets moeilijker sudoko oplossen.

Er zijn criteria die de verdere oplossing mogelijk maken: Als er in één kolom bereik of in één rij-bereik of in een 3 x 3 vlak enkel nog twee dezelfde cijfers 2 maal voorkomen, dan heb je een "Double" in plaats van een single.

In het voorbeeldje zie je in vak A en in vak G enkel nog een 4 en een 6.
Daar in elk van die 2 cellen enkel een 4 of een 6 MOET staan, kan er geen 4 of geen 6 meer staan in de andere not-merged vakken van die range.
Daar kan je dus de 4 en 6 in de C, en de 4 in de I schrappen. En zo krijg je in I weer een single 7.

En zo zijn er natuurlijk nog veel meer truukjes die mogelijk met een beetje puzzelen door een macro kunnen opgelost worden.

Ik ge er eens aan beginnen, zie...  ;D

:) 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 #55 Gepost op: 30 december 2019, 11:04:12 »
Hoi,

Correcto!
't Is één van de vele denkpistes die ik volg als ik zelf een sudoku van a tot z oplos.
Lees ik nu goed dat je nog verder wil automatiseren? Dat wordt lastiger én interessanter (als uitdaging). Spannend!

'k Heb trouwens daarnet al een sudoku gevonden waarvoor geen enkele single gevonden word, en 'k moest er niet lang naar zoeken: hij stond als extra voorbeeld in je vorige bijlage!

Nog veel denkplezier!
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #56 Gepost op: 30 december 2019, 11:09:34 »
ik had de reacties van vandaag nog niet gelezen voor ik startte de vroegere vragen op te lossen.
In een nieuw tabblad heb ik even via aangepaste celeigenschappen, proberen te bewijzen dat die problematiek met samengevoegde cellen had kunnen vermeden worden.
Tik binnen een string anders een alt-enter en je staat binnen dezelfde cel op een nieuwe regel

Gek, op 1 of andere manier is de koppeling tussen pitufo's knoppen en de macros verdwenen. Vermoedelijk mijn fout, maar pitufo kan dat zo herstellen.

Laat anders eens de macro "zoekenBart" lopen, dit was een gemakkelijke sudoku, dus methode2 en 3 waren overbodig, dus niet getest.
 

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #57 Gepost op: 30 december 2019, 11:28:11 »
Dag Bart,

Citaat
op 1 of andere manier is de koppeling tussen pitufo's knoppen en de macros verdwenen
Vlug even je bijlage gedownload en alle knoppen werken prima zonder enige ingreep.

Citaat
In een nieuw tabblad heb ik even via aangepaste celeigenschappen, proberen te bewijzen dat die problematiek met samengevoegde cellen had kunnen vermeden worden.
Het zal je hopelijk niet verbazen dat alt-enter hier ook gekend is, maar de samengestelde cellen was nu eenmaal de opzet van SoftAid waarmee we rustig verder hebben gebouwd. En het werkt nu goed. 't Zou dus betekenen heel wat werk herbeginnen, mét nog de vraag of het veel eenvoudiger zou worden. Maar je mag mij altijd verbazen, dus misschien wil je wel als amusement dat eens op die manier uitwerken? 't Kan alleen maar voor iedereen nóg plezanter worden!

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.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #58 Gepost op: 30 december 2019, 11:29:49 »
Hallo Bart,

een vraag die, na het zo grondig mogelijk bestuderen als ik er bekwaam voor ben, op mijn lippen brandde was:
Je spreekt in de macro Zoeken_Bart() van "Methode 1", "Methode 2", "Methode 3".
Je gebruikt de eerste om singels per raster te zoeken. 2 om per Hor Ranges, en 3 voor Ver Ranges.
Mijn vraag: heb je hier opzettelijk ANDERE zoekmethodes gebruikt, als demonstratie wat (ook) mogelijk is ?
Mijn inziens kan je methode 2 (mits een kleine aanpassing in row en column OOK gebruiken voor het 3de stuk (Ver zoeken), of heb ik het mis.
Problemen die ik niet opgelost krijg:
Ik heb me rot gezocht naar een trigger voor de Do-While loop in het 3 de deel.
In datzelfde deel krijg ik de Do waarschijnlijk niet op de juiste plaats. Nadeel met testen is dat de macro crasht, en Excel.
Ctrl+Alt+Del is dan de enige optie.
Bestaat er geen code (in een loop bvb) om een zot-draaiende loop te onderbreken? Of een verborgen optie in de editor?

Alleszins heeft deze novice toch wel aardig bijgeleerd door voor mij ingewikkelde code proberen te begrijpen en aan te passen.

Graag je reactie (intussen lees ik jou bijlage)

:) 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 SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #59 Gepost op: 30 december 2019, 13:23:56 »
Hallo pitufo en cow18,

in bijlage een bestand van pitufo waarin bij een iets moeilijkere sudoku een deel singles niet gevonden wordt, ingekleurd.
Normaal.... zou hij deze toch ook gemakkelijk moeten kunnen vinden, denk ik....
Wel oppassen dat je niet per 3*3-kader meer laat zoeken, want dan wist hij sommige cellen volledig leeg.
Met herhaald hor. en ver. zoeken zouden die singles toch moeten verdwijnen.

Ook in bijlage een versie van mijn probeersels op de macro van Bart.
Ergens zit er een fout in een teller, want hij selecteert soms kaders die buiten de sudoku vallen.

Doch aan die tellers geraak ik niet goed uit. Ook het gebruik van bvb Median in de code begrijp ik (nog) niet.

Nu ga ik even een uurtje wandelen. Het is misschien weer lang wachten om nog zo een mooie dag te hebben;

:) 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 !

 


www.combell.com