[GPC] opgave 1: oplossingen

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Om heel eerlijk te zijn ben ik er door tijdsgebrek niet in geslaagd een goede oplossing neer te zetten.Ik ben tot diep in de nacht bezig geweest maar zie net het kleine foutje niet :( Ik ben er bijna. Niet dat jullie daar een boodschap aan hebben maar ja :), Ik ben 2 keer opnieuw begonnen omdat ik zoals gezegd door de code het algoritme niet meer zag. Ik heb natuurlijk wel een algoritme bedacht en zal dat met jullie bespreken. Als jury hebben we natuurlijk de nodige oplossingen gezien en ook de nodige verschillende uitvoer, wat erg leuk was soms. Ik zal ook de jury invoer & uitvoer bespreken. Ik hoop dat de gene die de opgave goed hadden hun strategie en algoritme uit willen leggen.

Zoals jullie allemaal wel gemerkt hebben was het een pittige opgave, die vooral door de vele mogelijkheden niet bruteforce, recht toe recht aan, of recursief op te lossen was. Ook met de jury input hebben we daar natuurlijk rekening mee gehouden :).

De strategie die ik gevolgd heb, en volgens mij velen met mij is de volgende:

Als je goed naar een rij kijkt. Is dat een rij van blokjes die aan of uit kunnen zijn. In het voorbeeld hebben we expres een lengte van 8 genomen om de overeenkomst met een byte nog beter op te laten vallen :). (max van 30 is ook niet willekeurig aangezien er vaak 32 bits in een integer passen ;) )Deze puzzel lijkt dan ook erg sterk op een bitpatroon en zo heb ik het ook benaderd. Ik heb natuurlijk een aantal van zulke puzzels opgelost en gekeken wat de beste taktiek is. Wat je in het begin doet is kijken welke blokjes je zeker in kunt vullen. En deze blokjes vul je dan ook in. Dan ga je kijken welke blokjes zeker leeg moeten blijven en je zorgt dat deze ook leeg blijven :)

Wat ik heb gedaan. Ik heb van alle mogelijkheden (als een veld 8 breed is passen er in de breedte 2 tot de 8-ste macht verschillende patronen) die ik met een simpel for loopje bereken. Het aantal enen bepaald en geordend op dit aantal opgeslagen. Als ik nu een patroon heb heb ik al ruim 60% procent van de mogelijke invoeren gefilterd. Van de mogelijkheden die dan nog over blijven bereken ik het patroon. Als dat berekende patroon overeenkomt met het patroon wat het moet zijn. Sla ik dat op bij de mogelijken voor die rij. Uiteindelijk heb ik dus een beperkte lijst met mogelijkheden over voor die rij. (sneller als dat het met bruteforcen zou lukken ;) ) Van deze lijst ga ik kijken welke blokjes overal aan zijn. Om dat ik deze mogelijkheden in integers heb opgeslagen is een simpele AND operatie genoeg. Het bitpatroon wat nu overblijft sla ik op met waarde 2. Dan doe ik op de mogelijkheden nog een OR om te kijken welke eventuele gevuld kunnen en belangrijker welke zeker niet.

Voordat ik aan de kolommen begin. Normaliseer ik die eerst. Ik ga kijken of een bepaalde column al aan het patroon voldoet en zo ja dan zet ik alle eventuele (met de waarde 1) op 0.

Dan ga ik alle mogelijkheden voor de kolommen af en volg hetzelfde patroon, mogelijkheden berekenen, normaliseren etc.

Als je geluk hebt ben je nu klaar, als je geen geluk hebt niet. :(
En natuurlijk hadden we een dergelijke ingewikkelde testcase dat het met deze taktiek niet altijd mogelijk was.
wat ik dan deed is nogmaals de mogelijkheden bepalen maar dan niet alleen van het vooraf gegeven patroon maar ook van de blokjes die al zeker zijn. Dat doe je weer met normaliseren, zowel rijen en kolommen etc.

Ik weet (bijna) zeker dat deze tacktiek werkt ik heb alleen geen tijd meer gehad om het te bewijzen :(. Maar het feit dat we een aantal goede inzendingen binnen hebben gehad bewijst dat de opgave zeker te doen was :)

JRobert zal de testset bespreken :)
succes met opgave 2 :)

Verwijderd

Aan mij om de testset te bespreken *D

De invoerbestanden die gebruikt zijn werden in een vaste volgorde getest. In die volgorde zal ik ze dan ook bespreken.

