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 1469 keer)

0 leden en 1 gast bekijken dit topic.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 18.894
  • Geslacht: Man
  • Nobody is perfect, not even me...
Vinden hulpcellen Sudoku verfijnen
« Gepost op: 22 januari 2021, 12:14:56 »
Hallo puzzelaars,

een tijdje geleden ben ik begonnen met een Sudoku bestand om hulpcellen te vinden.

Dat was redelijk goed gegaan en de hulpcellen werden (via veel code) toch gevonden.
Daarna heeft Bart nog code geschreven om naar "Singles" te zoeken in 3 x 3 rasters, en in Rijen en in Kolommen.

Met één zaak had ik geen rekening gehouden: singles in een groter 9 x 9 raster.

Want als een cijfer maar 1 keer voorkomt in dat raster , dan is dat een unieke waarde, en mag die 3 x 3 waar de Single in staat naar een Samengevoegde cel worden omgezet, met de gevonden unieke waarde.

Ik heb vele avonden gezocht naar een eenvoudige manier (a la Bart) maardat lukte mij dus niet.

Als iemand wilt brainstormen  ;D be my guest.

Groeten,

:) SoftAid :)             

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 #1 Gepost op: 22 januari 2021, 13:09:26 »
Hoi SoftAid,

Even in de marge: ook ik heb me destijds aandachtig gebogen over deze kwestie. Wat ik me daarvan herinner is dat het met stukjes en beetjes is gegaan maar je uiteindelijk aan 2 verschillende methodes bent geraakt (van Bart en van bibi dus) die beide alle mogelijke singles te pakken kregen.

De code in je huidige bijlage komt mij in deze vorm niet bepaald bekend voor, waarschijnlijk omdat het maar een deel van de vroegere oplossingen bevat (?).
En je hebt er waarschijnlijk ook al wat mee zitten experimenteren(?). Ik zie bv. dat in "Set LB = Sheets("Sudoku").Range("D4")" de D4 veeleer D2 zal moeten zijn.
Cellen samenvoegen zal er ook nooit mee gebeuren want er wordt enkel gecheckt op het aantal ingevulde cellen binnen een 3x3.

Om het even bij je specifieke vraag te houden: elke 3x3 valt integraal binnen een 9x9. Dus als een cijfer slechts één maal binnen een 9x9 valt zal het automatisch ook binnen een 3x3 vallen, wat een 9x9-controle m.i. nutteloos maakt. Of zie ik eea totaal verkeerd?

In elk geval: altijd bereid tot samen verder nadenken  8)

Groeten,
pitufo

[Edit:]
Nog een moment verder gekeken en ingezien waarom ik me had laten vangen aan je 9x9-vraag.
Om het bij die roze 1 uit je voorbeeld te houden zou je theoretisch enkel moeten kijken in de 9 linkerbovenhoeken van alle 3x3-vierkanten (omdat dat de enige plaats is waar ze kan staan), maar in de praktijk kan dat inderdaad in de 9x9 (al was het maar omdat dat eenvoudiger is). Ik probeer er vanavond naar te kijken (momenteel roept het bos  :D)

Enne, hoe zeker ben je dat dit toen nog niet ingebouwd zat?
« Laatst bewerkt op: 22 januari 2021, 13:27:57 door 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: Vinden hulpcellen Sudoku verfijnen
« Reactie #2 Gepost op: 22 januari 2021, 13:55:56 »
Hallo SoftAid,

Ik heb al gauw-gauw een heel rudimentaire code geschreven, ttz alleen voor die ene gevulde 9x9 uit je voorbeeld.
Met wat for/next-toevoegingen krijg je dat vermoedelijk zelf wel aangepast voor de rest, anders toch tot vanavond.

Tussen haakjes: gemergde cellen nog eens mergen zal weinig gevolgen hebben, dus dat 'ontwijken' heb ik maar zo gelaten  ;)

Sub Zoeken_in_9X9_raster()
' Bijkomend zou een macro nodig zijn die in een 9x9 zoekt naar een getal dat daar maar 1 keer in die 81 cellen staat.
' en deze via Sub Bereikaanpassen() tot een samengestelde cel met de gevonden unieke waarde in die 3 x 3 omvormen

For cijfer = 1 To 9
    aantal = WorksheetFunction.CountIf(Range("E3:M11"), cijfer)
    If aantal = 1 Then
        rij = Int(Range("E3:M11").Find(cijfer).Row / 3) * 3
        kolom = (Int((Range("E3:M11").Find(cijfer).Column - 2) / 3) * 3) + 2
        Cells(rij, kolom).Resize(3, 3).Merge
        Cells(rij, kolom) = cijfer
    End If
