In de NRC staat elke dag een sudoku. Er is een wereld van verschil tussen de aanpak van mijn vrouw en die van mij:
- Mijn vrouw noteert in elk vakje (rechtboven) de getallen die daar mogelijkerwijs kunnen staan.
- Ik zoek net zolang door totdat ik een plek gevonden heb waar slechts 1 getal kan staan.
Dit bracht mij tot de volgende vraag: leidt mijn aanpak tot een oplossing, voor elke NRC sudoku? Bestaat er altijd 1 plek, waar slechts 1 getal kan staan?
De vervolgvraag is dan: aan welke eisen moet de oplossing voldoen?
- Ik wil een sudoku eenvoudig kunnen “overtypen” (in bijvoorbeeld Excel). Deze Excel moet vervolgens opgepakt en verwerkt worden.
- Ik wil de oplossing van de sudoku kunnen narekenen op papier. De output van de verwerking is dus niet alleen een opgeloste sudoku; ook de volgorde waarin elk vakje gevuld kan worden, moet meegeleverd worden.
Ik wil er een dienst van kunnen maken. NRC lezers moeten de sudoku kunnen uploaden, waarna zij de oplossing via email ontvangen.
Alteryx
Het zal jou niet verbazen dat ik Alteryx heb gekozen, omdat Alteryx kan voldoen aan alle eisen die hierboven zijn gesteld:
- Het uitlezen van een Excel sheet is standaard functionaliteit binnen Alteryx.
- Het oplossen van een sudoku blijkt mogelijk middels een zogenaamde “iteratieve” macro. Denk hierbij aan proces waarbij de output van stap X, de input is voor stap X+1. Elke waarde die gevuld wordt, beperkt immers het aantal mogelijkheden van de overige cellen. En wanneer we dat proces herhalen, komen we uiteindelijk bij de oplossing uit.
- We gaan bijhouden in welke stap, welk vakje gevuld is. Dit leveren we (naast de oplossing) mee in een PDF.
- Middels een zogenaamde “App” regelen we dat een gebruiker een Excel sheet kan selecteren. En nadat de gebruiker een emailadres heeft ingevuld, lossen we de sudoku op, waarna de PDF via de email wordt verstuurd.
De App ziet er binnen Alteryx als volgt uit:
Het gaat om deze puzzel:
En de PDF ziet er als volgt uit:
Hoe ben ik dit probleem aangevlogen?
Het opknippen van een probleem in deelproblemen is zeker mogelijk binnen Alteryx. Er zijn drie stappen te onderscheiden: het preparen van de Excel sheet, het oplossen van de puzzel, en tot slot, het genereren van de output. Voor elk deelprobleem kan een Macro worden gemaakt. Om nog duidelijker het doel van een macro aan te geven, heb ik bij alle drie macro’s het icoon aangepast.
De oplossing van de puzzel
Het rekenen met 9 rijen en kolommen is lastig. Het is handiger om per rij, per kolom te weten welke waarde is ingevuld. We beginnen bovenaan/links met nummeren (=rij 1, kolom 1).
We moeten voor elk vakje weten, in welk “Element” die zit. Zo is (1,1) is onderdeel van Rij 1, Kolom 1, en Blok 1.
Er zijn in totaal 31 unieke Elementen (9 rijen, 9 kolommen, 9 witte blokken en 4 grijze blokken).
We moeten op zoek naar “Elementen”, waar nog slechts 1 plek over is, voor 1 specifieke waarde.
Als we die hebben gevonden, dan voegen we die toe aan de “puzzel”, en beginnen we weer opnieuw.
We zijn klaar, als er 81 ingevulde plekken zijn.
Uiteindelijk blijkt deze Iteratieve Macro geschikt om de sudoku op te lossen:
De oplossing zoals die hierboven staat, is niet heel eenvoudig. Maar als ik kijk naar het plaatje, dan is dat vele malen eenvoudiger uitlegbaar dan de oplossingen die ik op Internet heb kunnen vinden. Een voorbeeld: http://norvig.com/sudoku.html
Wat kan beter?
Het is mogelijk om de oplossing naar een nog hoger plan te tillen:
- De App lost nu de sudoku’s uit de NRC op. Met een kleine aanpassing is het mogelijk om ook reguliere sudoku’s op te lossen.
- De presentatie van de oplossing kan beter. Hier zijn zeker handvatten voor in Alteryx. De grijze vakken zouden bijvoorbeeld via “Column rules” aangemaakt kunnen worden.
- Beter testen. Ik heb in totaal 4 sudoku’s overgenomen vanuit de krant, en elke sudoku bleek oplosbaar. Er zat ook een sudoku bij uit de zaterdagkrant, waarvan ik vermoed dat deze net iets moeilijker is dan de wekelijkse sudoku’s.
Alternatieve oplossing
Stel, ik had Alteryx niet tot mijn beschikking gehad. Dan was ik uiteraard gaan kijken in mijn gereedschapskist, en was ik uitgekomen bij een SQL Server database.
M.b.t. de preparatie van de puzzels:
- Elke puzzel had ik opgenomen in een tekstbestand. Tekstbestanden zijn relatief eenvoudig in te lezen in een database (BULK INSERT).
- Had ik ervoor gekozen om Excelsheets te gebruiken voor de puzzels, dan had ik een SSIS package moeten maken, die de inhoud van een Excelsheet in een tabel plaatst.
M.b.t. het oplossen van de sudoku:
- Het was zeker mogelijk geweest om de oplossing in SQL Server te realiseren. Elke join die hierboven in Alteryx wordt getoond, zou een view in SQL Server zijn geworden. Echter, “view op view op view” levert een oplossing op die moeilijk overdraagbaar is.
- Het iteratieve deel had wellicht opgelost kunnen worden binnen SQL Server (CTE). Gegeven de complexiteit had ik echter gekozen voor een eenvoudige loop. “Indien de puzzel nog niet is opgelost, zoek naar cellen met 1 mogelijke waarde, en voeg die toe aan de oplossing”. En herhaal die loop, totdat de sudoku is opgelost.
M.b.t. de output:
- SQL Server biedt de mogelijkheid om CSV bestanden aan te maken. Ik had er twee moeten maken: 1 voor de oplossing, en 1 voor het stappenplan.
- Het mailen van de oplossing was mogelijk geweest. Het is immers mogelijk om in SQL Server een mailaccount te configureren, en vervolgens mails met bijlagen te versturen.
- Had de opmaak er spik-en-span uit moeten zien, dan was een extra tool noodzakelijk. Denk hierbij aan SSRS of Tableau.
Conclusie: Alteryx is in te zetten om complexe problemen op te lossen.
In deze blog heb ik willen aantonen dat Alteryx geschikt is om complexe problemen op te lossen. Middels macro’s zijn problemen op te knippen in deelproblemen. De mogelijkheid om elke tool in Alteryx te voorzien van een logische beschrijving, draagt bij aan de overdraagbaarheid van een eventuele complexe oplossing. De oplossing is eenvoudig “bij de eindgebruiker” te krijgen: maak een App, publiceer die op de Gallery, en de oplossing is voor iedereen beschikbaar!
Het elegante aan deze Alteryx oplossing, is dat alles binnen 1 tool is gerealiseerd. Het is dus niet nodig om verschillende tools in te zetten om een probleem op te lossen. De toolset van Alteryx is zeer breed. Voor dit probleem hebben we gebruik moeten maken van de Data preparatie, Macro’s en Reporting tools. Deze tools vormen slechts een kleine greep uit de complete set aan tools die Alteryx te bieden heeft!
Mocht jij geïnteresseerd zijn in de mogelijkheden die Alteryx nog meer biedt, neem dan gerust contact met ons op!