Om te beginnen 'Het Voorbeeld':
5 5
1
3
2 2
3
1
1
3
2 2
3
1

met als uitvoer:
code:
1
2
3
4
5
--#--
-###-
##-##
-###-
--#--

Deze was voor de meeste programma's erg makkelijk omdat hij symmetrisch is (zowel voor afmetingen als figuur) en hij werd natuurlijk gebruikt omdat hij in de opgave stond. De meeste hadden deze dan ook goed.

De tweede was 'De Lijn':
2 6
0
6
1
1
1
1
1
1

met als uitvoer:
code:
1
2
3
4
5
6
-#
-#
-#
-#
-#
-#

De lijkt eveneens eenvoudig, maar... dodelijk voor de meeste algoritmes >:). Door de breedte van 2, werkt je algoritme alleen op randvoorwaarden, bovendien is het een invoer die niet snel door de programmeur gebruikt zou worden. In het begin van de week liepen de meeste programma's hierop vast en ook werd hier meestal duidelijk als de assen waren verwisseld.

De derde was 'R': (wie zou die gemaakt hebben :z)
8 10
10
10
2 2
2 2
1 4
4 3
2 3
2
4
6
2 2
2 2
2 2
5
6
2 3
2 3
2 2

met als uitvoer:
code:
1
2
3
4
5
6
7
8
9
10
####----
######--
##---##-
##---##-
##--##--
#####---
######--
##--###-
##---###
##----##

Dit is de eerste wat grotere grid en gaat maximaal tot 2 lengtes per rij of kolom. Niet echt boeiend. Deze was vooral bedoeld om te zien of een algoritme werkte die over de volgende te lang deed ;).

En hier komt ie, de invoer waar de meeste programma's het erg moeilijk mee hadden (het programma dat het langste draaide was 2,5 uur (zonder resultaat) en het frustrerendse resultaat was een programma die deze invoer wist op te lossen op 1 blokje na!!!, de snelste was er nog net voor dat ik op de knop 'solve' had gedrukt :+).

Invoer 'De Kerk':
15 20
4 7
3 8
2 9
1 10
15
3 6
5 2 5
9 10
5 2 5
3 6
15
9
1 8
2 7
3 6
1 1
3 3 2
4 3 3
2 5 1
5
7
1 1 1
1 3 1
1 3 1
1 1
8
10
12
14
15
6 1 6
5 1 5
5 1 5
5 1 5
5 1 5

met als uitvoer:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#------#-------
###---###----##
####--###---###
##---#####----#
-----#####-----
----#######----
----#--#--#----
----#-###-#----
----#-###-#----
----#-----#----
---########----
--##########---
-############--
##############-
###############
######-#-######
#####--#--#####
#####--#--#####
#####--#--#####
#####--#--#####

Als je programma draaide op de eerste drie testinvoer bestanden dan lukt deze meestal ook wel. Alleen hier is het natuurlijk gewoon een kwestie van tijd :9. Bovendien zaten hier voor het eerst 3 lengtes per rij in.

Alsjeblieft, en veel plezier uiteraard met het testen van je eigen algoritme! Ik hoor het wel als er nog onduidelijkheden zijn.

  • Wokker
  • Registratie: September 2001
  • Laatst online: 16-09 06:17

Wokker

De avond wokkel

Is het ook niet zo als je een goed algoritme hebt geschreven dat je ook een plaatje kan ingeven. En dat je algorimte dan de uitvoer in cijfers krijg of zie ik dat verkeert ?

Het oneindige X 0


  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
Ok, mocht je er 1 gemaakt hebben die met 2 kleuren werkt (dus rood en zwart + wit), waarbij je de - als de andere kleur codeert, probeer dan deze maar eens te kraken:

# nog een beeldzoeker
# hoogte
20 28
# hoogte-getalletjes.
# positief = lengte zwart
# negatief = lengte rood
7 4
9 5
11 4
11 2
3 -5 4 -2 2 -2
3 3 4 -10
3 3 4 -12
3 1 3 -3 -6 -2
4 1 4 -3 -6 -2
3 1 3 2 -1 -6 -2
2 1 2 1 -5 -2
7 5 -1 1
5 6 1
7 7
5 4 3
7 3 3
5 2 3
-3 3 4
3 4
5 3
# breedte getalletjes
7
9
12 1 1
4 -1 9
4 -1 2 6 -1
4 -1 12 -1
4 -1 2 6 -1
4 -1 9
12 1 1
9
7
3
2 1
-1 1 1
-3 3
-3 6
-3 6
-2 3
1 -6 3
3 -7 3
5 -6 3
5 -6 3
3 -7 7
-7 8
-2 5
-7 3
-5 2 2
1

