Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Vinden hulpcellen Sudoku verfijnen  (gelezen 4653 keer)

0 leden en 1 gast bekijken dit topic.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #30 Gepost op: 30 januari 2021, 18:38:25 »
Hoi SoftAid,

Citaat
de "Reg Variabelen-editor" te gebruiken deed een nieuwe wereld opengaan
Oei en sorry, ik verkeerde in de mening dat je die al minstens een decennium gebruikt, anders had ik je daar al lang geleden op gewezen, want dat is inderdaad een uitermate handig hulpmiddel tijdens het testen (staat hier open in 96% van de gevallen  ;) )

Citaat
Gooi er je (goedkeurend) oog maar eens over  ;D .
Ik denk dat ik een goede leerling ben geweest

Ik heb dus (zoals mij opgedragen  ;D ) je nieuwste telg bekeken.
De eindscore is:  :thumbsup: \o/

Voor de kolommen lijkt het niet goed te gaan. De kwestie is enkel dat je bv. in de 1° kolom 3 maal hetzelfde duo hebt staan, iets wat in de praktijk onmogelijk kan voorkomen, dus ga vooral niet zoeken naar een mogelijk foutje in de code.

Even zomaar een ideetje tussendoor: je 4 'rondes', daar is uiteraard niets mis mee. Anderzijds heb je nu allerlei zoekmethodes in je grote bestand die elk hun eigen ding doen, en daardoor een andere methode van nieuwe info voorzien. Er is ook geen enkel noodzaak waarom je een vooraf bepaalde volgorde zou moeten aanhouden. In een vorige versie had je daar trouwens al aparte knoppen voor voorzien. Een mogelijkheid zou dus kunnen zijn om elke methode maar 1 ronde te laten maken. Dan heb je veel meer invloed op de hoeveelheid singles of doubles die finaal overblijven. Je kan dan de ene knop 1 keer gebruiken, een andere 2, 3, 4... keer, nog een andere helemaal niet, en bij een andere gelegenheid dan weer iets totaal anders, de totale vrijheid m.a.w.
Waarom ik hier aan denk is omdat het er uiteindelijk toch om gaat een sudoku zelf op te lossen (we hebben vroeger gezien dat een redelijk makkelijke volledig opgelost kan worden door een 'eenvoudig' zoeken naar singles), en dus hou je dan veel meer zelf in handen hoeveel hulp je van vba wil krijgen. Oesje, een nogal uitgebreide 'tussendoor', merk ik plotseling  :D

Nog een leuke:
Citaat
x = Int(beginkolom / 3)         'Geen For_Next voor x, deze manier was eenvoudiger
Ha ja, dat komt omdat je maar in één richting moet gaan om de 9 'vierkanten' te vullen  :)

Op naar de volgende uitdaging...  :D 0:-)

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: Vinden hulpcellen Sudoku verfijnen
« Reactie #31 Gepost op: 30 januari 2021, 19:07:31 »
hallo pitufo,

mijn antennes ontvangen enkel positieve commentaar, waar ik dus heel gelukkig mee ben  :thumbsup:

Die dubbele rondjes laten draaien is soms "overkill", maar het kan. Ik heb zelf al ooit "3 Duos" in een veld gezien.
Zeldzaam, maar als 2 lijntjes code de macro 4 maal laten uitvoeren in enkele seconden, waarom dan niet?
Citaat
Nog een leuke:
x = Int(beginkolom / 3)         'Geen For_Next voor x, deze manier was eenvoudiger
Ha ja, dat komt omdat je maar in één richting moet gaan om de 9 'vierkanten' te vullen  :)

Voor jou opzichtig eenvoudig, voor mij een hele uitdaging !!!

Citaat
De kwestie is enkel dat je bv. in de 1° kolom 3 maal hetzelfde duo hebt staan, iets wat in de praktijk onmogelijk kan voorkomen...
Dat kan wel!!   3 duos in 3 "cellen" laat nog 6 cellen vrij voor de andere 6 cijfers, dus het kan.
12, 3, 12, 4, 12, 5 6, 57, 78, 89  = 3 x 12 in  9 groepen, en toch nog genoeg ruimte voor de overige combinaties.

Belangrijk om te melden, ook voor toekomstige lezers..... Zet steeds je "Reg-Variabelen-editor" (F8) aan als je code in VBA wilt leren begrijpen !!!
Bestudeer het, en leer.....
Voor mij is daarmee een nieuwe beleveniswereld open gegaan.

Heel erg bedankt voor je positieve comments (en je duidelijke comments in je 8x8 code, daarzonder was het "vijgen na Pasen" geweest.... )