Next cijfer

End Sub

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: 18.894
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #3 Gepost op: 22 januari 2021, 14:58:48 »
Hallo Pitufo,
Citaat
Even in de marge: ook ik heb me destijds aandachtig gebogen over deze kwestie. Wat ik me daarvan herinner is dat het met stukjes en beetjes is gegaan maar je uiteindelijk aan 2 verschillende methodes bent geraakt (van Bart en van bibi dus) die beide alle mogelijke singles te pakken kregen.
Niet alle mogelijke singles, dat heb ik ondervonden, en daarmee ook mijn vraag nu.
Citaat
Ik zie bv. dat in "Set LB = Sheets("Sudoku").Range("D4")" de D4 veeleer D2 zal moeten zijn.
Ja, die code van de eerste werkende versie heb ik er laten staan als voorbeeld, niet als werkende code. Dan had ik bereiken moeten aanpassen en veel weg-gommen  ;D.
Citaat
Cellen samenvoegen zal er ook nooit mee gebeuren want er wordt enkel gecheckt op het aantal ingevulde cellen binnen een 3x3.
Dat gebeurde in de Sub BereikAanpassen(c2, i), waar de variabele c2 en i uit de Sub zoekenBart_Raster() werden gebruikt.
Citaat
Om het even bij je specifieke vraag te houden: elke 3x3 valt integraal binnen een 9x9. Dus als een cijfer slechts één maal binnen een 9x9 valt zal het automatisch ook binnen een 3x3 vallen, wat een 9x9-controle m.i. nutteloos maakt. Of zie ik eea totaal verkeerd?
Als een cijfer slechts eenmaal binnen een 9 x 9 valt, dan staat hij ook maar 1 maal in een van de negen 3 x 3.
Als een cijfer in twee verschillende 3 x 3 voorkomt, dan is er geen uniek cijfer voor de 9 x 9, wel voor twee 3 x 3's.
En zolang er een keuze is, kan je niet met zekerheid stellen welke nu juist is.

Neem gewoon de 3. Deze komt in de eerste 3 x 3 slechts 1 x voor maar ook in andere 3 x 3.

De Sub zoekenBart_Raster() scant dus elke 3 x 3 van de sudoku, als hij daar een 3 x 3 (samengevoegde worden overgeslaan) vindt met maar 1 cel met een cijfer , dan slaat hij aan  en geeft die door naar Sub BereikAanpassen(c2, i), die de cellen binnen die 3 x 3 samenvoegt, kleur en andere opmaak aanpast.
Hij kijkt dus niet of er in de 9 x 9 waartoe deze 3 x 3 behoort een "Single" voor de 9 x 9 staat.
Citaat
In elk geval: altijd bereid tot samen verder nadenken  8)
Waarvoor dank  :thumbsup:

Trouwens, je code werkt perfect  :thumbsup:. dit is de aanvulling van zoeken in 3 x 3, zoeken in rijen, zoeken in kolommen waar ik naar zocht. Maar ik geraakte er enkel met veel If-then's loops en 9 variabelen (en een HDD vol code  ;D)

Het is niet ECHT de bedoeling om de Sudoku nog verder te laten oplossen door de Macro's, want je kan daar heel ver in gaan.

De volgende stap zou zijn om te zoeken naar 2 identieke overblijvende cijfers.
Bijvoorbeeld:
in een 3 x 3 in een 9 x 9 staan nog enkel een 2 en een 4. Idem in een tweede 3 x 3 van diezelfde 9 x 9.

Dan mag je alle andere 2's en 4's in de hele 9 x 9 verwijderen, wat weer perspectieven opent voor zoeken op rij, kolom, raster.
Het zoeken naar 2 overgebleven identieke kan ook per rij. Een rij is dan wel een rij van 9 stuks 3 x 3's.
Idem voor kolommen.
En zo zijn er nog trucjes die je als Sudoku-oplosser toepast, maar die mogelijk te complex zijn om hier met code op te lossen.

Ik ga dit integreren in mijn grootboek sudoku  8) en dan zal ik het nogmaals in bijlage gooien.

Een tevreden..

:) SoftAid :)             


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: 333
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #4 Gepost op: 22 januari 2021, 15:02:14 »
is die "Bart" ik ?

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 18.894
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #5 Gepost op: 22 januari 2021, 15:13:10 »
Hallo Bart,

Long time no see  ;D. Alles goed met jou?
is die "Bart" ik ?
Natuurlijk, wie anders? Hoeveel Barten hebben we hier  ;D ;D ;D
Join the club  :thumbsup:
 