[ Voor 3% gewijzigd door Theswitch op 07-12-2014 13:53 ]


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Op dinsdag 04 december 2001 10:35 schreef jRobert het volgende:
Om te beginnen 'Het Voorbeeld':

De tweede was 'De Lijn':
De derde was 'R': (wie zou die gemaakt hebben :z)
Invoer 'De Kerk':
Geen tijd gehad dit weekend helaas om het zodanig om te bouwen dat hij mee kon doen,.. maar dit zijn mijn tijden die ik haal met de testcases:

voorbeeld: 0.000388 sec
de lijn: 0.000143 sec
'R': 0.004123 sec
de kerk: 0.01259 sec


Het ligt aan hoe je programma is opgebouwd natuurlijk, maar voor "de lijn" hoef je helemaal niets te doen. Als je routine eerst kijkt naar welke waardes hij bij voorbaat al kan invullen (waarbij het getal==breedte of hoogte, of getal==0) dan kunnen de twee hoogtes al worden ingevuld. Bij controle op de breedte kloppen het aantal ingevulde vakjes met de totale grootte van verticale parameters (namelijk 1) en kunnen deze ook worden ingevuld.. conclusie: hij is al klaar voordat hij begonnen is :)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 december 2001 15:06 schreef JayTaph het volgende:

[..]

Geen tijd gehad dit weekend helaas om het zodanig om te bouwen dat hij mee kon doen,.. maar dit zijn mijn tijden die ik haal met de testcases:

voorbeeld: 0.000388 sec
de lijn: 0.000143 sec
'R': 0.004123 sec
de kerk: 0.01259 sec
Het ligt aan hoe je programma is opgebouwd natuurlijk, maar voor "de lijn" hoef je helemaal niets te doen. Als je routine eerst kijkt naar welke waardes hij bij voorbaat al kan invullen (waarbij het getal==breedte of hoogte, of getal==0) dan kunnen de twee hoogtes al worden ingevuld. Bij controle op de breedte kloppen het aantal ingevulde vakjes met de totale grootte van verticale parameters (namelijk 1) en kunnen deze ook worden ingevuld.. conclusie: hij is al klaar voordat hij begonnen is :)
zijn aardige tijden geloof ik
maar over die lijn : daar had uiteraard niemand rekening meegehouden
de testcases zijn nu pas bekend :)

Doet iets met Cloud (MS/IBM)


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Op dinsdag 04 december 2001 15:10 schreef D2k het volgende:
maar over die lijn : daar had uiteraard niemand rekening meegehouden
de testcases zijn nu pas bekend :)
Tuurlijk, maar een beetje geoptimaliseerd programma gaat natuurlijk eerst eventjes checken of ie uberhaupt iets moet doen toch? (althans, ik wel) :P

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 december 2001 15:15 schreef JayTaph het volgende:

[..]

Tuurlijk, maar een beetje geoptimaliseerd programma gaat natuurlijk eerst eventjes checken of ie uberhaupt iets moet doen toch? (althans, ik wel) :P
uiteraard is dat wel handig
ik had het zelf wel al afgevangen dat als er allemaal nullen werden ingevoerd dat ie dan gelijk klaar was

* D2k noteert dit stiekum voor de volgende testset

Doet iets met Cloud (MS/IBM)


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
Khad (na enigszins een optimalisatie, wat op zich niet echt ver ging)
Symmetrische 10 ms
Lijn 0 ms
R 10 ms
Kerk 30 ms

Overigens waren er cases waarbij mijn algoritme niet alles op zou lossen (en vrij slordig geprogrammeerd)

Btw, Xalista: Jouw programma is echt snel ! :)

  • Marcj
  • Registratie: November 2000
  • Laatst online: 16-09 12:08