Op naar de 3 dezelfde 3 zoek-functie  ;D ;D ;D 

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: Vinden hulpcellen Sudoku verfijnen
« Reactie #32 Gepost op: 30 januari 2021, 20:46:42 »
Hallo SoftAid,

We zijn héél dicht bij volledige eensgezindheid, ttz ik heb nog slechts 2 bedenkingen  ;)

Citaat
maar als 2 lijntjes code de macro 4 maal laten uitvoeren in enkele seconden, waarom dan niet?
Ja natuurlijk, en zet er nog een 1 voor en hij loopt 14 maal...
Ik heb m.a.w. mijn opinie duidelijk niet goed genoeg verwoord. Mijn idee was om door elke zoekmethode één ronde te laten doen per knopklik de controle meer zelf te behouden over hoeveel hulp vba jou geeft. Maar vanzelfsprekend is dat iets dat niemand voor jou kan beslissen. Dus dit is echt wel enkel een kwestie van smaak.

Citaat
Citaat
De kwestie is enkel dat je bv. in de 1° kolom 3 maal hetzelfde duo hebt staan, iets wat in de praktijk onmogelijk kan voorkomen...
Dat kan wel!!   3 duos in 3 "cellen" laat nog 6 cellen vrij voor de andere 6 cijfers, dus het kan.

Ai, dat is een ander paar mouwen. Want dat kan niet!
't Is te zeggen, als je met die situatie zou geconfronteerd worden, dan is er voordien iets fout gegaan ('valse' sudoku of foutje in andere macro).
Want je moet niet naar de 6 andere cellen kijken, maar juist wel naar die drie duo's.
We zijn toch akkoord dat we praten over identieke duo's en dat er geen andere getallen in dat vierkantje staan, niet?
Stel, ik neem er in gedachten je voorbeeld bij, dat je 3 duo's hebt die de getallen 7 en 9 bevatten. Eén ervan zal definitief 7 worden. In de 2 andere blijft nog enkel 9 over. Voel je'm komen? Eén daarvan wordt 9. En... in die derde is er geen enkele mogelijkheid meer.
Maar op zich dus niets om je zorgen over te maken, het is enkel je testvoorbeeld dat kuren vertoont  0:-)

Zo, en nu ga ik eerst mijn sneeuwman verder afwerken  :D :D :D

Fijne voortzetting van het weekend!
"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: Vinden hulpcellen Sudoku verfijnen
« Reactie #33 Gepost op: 30 januari 2021, 22:03:34 »
zet er nog een 1 voor en hij loopt 14 maal... Dus dit is echt wel enkel een kwestie van smaak.
4 rondjes zijn mogelijk, maar dat is zeer zeer zeldzaam. Maar 3 rondjes heb ik dus als kleine puzzelaar zelf al meegemaakt, dat is dus geen overbodige luxe. Het is ook geen kwestie van smaak. Je kan de macro beter 3 x automatisch laten checken, dan 1 keer een overblijvende dubbel niet te zien.
Citaat
Voel je'm komen?
Ja, mogelijk heb ik dat enkel eens gezien en meegemaakt als ik ergens iets fout had gedaan bij een heel moeilijke Sudoku.
In principe kan het inderdaad niet....
Citaat
Zo, en nu ga ik eerst mijn sneeuwman verder afwerken  :D :D :D
Fijne voortzetting van het weekend!
Ik zal de diepvries hier nog moeten uitmesten om genoeg bij elkaar te krijgen voor 1 sneeuwbal.
Gisteren 24°C hier in Palma..... Pffff.....  ;D

Veel 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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #34 Gepost op: 31 januari 2021, 09:28:59 »
ik doe nog enkel aan snellezen.

1. ik zou de 1e 2 keer de macro de beide diagonalen laten aflopen ipv. per rij of kolom te laten werken.
Nadat je de macro zo had laten lopen, dan heb je het ganse raster al 2 keer afgelopen, dus maak je snellere vooruitgang.
Daarna kan je of eerst nog een keer de 2 middellijnen doen en dan terug rij per rij of kolom per kolom afwerken of een andere methode, die geoefende sudoku-oplossers je aan de hand kunnen doen.

2. maak een geparametreerde macro, dus een macro waarin je iets kan meegeven, bv. een bereik, want in principe moet je dezelfde redenening 3 keer net eventjes anders uitvoeren. Je zoekt singles of duo's en straks nog andere dingen binnen voor jou een raster van 3*27, 27*3 of 9*9, dus geef je zo'n bereik aan die ene macro mee en die lost de boel op en geeft het antwoord terug. Vermoedelijk moet je dan nog een 2e parameter meegeven, maar daar kom je wel achter.
Met de helft minder regels ga je een duidelijker beeld krijgen.