@Pitufo,
Met wat for/next-toevoegingen krijg je dat vermoedelijk zelf wel aangepast voor de rest, anders toch tot vanavond.
Dat is geen probleem.
Citaat
Tussen haakjes: gemergde cellen nog eens mergen zal weinig gevolgen hebben, dus dat 'ontwijken' heb ik maar zo gelaten  ;)
Er zouden wel problemen kunnen zijn met de gemergde cellen bij het checken, omdat de waarde van de gemerge cel in de rechsbovenhoek staat van die gemergde cellen. Maar in dit geval is dit niet van toepassing. Een 3 x 3 kan enkel gemerged worden als die 3 x 3 een unieke bevat binnen die 9 x 9 , rij, of kolom.

Groeten aan beide heren,

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

  • Volledig lid
  • **
  • Berichten: 228
  • Geslacht: Vrouw
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #6 Gepost op: 22 januari 2021, 16:39:08 »
Hallokes allen,

Met zéér veel interesse volg ik dit topic, ben zelf ook een fervente SUDOKU-oplosser  ;),
maar ook met minstens evenveel spijt dat mijn VBA-kennis nog maar in de baby-schoentjes staat
want ik vind dit echt een geweldige uitdaging waar ik graag had willen over 'mee'-denken...
Maar met mijn beperkte kennis VBA is dergelijke code uitwerken een driedubbel zo grote breinbreker
dan het oplossen van de sudoku zelf  ;D...
Ik blijf het zeker opvolgen, al was het maar om nog iets extra over VBA te leren  ;).

groetjes,
BlackDevil
Windows 10 Home v. 20H2 / Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz 2.40GHz / RAM : 8,00 GB (7,89 GB beschikbaar) / 64-bits besturingssysteem, x64-processor / Intel(R) 7 Series Chipset Family SATA AHCIController / Qualcomm Atheros AR8161 PCI-E Gigabit Ethernet Controller (NDIS 6.30) / Qualcomm Atheros AR9485 Wireless Network Adapter / HGST HTS541010A9E680 / Samsung STORY Station / Seagate Backup+ Hub / Seagate BUP Slim / Seagate Expansion Desk / HP OfficeJet 3831
Bullguard Premium Protection

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #7 Gepost op: 22 januari 2021, 18:00:06 »
@ BlackDevil,

In elk geval welkom in dit draadje. En, wie weet, misschien kom je wel plots met een geniale inval die wij dan indien nodig in code omzetten.
En aangezien het onderwerp je duidelijk interesseert, hier een portie lectuur (af en toe eens slikken is wellicht onvermijdelijk):
https://www.oplossing.be/excel/sudoku-oplossen/

@ SoftAid,

Vooraleer mijn stukje code te posten had ik alle bestaande nog eens bekeken, en daar blijkt inderdaad uit dat die bovenste nog enkel checkt of er moet gemergd worden (en dat desgevallend ook doet), en is hier bijgevolg verder niet relevant.

Citaat
Het is niet ECHT de bedoeling om de Sudoku nog verder te laten oplossen door de Macro's, want je kan daar heel ver in gaan
Dat is iets waar je geen totale vat op hebt. We hebben vroeger een aantal keer gezien dat een (redelijk) eenvoudige macro al helemaal opgelost raakte door het niet al te uitgebreid zoeken naar singles, dus verrassingen ga je altijd wel krijgen, maar dat kan het ook leuk maken.
Een deel van de code NIET gebruiken bij makkelijke sudoku's zou nog een uitdaging kunnen zijn, maar wie gaat dat dan op voorhand bepalen...

Citaat
Er zouden wel problemen kunnen zijn met de gemergde cellen bij het checken, omdat de waarde van de gemerge cel in de rechsbovenhoek staat van die gemergde cellen
Je bedoelt toch linkerbovenhoek? Denk ik daarom dus niet, hoor. Mijn code bepaalt in de rij- en kolomberekening altijd eerst dat hoekje om van daaruit naar rechts en onder te mergen. Die eventueel al gemergde cel past dus binnen dat plaatje.

Citaat
En zo zijn er nog trucjes die je als Sudoku-oplosser toepast, maar die mogelijk te complex zijn om hier met code op te lossen.
Daag me niet uit, hé...  :D :D :D

Citaat
dan zal ik het nogmaals in bijlage gooien
Graag  :thumbsup:

Groeten,
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: Vinden hulpcellen Sudoku verfijnen
« Reactie #8 Gepost op: 23 januari 2021, 19:01:53 »
Hallo,