Nu zie ik wat ik fout heb gedaan |:( x en y omgekeert :(
Nu moet ik zeker het programma opnieuw intypen :P

edit: laat maar, er zitten nog meer fouten in, ik geloof dat mijn poging is mislukt was ;(

Maar toch wil ik dit programma draaiende krijgen (voorlopig is er toch nog geen nieuwe opdracht ;))

Verwijderd

Op dinsdag 04 december 2001 16:09 schreef Marcj het volgende:
Nu zie ik wat ik fout heb gedaan |:( x en y omgekeert :(
Nu moet ik zeker het programma opnieuw intypen :P
Hmm, ik geloof ik ook...(heb de oplossing nu niet bij de hand, thuis ff nakijken). Maar het ligt op het puntje van mijn tong om te zeggen, dat krijg je met die duidelijke voorbeelden die hier gegeven worden (symmetrisch...), maar dat ga ik niet schrijven, ik vind het te laag om de mensen die hier zoveel tijd insteken (de organisatoren en bedenkers) op die manier af te gaan zeiken.
Daarom: Ga zo door, het is een leuke wedstrijd en het levert leuke/zinvolle discussies op!


Joost

  • Marcj
  • Registratie: November 2000
  • Laatst online: 16-09 12:08
Krijg je eigenlijk geen punten voor je bedachte algoritme? Daarmee kan ik dan m'n minpunten opvangen ;)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Is er iemand die zijn/haar oplossingen es wil publiceren ?? Ben namelijk errug benieuwd :)

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
Op dinsdag 04 december 2001 16:47 schreef MisterData het volgende:
Is er iemand die zijn/haar oplossingen es wil publiceren ?? Ben namelijk errug benieuwd :)
Kvind het prima.. heb alleen geen server ofzo om hem te publiceren ... Tenminste, als je interesse hebt..
Overigens staat in de thread van opgave 1 een link naar de oplossing van xalista die een HEEEEEL stuk minder lines bevat en een HEEEEL stuk meer commentaar!

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
We houden de opgaven opzettelijk vaag, en de voorbeeld invoer verraadt natuurlijk niet de truukjes die je in het algoritme uit moet halen.
Een kenmerk van een programmeur is dat hij/zij uit een vage omschrijving het probleem kan destilleren.

Dat het niet al te vaag was bewijst het feit dat we een aantal goede inzendingen hebben gehad. Dat het ook te vaag kan hebben we vanmiddag gezien :( .

We zullen voortaan iig beter opletten..

Verwijderd

Ik wil jullie (de organisatoren) vooral niet ophaasten hoor, want ik heb erg veel respect voor het feit dat jullie dit uberhaupt organiseren, maar ik vroeg me af of er eigenlijk nog statistieken over de inzendingen gepost worden. Ik denk dan met name aan:

-Personen met een goede inzending
-Aantal foute inzendingen
-Top drie van inzendings Datum/Tijdstip
-Top drie van efficientie van het algoritme
-Eventuele opmerkingen over schoonheid/creativiteit van de algoritmes.

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 16-09 15:41

Tim Schuhmacher

abasios

Xaliste - zet jij jouw source ook online? Jij had het recursief gedaan toch. Dat was mijn plan ook, maar dat lukte niet.


'niet bruteforce, recht toe recht aan, of recursief op te lossen was.'

Waarom niet?

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Op dinsdag 04 december 2001 17:03 schreef Xalista het volgende:
Ik wil jullie (de organisatoren) vooral niet ophaasten hoor, want ik heb erg veel respect voor het feit dat jullie dit uberhaupt organiseren, maar ik vroeg me af of er eigenlijk nog statistieken over de inzendingen gepost worden. Ik denk dan met name aan:

-Personen met een goede inzending
-Aantal foute inzendingen
-Top drie van inzendings Datum/Tijdstip
-Top drie van efficientie van het algoritme
-Eventuele opmerkingen over schoonheid/creativiteit van de algoritmes.
De bovenste 3 : als het goed is gaat dennis dat doen. De overigen: nee daar hebben we nog geen tijd voor gehad. Het is nl een shitload aan werk wat je je over je afroept. (en dat hebben we onderschat)

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Op dinsdag 04 december 2001 17:14 schreef Tim Schuhmacher het volgende:
Xaliste - zet jij jouw source ook online? Jij had het recursief gedaan toch. Dat was mijn plan ook, maar dat lukte niet.


'niet bruteforce, recht toe recht aan, of recursief op te lossen was.'

Waarom niet?
Bruteforcen, tjsa het is wel geinig. Maar 1 of ander slim algoritme is natuurlijk uitdagender dan een 13 in een dozijn bruteforce.

Verwijderd

Op dinsdag 04 december 2001 17:14 schreef Tim Schuhmacher het volgende:
Xaliste - zet jij jouw source ook online? Jij had het recursief gedaan toch. Dat was mijn plan ook, maar dat lukte niet.


'niet bruteforce, recht toe recht aan, of recursief op te lossen was.'

Waarom niet?
Er staat in link naar een rar die de mijn code en exe bevat in de thread van de eerste opgave (ergens achteraan)

Recht toe recht aan bruteforce kon je de opgave niet oplossen, omdat het dan bijna oneindig veel tijd zou kosten voor een grid van 30x30 (Je programma is dan dus wel correct, maar praktisch niet te gebruiken, of te controleren)

Ik ga vanavond denk ik nog een docje typen over recursie, backtracken, en brach-and-cut strategieen. Zodra ik iets heb waar ik zelf tevreden over ben post ik et.

Verwijderd

Op dinsdag 04 december 2001 17:20 schreef wasigh het volgende:

[..]

Bruteforcen, tjsa het is wel geinig. Maar 1 of ander slim algoritme is natuurlijk uitdagender dan een 13 in een dozijn bruteforce.
Nou, ik vond mijn bruteforce (branch-and-cut) nog redelijk uitdagend. Vooral als je gaat proberen om al zo snel mogelijk te cutten.

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 16-09 15:41

Tim Schuhmacher

abasios

ok thnx, ben nu aan het downloaden

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 december 2001 17:19 schreef wasigh het volgende:

[..]

De bovenste 3 : als het goed is gaat dennis dat doen. De overigen: nee daar hebben we nog geen tijd voor gehad. Het is nl een shitload aan werk wat je je over je afroept. (en dat hebben we onderschat)
de bovenste 3 ga ik doen
de rest denk ik niet
is te veel werk helaas

Doet iets met Cloud (MS/IBM)


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Op dinsdag 04 december 2001 10:35 schreef jRobert het volgende:
Aan mij om de testset te bespreken *D
code:
1
2
3
4
5
--#--
-###-
##-##
-###-
--#--


code:
1
2
3
4
5
6
-#
-#
-#
-#
-#
-#


code:
1
2
3
4
5
6
7
8
9
10
####----
######--
##---##-
##---##-
##--##--
#####---
######--
##--###-
##---###
##----##
Ik kreeg het bericht dat mijn progsel foutieve uitvoer gaf. Maar de bovenstaande afbeeldingen worden hier correct gegenereerd :?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

hmmz

ik kreeg echt 0 oplossingen bij de lijn

<Edit>
heb ut gedubbel checked gister zelfs
ga nog 1 keer kijken dan

Doet iets met Cloud (MS/IBM)


  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
Mijn algorithme (die je in perl terug kan vinden op http://medz.org/beeldzoeker.tar.gz ) heb ik ongeveer zo opgebouwd:

Ik heb een matrix aangemaakt, ter groote van de oplossing.
Ik initieer elke plek met het getal 7 (3 bits aan).
Dit is de zogenoemde mask-rij. een 7 betekend dat er zowel een lege, een zwarte als een rode kan staan op die plek.


Vervolgens heb ik een functie geschreven, die als input heeft
1) een mask-rij
2) de zijkant die erbij hoort (b.v 1 3 4)

Deze functie gaat vervolgens alle mogelijke vullingen proberen die bij die 1 3 4 horen, rekening houdend met de mask-rij. Als daar instaat dat b.v. op de 1e plek een leeg hokje staat, gaat deze de 1 3 4 rij proberen met op de 1e plek een leeg hokje.

Als mogelijke vullingen behorende bij die mask gedaan zijn, ORt hij al deze resultaten, wat weer een nieuwe mask opleverd, welke meer restricites bevat dan de orginele maskrij. Deze wordt teruggeplaats in het diagram

Op die manier ga je alle horizonale en verticale rijen af.

De puzzel is klaar als elk getal in de matrix nog maar 1 vulling kan bevatten (een 1,2 of 4 in mijn programma).

Ik hoop dat dit wat duidelijk is, zo niet, vraag maar.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

invoer van de lijn
2,6
1,1,1,1,1,1
0,6

of doe ik het fout?

Doet iets met Cloud (MS/IBM)


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Op dinsdag 04 december 2001 17:48 schreef D2k het volgende:
invoer van de lijn
2,6
1,1,1,1,1,1
0,6

of doe ik het fout?
Damn, zie ik hier dat ik de verkeerde "versie" had opgestuurd.. Had meerdere versies en de voorlaatste pikte um inderdaad niet! |:(

edit:

Hier is de correcte versie.

Het verschil is dat ie minder "dynamisch" is

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 december 2001 17:51 schreef BalusC het volgende:

[..]

Damn, zie ik hier dat ik de verkeerde "versie" had opgestuurd.. Had meerdere versies en de voorlaatste pikte um inderdaad niet! |:(

edit:

Hier is de correcte versie.

Het verschil is dat ie minder "dynamisch" is
hmmz dan had ik dus wel gelijk :)
maar ik moet ff kijken wat we hier mee gaan doen
wij hebben eigenlijk als jury geen fout gemaakt (bot gezegd)
maar ik overleg wel ff

Doet iets met Cloud (MS/IBM)


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Hmm, die van Xalista is wel errug snel :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Dit bericht is verwijderd; heb de oplossing zelf al gevonden

Ik had ff iets geprobeerd emt Xalista's prog maar dacht dat ie nie klopte. Bleek dat ik eerst de x en dan de y kolom had ingevoerd |:(

Sorry voor deze ruimteverspilling :)

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 december 2001 18:21 schreef MisterData het volgende:

[..]

Kun je em ff meelen ??? Dan zet ik em wel op m'n server en zet ik hier de link voor andere mensen :)
wat wil je hebben ??

Doet iets met Cloud (MS/IBM)


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Nix heb het al veranderd; zag ineens dat Xalista zijn/haar prog had gepubliceerd :) En verkeerde quote, dus heb het al verwijderd :)

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 december 2001 18:39 schreef MisterData het volgende:
Nix heb het al veranderd; zag ineens dat Xalista zijn/haar prog had gepubliceerd :) En verkeerde quote, dus heb het al verwijderd :)
k :)
np