zie hier onder :
de macro "loopje" maak je een bepaalde zoekstrategie, die je proefondervindelijk zou kunnen optimaliseren. Ik zeg niet dat de geciteerde manier van eerst zoeken op diagonaal sneller oplost, maar ik gok het en je zou het kunnen testen.
De macro "opzoeken" dat dan binnen dat bereik je zoek en oploswerk.
En die resize, als je die nog niet kent, dat is een "wijze" zouden ze in het gents zeggen.

Onderstaande is opnieuw los uit de pols geschreven, zonder testen ...
Sub Loopje()
   For i = 1 To 25 Step 3'1e diagonaal
      opzoeken Cells(i, i).Resize(9, 9)          'deelraster
      opzoeken Cells(i, 1).Resize(3, 27)         'rij
      opzoeken Cells(1, i).Resize(27, 3)         'kolom
   Next

   For i = 1 To 25 Step 3'2e diagonaal
      j = 26 - i
      opzoeken Cells(i, j).Resize(9, 9)
      opzoeken Cells(i, 1).Resize(3, 27)
      opzoeken Cells(1, j).Resize(27, 3)
   Next

   For i = 1 To 25 Step 3
      For j = 1 To 25 Step 3
         opzoeken Cells(i, j).Resize(9, 9)
         opzoeken Cells(i, 1).Resize(3, 27)
         opzoeken Cells(1, j).Resize(27, 3)
      Next
   Next

End Sub

Sub opzoeken(bereik)
   Select Case bereik.Rows.Count * 100 + bereik.Columns.Count
      Case 327: s = "bezig met een rij"
      Case 2703: s = "bezig met een kolom"
      Case 909: s = "bezig met een deelraster"
   End Select
   bereik.Select
   MsgBox "het bereik is " & bereik.Address & vblf & s

End Sub



Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #35 Gepost op: 31 januari 2021, 10:26:33 »
Hallo Bart,