'k Heb voor de verandering (en vooral voor de fun) al voor een extraatje gezorgd. De macro staat in een aparte module.
Nu even geen tijd meer, maar de logica werkt, maw ik zou mijn variabelen nog wat duidelijker mogen benoemen en wat commentaar toevoegen.
Maar wie wil kan al eens testen. Er wordt gewerkt in het grote linkse vierkant. Bij 'gebeurlijke ongevallen'  :D  kan het rechtse daar naartoe worden gekopieerd.

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

Offline cow18

  • Ervaren lid
  • ***
  • Berichten: 333
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #9 Gepost op: 23 januari 2021, 21:13:11 »
ik heb op een andere manier fun beleefd op een zaterdagavond  ;D
Kijk naar AV1 en AX1.
Tik in AX1 de getallen tussen 1 en 9 die nog tot de mogelijkheden behoren en in AV1 krijg je ze netjes op 3*3.
Dus probleem van samengevoegde cellen is van de baan.
In een UDF kan ik wel niet de font en de uitlijning wijzigen, dat zal nog op een andere manier moeten.

Door bovenstaande toe te passen zal de programmering vlotter verlopen.

Van belang is dat je een monospace-lettertype zoals "courier" gebruikt.


Offline cow18

  • Ervaren lid
  • ***
  • Berichten: 333
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #10 Gepost op: 24 januari 2021, 11:23:15 »
vervolg op "blad3"  zonder samengevoegde cellen
macro "kopie" kopieert lege sudoku van rechts naar links
macro "loop_singles" doet dan al een eerste aanvulling

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 18.894
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #11 Gepost op: 24 januari 2021, 12:54:32 »
Hallo Bart,

Bedankt voor alle inspanningen, maar spijtig genoeg kan IK er (nog) niets mee.
Je bent de puzzel hier op een heel andere manier aan het benaderen, met alle getallen in 1 cel.

Ik kan die code niet lezen, en dus niet integreren in wat ik reeds had gemaakt en wel begreep.
En het "begrijpen" is toch een van de belangrijkste voorwaarden om hier zelf iets uit te leren.

Ofwel heb ik het slecht uitgelegd en heb je daardoor de vraag verkeerd begrepen.... Sorry dan  :-[

Met sub Loopje_Duos() geeft hij mij een MsgBox die correct weergeeft waar er duos zijn.
Maar ik kan dit gegeven niet verder integreren in de andere code om de cijfers in die duo's uit de resterende rij, kolom, of 9x9 raster te halen, opnieuw omdat ik de code niet kan lezen.

Een voorbeeld:    CreateObject("scripting.dictionary")
Deze functie kan worden gebruikt om een ​​nieuw ActiveX-object te maken, maar de enige vorm van activeX-objecten die ik ken zijn knoppen en besturingselementen.

Dus echt te hoog gegrepen voor mij.

Ik hoopte op "eenvoudige" code, die ik kan ontrafelen en leren begrijpen.

Toch heel erg bedankt voor de aangereikte code  _/-\o_

Groeten,

Theo

:) SoftAid :)             

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: 333
  • Geslacht: Man
  • Oplossing.be
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #12 Gepost op: 24 januari 2021, 13:25:59 »
Vergeet dan toch het stuk van die duo's en die dictionary, dat moet je zien als een slim spiekbriefje om de duos bij te houden.

Ik heb gepoogd het ieder element van het raster, die nu ook 3*3 cellen bevat en in het geval van een single samengevoegd wordt, 1 cel te maken.
Dat zal je programmeerwerk drastisch vereenvoudigen.
Je weet direkt per cel welke opties er nog open liggen, je moet enkel de spaties en het chr(10) verwijderen.

Kan je niet volgen, dan is het vuilbak.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #13 Gepost op: 24 januari 2021, 18:04:45 »
Hallo SoftAid,

Heb je dan misschien #8 gemist... of... ?
Ik ging er nog de nodige commentaar aan toevoegen, maar als je daar ook geen heil in ziet is het misschien verloren moeite(?)

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: 18.894
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Vinden hulpcellen Sudoku verfijnen
« Reactie #14 Gepost op: 24 januari 2021, 18:45:28 »
Hallo pitufo,

neen, helemaal niets gemist, maar ik ben nog in de "verwerkingsfase"  :) :)
Waarom, omdat ik die code wel kan lezen, en dus aanpassen.
Ik krijg voorlopig nog een foutmelding in de code: "variabele of End With niet gedefinieerd", er is geen With, maar wel een .xxxx dus denk ik dat het daar zit. hoop het zelf op te kunnen lossen  8)
Ik werk verder  ;)

Dank

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