Doet iets met Cloud (MS/IBM)


  • Nikel
  • Registratie: Juli 2000
  • Niet online
Op dinsdag 04 december 2001 17:48 schreef Theswitch het volgende:
Mijn algorithme (die je in perl terug kan vinden op http://medz.org/beeldzoeker.tar.gz ) heb ik ongeveer zo opgebouwd:

Ik heb een matrix aangemaakt, ter groote van de oplossing.
Ik initieer elke plek met het getal 7 (3 bits aan).
Dit is de zogenoemde mask-rij. een 7 betekend dat er zowel een lege, een zwarte als een rode kan staan op die plek.


Vervolgens heb ik een functie geschreven, die als input heeft
1) een mask-rij
2) de zijkant die erbij hoort (b.v 1 3 4)

Deze functie gaat vervolgens alle mogelijke vullingen proberen die bij die 1 3 4 horen, rekening houdend met de mask-rij. Als daar instaat dat b.v. op de 1e plek een leeg hokje staat, gaat deze de 1 3 4 rij proberen met op de 1e plek een leeg hokje.

Als mogelijke vullingen behorende bij die mask gedaan zijn, ORt hij al deze resultaten, wat weer een nieuwe mask opleverd, welke meer restricites bevat dan de orginele maskrij. Deze wordt teruggeplaats in het diagram