hartelijk dank voor je andere denkwijze. en voor het schouderklopje.
Maar ik kan er (nog) niet veel mee. Het is een stuk denkwijze die voor mij nog onleesbaar is (no comments, en onvolledig.
Mogelijk leer ik snel bij en kan ik alsnog je visie toepassen.

Citaat
En die resize, als je die nog niet kent, dat is een "wijze" zouden ze in het gents zeggen.
Als je mijn (op pitufo's gebaseerde) macro's gelezen hebt, dan zie je dat ik resize aangepast en gebruikt hebt.
Dat is eenvoudig te begrijpen en toe te passen.
Het maken (en begrijpen van Var's voor de Offset heeft me meer kopbrekens bezorgd, maar nu heb ik het ook volledig door, en kan ik zelf manieren bedenken om mijn doel te bereiken.
Vóór gisteren waren die:
rijpositie = (Int((i - 1) / 3))
kolompositie = ((i - 1) Mod 3) * 3
gewoon een chinees gegeven, zonder dat ik er iets van begreep.
Nu wel dus, en dat is een goede oefening geworden over wat je zoal kan bereiken met een teller en een formule.

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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #36 Gepost op: 31 januari 2021, 12:22:41 »
ok, dan niet.  :'(
Ga nog een beetje in de zon liggen bakken en genieten, hier vriest het.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #37 Gepost op: 31 januari 2021, 15:28:10 »
@ cow18,

Ik kom er zeker nog op terug, en hopelijk (voor mij) snap ik het ooit.
Maar het hangt ook veel van jou af.
De code van pitufo (2x2) begreep ik helemaal niet, en dan heeft hij er comments bij gezet.
En variabelen een duidelijkere naam gegeven. En dan wordt het wel leesbaar voor mij.

toch bedankt.

Hallo pitufo,

Ai, dat is een ander paar mouwen. Want dat kan niet!
Sorry, ik weet intussen waar ik op doelde: 3 triples in 3 cellen van 1 groep. Het schoot me nu te binnen!!

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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #38 Gepost op: 31 januari 2021, 19:17:06 »
sorry, zo werkt dat niet.
Ik wilde je 1 en ander bij brengen, maar jij wil de controle behouden.
Ik lever veel commentaar naast mijn macros, die ik hier neerzet.

Heb je de macro uberhaupt eens laten draaien (misschien crasht hij wel, want ik heb hem los uit de pols geschud), maar wat zie je dan en wat zie je in "Venster locale variabelen" ?

Ik meld me af.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #39 Gepost op: 31 januari 2021, 19:28:15 »
sorry, zo werkt dat niet.
het "werkt" dan enkel als het op jou manier wordt gedaan?
[/quote]
Citaat
Ik wilde je 1 en ander bij brengen, maar jij wil de controle behouden.
Ik lever veel commentaar naast mijn macros, die ik hier neerzet.
Ik heb liefst iets wat ik kan begrijpen, maar blijkbaar heb jij er problemen mee als iemand niet kan volgen.
Citaat
Heb je de macro uberhaupt eens laten draaien (misschien crasht hij wel, want ik heb hem los uit de pols geschud), maar wat zie je dan en wat zie je in "Venster locale variabelen" ?
Neen, die heb ik niet laten draaien, en ik wacht daar nog mee, tot ik meer kennis heb vergaard (als dat ooit komt).
Je vergeet steeds dat abstract denken niet voor iedereen is weggelegd. Ik zelf moet iets uit elkaar kunnen halen, en het stukje per stukje terug in elkaar steken om te begrijpen hoe het in elkaar steekt. En dat kost me dan soms nog dagen of weken.
Citaat
Ik meld me af.
Wat schreef je laatst van "kort door de bocht"...?

Excel is al prima, nu de sociale vaardigheden nog wat aanscherpen...

 :( 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: Vinden hulpcellen Sudoku verfijnen
« Reactie #40 Gepost op: 02 februari 2021, 17:55:50 »
Hallo SoftAid,

Ik gooi er ook nog maar eens een mening tegenaan:

Citaat
Sorry, ik weet intussen waar ik op doelde: 3 triples in 3 cellen van 1 groep. Het schoot me nu te binnen!!
JUST  :D

Over het aantal rondes zitten we nog op een ander spoor, maar beide sporen zijn wel o.k.
Mijn ideetje was gewoon gebaseerd op een vroegere uitspraak van jou waarbij je stelde dat het niet de bedoeling was een sudoku integraal door vba te laten oplossen. In die zin vond ik het een te overwegen idee om de hoeveelheid hulp zelf te sturen.

Maar als je nu liefst het maximum uit de vba-hulp haalt zijn meerdere rondes inderdaad aangewezen. Alleen zou ik ze dan niet rond één of meerdere sub-procedures zetten maar rond het totaal aan procedures. We kunnen stellen dat je al 9 procedures hebt (2 verschillende voor singles, en 1 voor doubles) die elk in 3 richtingen werken. Elk van die 9 procedures kan een invloed hebben op elke andere, en dus valt het onmogelijk in te schatten hoeveel rondes je moet voorzien (in de ene sudoku zal dat zus zijn, in de andere zo). Dan zou dé oplossing uit een do/while moeten bestaan ter vervanging van for/next, en met gebruik van een vlag. De eerste instructie binnen de loop zou dan moeten zijn deze op False te zetten, en wanneer er ook maar ergens door één van de procedures cijfers geschrapt worden moet die True worden. Een Exit lijkt mij daarbij overbodig aangezien de mogelijkheid dat je in de resterende procedures alweer cijfers kan schrappen.

Volg je nog een beetje?

Andere kwestie zijn de triples op je ‘to do’-lijstje (lees: linea recta naar 12 procedures). Dat kan niet al te moeilijk zijn, want de redenering is eigenlijk identiek aan die voor de doubles. Ik heb het bestand nu niet bij de hand maar ik denk zo dat een extra tellertje moet volstaan.
Maar ik hoop natuurlijk van harte dat je, mits tijd, er al aan begonnen was  :)

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: Vinden hulpcellen Sudoku verfijnen
« Reactie #41 Gepost op: 02 februari 2021, 18:11:26 »
Hallo pitufo,

zoals gewoonlijk zit je er niet ver naast  ;D
Maar wat begonnen is met enkel hulpcellen te genereren en de overbodige te wissen, is van het een het ander gekomen (als je bij de hond slaapt, krijg je zijn vlooien) en zitten we nu inderdaad de Sudoku gedeeltelijk op te lossen (tot een bepaald niveau...).

Van dubbels naar trippels is een zeer kleine stap, dat krijg ik zelfs gemakkelijk klaar.
Dan de volgorde: Het enige belangrijke in de volgorde is dat je na iedere controle op singles, dubbels of tripples terug eerst Hulpcellen moet wissen, anders kan je systeempje fout info krijgen.

Maar in loops ben ik niet te verslaan, dus laat me daar maar mee stoeien. Ik ben nu even minder actief bezig (na die dagen werken aan die rijen- en kolommen-duos- macro's) met Sudoku, maar dat borrelt wel terug op.

Ook wil ik eens kijken of er geen 2 (of 3) gelijkaardige procedures kunnen samengevoegd worden tot één procedure, maar dan moet er wel een trigger ingebouwd worden dat bij een positieve test "Wis_hulpcellen" wordt uitgevoerd.

Er is geen haast bij. Als corona nog lang aan de macht blijft, dan heb ik alle tijd van de wereld.

Dank voor het blijven volgen van dit draadje  8)

Groeten,

Theo

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