Op die manier ga je alle horizonale en verticale rijen af.

De puzzel is klaar als elk getal in de matrix nog maar 1 vulling kan bevatten (een 1,2 of 4 in mijn programma).

Ik hoop dat dit wat duidelijk is, zo niet, vraag maar.
Dit is naar mijn idee de beste oplossing. Erg voor de hand liggend vindt ik achteraf, maar ik was er niet opgekomen...

Gaat het trouwens met jouw prog goed als er meer dan 1 mogelijke uitvoer is? (als dat niet zo is is dat natuurlijk makkelijk te fixen maar ik was benieuwd of je daar aan had gedacht)

  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
Op dinsdag 04 december 2001 19:01 schreef Nikel het volgende:

[..]

Dit is naar mijn idee de beste oplossing. Erg voor de hand liggend vindt ik achteraf, maar ik was er niet opgekomen...

Gaat het trouwens met jouw prog goed als er meer dan 1 mogelijke uitvoer is? (als dat niet zo is is dat natuurlijk makkelijk te fixen maar ik was benieuwd of je daar aan had gedacht)
Het lastigste is nog om alle permutaties te maken waar je rekening houdt met de mask.

Als er meer als 1 uitvoer is, betekend dat er geen 1-duidige oplossing is en zal deze geen oplossing vinden. Maar ik heb dit proggel dus bijna 3 jaar geleden geschreven en heb me niet aan de opdracht hier exact gehouden. Ik ga uit van 1 oplossing.

heb je m'n programma uitgeprobeerd?

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Nee, niet uitgeprobeerd, ik zal nu even op een linuxbak inloggen om het eens uit te pakken en te proberen.

Als ie dus alle rijen en kolommen heeft geprobeerd moet ie gewoon alle rijen waarin nog "grijze" vakjes staan even door een functie heengooien die voor die rij een mogelijke oplossing genereerd, en die functie heb je al bijna, maargoed dat was niet moeilijk te verzinnen :).

Dat maken van alle permutaties is dus waar ik het in eerste instantie maar even opgaf. Je kunt gewoon dom alle permutaties met het gegeven totaal aantal zwarte vakjes genereren en daarna filteren op zowel de gegeven getallen die bij die rij horen als op de mask die je hebt, maar het kan vast mooier.

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Perl ziet er voor mij helaas nog altijd meer uit als matrix-code dan als iets wat ik kan lezen :). Ik zal hem eens in ultraedit openen en kijken of ik hem dan kan snappen (syntax highlighting doet soms wonderen).

2e poging, got doet vaag...

  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
Op dinsdag 04 december 2001 19:15 schreef Nikel het volgende:
Perl ziet er voor mij helaas nog altijd meer uit als matrix-code dan als iets wat ik kan lezen :). Ik zal hem eens in ultraedit openen en kijken of ik hem dan kan snappen (syntax highlighting doet soms wonderen).

2e poging, got doet vaag...
Ik moet zeggen dat de code die ik geschreven had niet echt "leesbaar" was. 't was meer een oefening om rijen, arrays en referenties te oefenen. Ik weet niet of ie echt goed te begrijpen is hoor. Een uitvoer van mijn programma met tussenliggende beelden zeg maar (de question.dat):

loop 1 horizontaal

? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?

nog niks gedaan

loop 1 verticaal

? ? * ? ?
* * * *
? ? ? ? ?
? ? ? * ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?

? ? ? ? ?

alle horizontale lijnen zijn geweest, zoals je ziet kan lijn 2 (2 2) direct ingevuld worden.

loop 2 horizontaal
? ? * * ?
* * * *
* ? ? *
? ? * ?
* *
*
?
?

+

alle verticale, doordat je de 2e regel wist kan daar rondom ook al meer bekend zijn.

loop 2 verticaal

? * * ?
* * * *
* *
* ? * ?
* *
*
*
*

+

loop 3 horizontaal

* * * ?
* * * *
* *
* * ?
* *
*
*
*

+


loop 3 verticaal

* * *
* * * *
* *
* * *
* *
*
*
*

+


Hopelijk helpt dit kwa inzicht.

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Bedankt voor je uitleg, ik kon nog niet helemaal zien waarom je het meerdere keren moet herhalen, maar nu is het helemaal helder.

  • Theswitch
  • Registratie: Juli 2000
  • Laatst online: 22:37
Op dinsdag 04 december 2001 19:39 schreef Nikel het volgende:
Bedankt voor je uitleg, ik kon nog niet helemaal zien waarom je het meerdere keren moet herhalen, maar nu is het helemaal helder.
De spaties waren een beetje weggevallen zie ik net. is 't gelukt om 't programma op de linuxbak te draaien?

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Hij doet het perfect. Maar waarom staan op sommige plaatsen *-jes en op andere +-jes?

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Ohw dat zijn verschillende kleuren.

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
De oplossing van Theswitch had ik ook zo bedacht en uitgewerkt. Voor wie het na wil lezen: http://www.29a.nl/bigtree/gotpuzzel1
Het programma zelf had ik in Delphi gemaakt, maar was lang niet zo snel als de tijden die in het wedstrijd-topic te lezen waren. Nou moet ik zeggen dat er nog een hoop te optimaliseren viel. Maar hij kwam feilloos door de test. Mission accomplished. Nou wachten op (een verbeterde!) deel 2 van de wedstrijd.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Wie heeft de oplossing in Java geschreven ?? Ben er tot nu toe nog niet veel tegengekomen :(

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
Op dinsdag 04 december 2001 21:27 schreef MisterData het volgende:
Wie heeft de oplossing in Java geschreven ?? Ben er tot nu toe nog niet veel tegengekomen :(
Mjah, ik wel .. alleen heb geen server oid om hem online te zetten ..
Overigens, de code valt onder het kopje "OO? Wat is dat?"

Verwijderd

OO staat denk ik voor Object Oriented. Afgeleide van de officiele benaming: OOP (Object Oriented Programming)

Ps kan je je source ff opsturen naar: jantje126@hotmail.com ??

Thnx
Op woensdag 05 december 2001 09:51 schreef Dash2in1 het volgende:

[..]

Mjah, ik wel .. alleen heb geen server oid om hem online te zetten ..
Overigens, de code valt onder het kopje "OO? Wat is dat?"

Verwijderd

[muggenzift mode]
citaat: Een kenmerk van een programmeur is dat hij/zij uit een vage omschrijving het probleem kan destilleren.
Reactie:
Wrong!! Dit is de taak van een Systeem analyst niet van een programmeur. Een programmeur werkt aan de hand van Modellen en zogenaamde FO & TO's of SRS (FO = Functioneel Ontwerp, TO = Technisch Ontwerp, SRS = Software Requirements Specification)
Het is wel een bijkomend voordeel als een programmeur ertoe in staat is.
[/muggenzift mode]

Verder, gaan jullie ook nog op de website de beste oplossingen posten??
Misschien leuk voor de mensen die willen zien hoe zo'n prog in elkaar zit en wat de oplossing is voor het probleem.
Op dinsdag 04 december 2001 16:54 schreef wasigh het volgende:
We houden de opgaven opzettelijk vaag, en de voorbeeld invoer verraadt natuurlijk niet de truukjes die je in het algoritme uit moet halen.
Een kenmerk van een programmeur is dat hij/zij uit een vage omschrijving het probleem kan destilleren.

Dat het niet al te vaag was bewijst het feit dat we een aantal goede inzendingen hebben gehad. Dat het ook te vaag kan hebben we vanmiddag gezien :( .

We zullen voortaan iig beter opletten..

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op woensdag 05 december 2001 10:48 schreef Silverlinx het volgende:
Verder, gaan jullie ook nog op de website de beste oplossingen posten??
Misschien leuk voor de mensen die willen zien hoe zo'n prog in elkaar zit en wat de oplossing is voor het probleem.
[topic=333529/1/25]

daarin worden op het eind oplossingen gepost :)

Doet iets met Cloud (MS/IBM)


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Quote van Dusty uit eerste topic:
Ach, het is niet een echt moeilijk probleem. Heb al een oplossing bedacht terwijl ik naar huis reed, nu alleen nog de tijd zien te vinden om het te maken.
En om het lekker interresant te maken: Mijn oplossing zal door NIEMAND anders bedacht worden.
Ik ben *reuze* benieuwd wat Dusty's oplossing is.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Verwijderd

Ach, het is niet een echt moeilijk probleem. Heb al een oplossing bedacht terwijl ik naar huis reed, nu alleen nog de tijd zien te vinden om het te maken.
En om het lekker interresant te maken: Mijn oplossing zal door NIEMAND anders bedacht worden.
Hij heeft uiteindelijk nix ingeleverd. Misschien is niemand op zijn methode gekomen, omdat die gewoon fout was ;)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 05 december 2001 15:00 schreef bigtree het volgende:
Quote van Dusty uit eerste topic:
Ik ben *reuze* benieuwd wat Dusty's oplossing is.
Heb nog steeds geen tijd gehad om het volledig in te tikken hoe mijn logritme werkt in iedergeval met de volgende formule:

a:=(((x+2)-s)-n)

x = breedte of hoogte (Rij of Kolom)
s = totaal aantal vakken ingevuld. ( 2,2 = 4 vakken dus)
n = aantal verschillende vlakken.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 05 december 2001 15:10 schreef Xalista het volgende:
Hij heeft uiteindelijk nix ingeleverd. Misschien is niemand op zijn methode gekomen, omdat die gewoon fout was ;)
Nee hoor, Methode is prima, Ik heb niets ingeleverd omdat ik gewoon weg geen tijd heb gehad om mee te doen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op woensdag 05 december 2001 09:51 schreef Dash2in1 het volgende:

[..]

Mjah, ik wel .. alleen heb geen server oid om hem online te zetten ..
Overigens, de code valt onder het kopje "OO? Wat is dat?"
Zou je die es naar mij willen meelen (misterdata_00@hotmail.com) Ik wil em wel online zetten zodat iedereen hem kan zien :)

Verwijderd

Op woensdag 05 december 2001 15:33 schreef dusty het volgende:

[..]

Nee hoor, Methode is prima, Ik heb niets ingeleverd omdat ik gewoon weg geen tijd heb gehad om mee te doen.
Heb je wel tijd om iets meer van de sluier over je methode op te lichten???

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 05 december 2001 15:48 schreef Xalista het volgende:
Heb je wel tijd om iets meer van de sluier over je methode op te lichten???
Zodra ik tijd heb om het gehele methode in te tikken doe ik het en dan post ik um ook..

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1