Een paar mensen laten deze ronde een imposante verbetering zien
Of je stuurt een veel makkelijker veld 
Volgens mij was dit de 8e ronde, dus nu is het nog wachten op de resultaten van Onbekend
Ik hoop op een top5, maar gezien de gigantische berg fouten die mijn programma gemaakt heeft vrees is dat dat er niet in gaat zitten. Maar als ik progressie heb ten opzichte van de vorige contest waar ik aan meedeed (dat was bejeweld, en ik was de laatste met valide uitvoer), dan ben ik wel tevreden
Volgens mij was dit de 8e ronde, dus nu is het nog wachten op de resultaten van Onbekend
Ik hoop op een top5, maar gezien de gigantische berg fouten die mijn programma gemaakt heeft vrees is dat dat er niet in gaat zitten. Maar als ik progressie heb ten opzichte van de vorige contest waar ik aan meedeed (dat was bejeweld, en ik was de laatste met valide uitvoer), dan ben ik wel tevreden
Helaas had ik deze week geen tijd om nog iets te veranderen dus verder als wat willekeurig schieten ben ik niet gekomen. Waarschijnlijk zullen m'n velden wel weer redelijk pittig geweest zijn.
Einduitslag programmeervuur zeeslag
Scores:
Plaats | Speler | ID | Score | |
---|---|---|---|---|
1 | _js_ | a3195f78 | 169 | |
2 | JFeitsma | 61887c61 | 144 | |
3 | Skier | 17473a3a | 97 | |
4 | Soultaker | 566c4891 | 96 | |
5 | Bolukan | 02bf67f1 | 96 | |
6 | Janoz | b41023eb | 68 | |
7 | dcm360 | 10912146 | 64 | |
8 | Jegorex | e678672e | 42 | |
9 | AlainS | 278d4158 | 40 | |
10 | - peter - | c9e0fd74 | 40 | |
11 | cfern | d0c166ea | 32 | |
12 | Site.to.Make | 7639a463 | 2 | |
13 | berktwist | e05a92c9 | -21 | |
14 | Sv3nz0r | 9a3c3e36 | -32 | |
15 | gvdh | 80d1ee51 | -36 | |
16 | Rainmaker1987 | d17aa92b | -42 | |
17 | Onbekend | cdc23a2b | -43 | |
18 | hostname | 8ecb0d8e | -47 | |
19 | Otherside1982 | aa436ceb | -73 | |
20 | qanar | c903959b | -74 | |
21 | zwippie | f9975bfc | -80 | |
22 | t.coenraad | e9a1652c | -130 | |
23 | BSTNjitRam | bdf8812e | -156 | |
24 | D2k | 8708f389 | -156 |
Dankzij de slimmere spelers hebben we veel meer ronden kunnen spelen dan de vorige keren en dit aantal ligt ver boven mijn verwachting.
De top 2 ligt ver van de rest vandaan, en de winnaar van deze programmeervuur is overduidelijk: _js_
Gefeliciteerd!
Ik bedank iedereen die in zijn vrije uurtjes een zeeslagspeler in elkaar hebben gezet en hier aan de programmeervuur hebben meegedaan.
Met een totaal van 26 deelnemers vond ik het ook leuk om dit te organiseren, en heb er heel veel van geleerd.
De broncodes (met gebruiksaanwijzing) zal ik in de loop van de week online zetten.
Edit: Voor de mensen die een analyze willen uitvoeren heb ik alle logs in een zip-bestand gezet:
Speel ook Balls Connect en Repeat
Wauw dat was spannend voor positie 3,4 en 5
proficiat aan 1 en 2. dat is nog een heel groot verschil. Ik zou wel eens willen weten wat jullie slimmer doen
Mijn AI was redelijk eenvoudig. Eerst kijken of het een gekend veld was. Op het einde kende mij history 668 velden. (Ik heb alle velden van de testrondes geimporteerd)
Daarna een redelijk eenvoudige en snelle logica om een schot te bepalen.
en daarna maximum van 3 seconden gebruiken voor een brute force oplossing.
Deze berekende eerst alle mogelijke positie van het schip van 5 groot. dan werden de plaatsen doorgegeven aan alle cpu cores die ik ter beschikking had (namelijk 2) en werd er geprobeerd om de overige schepen te plaatsen.
Per game ID werd er ook bijgehouden welke locatie van een schip van 5 lang al was doorgerekend en niet mogelijk was. Dit maakte het mogelijk dat voor de meeste velden een mogelijk oplossing was gevonden na 5 schoten.
@Onbekend bedankt voor toffe competitie het was zeer tof en de volgende keer doe ik terug mee.
proficiat aan 1 en 2. dat is nog een heel groot verschil. Ik zou wel eens willen weten wat jullie slimmer doen
Mijn AI was redelijk eenvoudig. Eerst kijken of het een gekend veld was. Op het einde kende mij history 668 velden. (Ik heb alle velden van de testrondes geimporteerd)
Daarna een redelijk eenvoudige en snelle logica om een schot te bepalen.
en daarna maximum van 3 seconden gebruiken voor een brute force oplossing.
Deze berekende eerst alle mogelijke positie van het schip van 5 groot. dan werden de plaatsen doorgegeven aan alle cpu cores die ik ter beschikking had (namelijk 2) en werd er geprobeerd om de overige schepen te plaatsen.
Per game ID werd er ook bijgehouden welke locatie van een schip van 5 lang al was doorgerekend en niet mogelijk was. Dit maakte het mogelijk dat voor de meeste velden een mogelijk oplossing was gevonden na 5 schoten.
@Onbekend bedankt voor toffe competitie het was zeer tof en de volgende keer doe ik terug mee.
don't take life to seriously, you won't survive it anyway
Hm, 7e valt me nog wel mee 
Wat me wel weer opvalt is dat mn code weer herhaaldelijk op hetzelfde vakje is gaan schieten, wat met de controle op gebruikte schoten in theorie niet zou mogen gebeuren. Daar kijk ik morgen nog even naar (om van te leren), en ik zal morgen ook even kijken of ik mn code kan opschonen (hele blokken code staan er nog als commentaar bij te staan) en online plaatsen.
En ik vergeet het zelfs: gefeliciteerd _js_!
Ik twijfelde ook nog om een schip van 4 eerst singlecore te berekenen (en dat had met de moeilijkste velden echt voordeel gegeven), maar dat heb ik er maar uitgelaten.
Wat me wel weer opvalt is dat mn code weer herhaaldelijk op hetzelfde vakje is gaan schieten, wat met de controle op gebruikte schoten in theorie niet zou mogen gebeuren. Daar kijk ik morgen nog even naar (om van te leren), en ik zal morgen ook even kijken of ik mn code kan opschonen (hele blokken code staan er nog als commentaar bij te staan) en online plaatsen.
En ik vergeet het zelfs: gefeliciteerd _js_!
Klinkt bekendSkier schreef op zondag 14 februari 2010 @ 22:43:
Deze berekende eerst alle mogelijke positie van het schip van 5 groot. dan werden de plaatsen doorgegeven aan alle cpu cores die ik ter beschikking had (namelijk 2) en werd er geprobeerd om de overige schepen te plaatsen.
[ Voor 41% gewijzigd door dcm360 op 14-02-2010 22:49 ]
Ik ben erg blij met de top 10 klassering. 
Mijn algoritme werkt als volgt:
- Kijk of de speler het veld eerder uitgedeeld heeft, zo ja geef het eerst volgende schot terug
- Bouw het veld op en markeer water en schepen
- Loop door de mogelijkheden en ken een kans toe aan de hand van, nog te schieten scheepsdelen in de rij/kolom, laatste schot (mits raak), scheepsdelen naast het veld en scheepsdelen daar weer naast.
Om de factoren van kans te bepalen heb ik mijn speler met verschillende instellingen tegen dezelfde velden laten spelen (stuk of 1000) en de beste werd mee gespeelt.
Om velden te genereren heb ik een script geschreven dat unieke velden random genereert en met de speler er tegen speelt om het aantal schoten te bepalen. Daarnaast reken ik uit hoe de schepen verspreid staan en dat speelt ook mee met het uitdelen van velden. Een veld wordt slechts 1 keer per opponent uitgedeeld.
Mijn algoritme werkt als volgt:
- Kijk of de speler het veld eerder uitgedeeld heeft, zo ja geef het eerst volgende schot terug
- Bouw het veld op en markeer water en schepen
- Loop door de mogelijkheden en ken een kans toe aan de hand van, nog te schieten scheepsdelen in de rij/kolom, laatste schot (mits raak), scheepsdelen naast het veld en scheepsdelen daar weer naast.
Om de factoren van kans te bepalen heb ik mijn speler met verschillende instellingen tegen dezelfde velden laten spelen (stuk of 1000) en de beste werd mee gespeelt.
Om velden te genereren heb ik een script geschreven dat unieke velden random genereert en met de speler er tegen speelt om het aantal schoten te bepalen. Daarnaast reken ik uit hoe de schepen verspreid staan en dat speelt ook mee met het uitdelen van velden. Een veld wordt slechts 1 keer per opponent uitgedeeld.
You don't have to be crazy to do this job, but it helps ....
_js_ gefeliciteerd en Onbekend, bedankt!
Ik zal binnenkort m'n code nog even posten, en ik ga ook nog even rekenen met de tussenresultaten, want ik ben wel benieuwd waar ik geëindigd zou zijn als mijn speler direct goed gewerkt had. Ik dacht dat ik alleen tegen _js_ wel eens verloor, maar de log suggereert dat ik ook van Janoz verloren heb. Even uitpluizen dus.
Ik zal binnenkort m'n code nog even posten, en ik ga ook nog even rekenen met de tussenresultaten, want ik ben wel benieuwd waar ik geëindigd zou zijn als mijn speler direct goed gewerkt had. Ik dacht dat ik alleen tegen _js_ wel eens verloor, maar de log suggereert dat ik ook van Janoz verloren heb. Even uitpluizen dus.



Onbekend bedankt voor het organiseren en iedereen bedankt voor het meespelen
Het verschil tussen de top en de rest zat volgens mij vooral in de verdedigende velden. Ik heb een veld gekozen waarmee vooral brute forcers die vanaf linksboven werken problemen zouden moeten hebben, en sommige mensen klaagden over een A1 bug, dus ik heb een schip op A1 gezet in de hoop dat ik daarmee tegenstanders kon laten falen. En natuurlijk helpt het meespelen van alle 8 ronden
Als ik de scores van de eerste twee ronden voor m'n eigen lol buiten beschouwing laat, kom ik op de volgende scorelijst (links).
Maar nog beter dan Onbekend's methode lijkt me om de scores van spelers onderling eerst op te tellen en daarna het totaal pas te vergelijken (of anders gezegd: het gemiddelde verschil tussen spelers te vergelijken) en op basis daarvan een spelpunt toe te kennen. Dat is de scoretabel in het midden, en daarin wint _js_ van iedereen.
De tabel rechts tenslotte is het verschil tussen gevuurde en geïncasseerde schoten (Onbekend's oorspronkelijke score zeg maar). Daaruit blijkt dat vooral de top 3 erg dicht bij elkaar in de buurt zit. Verder doe ik mensen met failures later in de game tekort, dus hecht daar niet te veel waarde aan.
De tabel in het midden lijkt me persoonlijk het meestzeggende, dus ik denk dat we _js_ hoe dan ook als winnaar mogen aanwijzen.
@JFeitsma: mijn resultaten zijn puur officieus, zodat ik me wat minder erger aan de moeite die ik de afgelopen drie weken verspild heb aan dit project.
Ik zal je volgende keer echt proberen te verslaan.
|
|
|
Maar nog beter dan Onbekend's methode lijkt me om de scores van spelers onderling eerst op te tellen en daarna het totaal pas te vergelijken (of anders gezegd: het gemiddelde verschil tussen spelers te vergelijken) en op basis daarvan een spelpunt toe te kennen. Dat is de scoretabel in het midden, en daarin wint _js_ van iedereen.
De tabel rechts tenslotte is het verschil tussen gevuurde en geïncasseerde schoten (Onbekend's oorspronkelijke score zeg maar). Daaruit blijkt dat vooral de top 3 erg dicht bij elkaar in de buurt zit. Verder doe ik mensen met failures later in de game tekort, dus hecht daar niet te veel waarde aan.
De tabel in het midden lijkt me persoonlijk het meestzeggende, dus ik denk dat we _js_ hoe dan ook als winnaar mogen aanwijzen.
@JFeitsma: mijn resultaten zijn puur officieus, zodat ik me wat minder erger aan de moeite die ik de afgelopen drie weken verspild heb aan dit project.
[ Voor 7% gewijzigd door Soultaker op 15-02-2010 00:05 ]
Verwijderd
Nou vooruit Soultaker, jou duld ik wel boven me hoor. Alleen deze keer natuurlijk!
Ik kreeg zojuist trouwens een ideetje voor een volgende contest: kamertje verhuren.
[edit] bijna vergeten: _js_, knap gedaan! En Onbekend: bedankt voor de organisatie.
Ik kreeg zojuist trouwens een ideetje voor een volgende contest: kamertje verhuren.
[edit] bijna vergeten: _js_, knap gedaan! En Onbekend: bedankt voor de organisatie.
[ Voor 32% gewijzigd door Verwijderd op 15-02-2010 00:11 ]
Ziezo, die zit erop. Gefeliciteerd, _js_!
Edit: oei, vergeten: hartelijk dank aan Onbekend voor de organisatie!
Ik ben nog best tevreden over het resultaat van mijn speler. Met iets meer inzet had ik misschien zelfs net wel i.p.v. net niet in de top 10 terecht kunnen komen.
Het programmeren van een spelertje was best een leuke klus. Helaas ben ik niet zo handig in het programmeren van een goede zelf-snoeiende boomdoorzoeker, dus heb ik maar een handvol eliminatieregels toegepast. Hieronder een (zeer) korte samenvatting van mijn speler:
Schepen plaatsen:
Genereer 25000 random velden van voornamelijk horizontaal of voornamelijk verticaal geplaatste schepen. Kies van die velden het veld waarvan de rij-/kolomtotalen zoveel mogelijk bij 2 in de buurt liggen. Dit zou het leven van de brute forcers lastig moeten maken wegens teveel vrijheidsgraden.
Schepen kelderen:
Dit zijn mijn 100% zeker regels die na elk binnengekomen schot worden toegepast:
- Vrije vakjes in rijen/kolommen met totaal 0 zijn water.
- Vrije vakjes in kruisingen van rijen en kolommen met totaal 1 zijn water. Als daar namelijk een schip zou liggen, zou die lengte 1 hebben. Die bestaan niet. Om dezelfde reden worden vakjes die aan vier kanten water heben zelf ook op water gezet.
- Vrije vakjes die aan minstens 1 hoekpunt een scheepsvakje hebben zijn water. Dit omdat schepen niet diagonaal mogen raken.
- Als het aantal onbekende vakjes in een rij/kolom gelijk is aan het aantal te vinden scheepsdelen in die rij/kolom, schiet ik met directe voorrang op die vakjes met 100% zekerheid.
- Als het langste nog te vinden schip aanwezig is, zet ik hem op slot zodat op die plek niet meer geplaatst mag worden. Tevens zet ik de vakjes direct voor en direct achter het gevonden schip op water.
Dit zijn mijn gokregels:
- Ik plaats het langste nog niet gevonden schip op alle nog vrije plaatsen en geef hokjes een score van +1 per keer dat een hokje door een mogelijke plaatsing van een schip wordt bedekt. Hoe hoger de score, hoe eerder ik er op schiet. Deze tactiek wordt, als ik het goed begreep, ook door de brute force rekenaars toegepast.
- Hokjes vlak voor of vlak na een reeds gevonden scheepsdeel krijgen een score van +10, zodat die automatisch een hogere prioriteit krijgen bij het schieten. Hiermee hoop ik achter elkaar aaneengesloten op een schip te schieten.
- Het hokje met de hoogste prioriteit en de laagste nog te vinden rij/kolomtotalen wordt gekozen. Dat laatste omdat schieten op een hokje waarvan in een rij/kolom nog 1 gevonden moet worden meer eliminatiemogelijkheden biedt als het raak is.
- Bij hokjes met gelijke schietprioriteit, kies 1e in leesrichting. Zo te zien zijn sommige borden al tegen die tactiek ontworpen, dus had ik beter random kunnen kiezen.
Als mijn algoritme verder nog in de knoop raakt en geen kandidaat kan vinden, dan wordt gewoon de 1e in leesrichting gepakt.
Ik zal mijn code nog eens goed ontluizen voordat ik hem openbaar.
Misschien dat ik er dan een beetje reclame voor F# mee kan maken (of angst zaaien).
@Soultaker: elke tabel waarin ik hoger eindig dan nu is een goeie.
Edit: oei, vergeten: hartelijk dank aan Onbekend voor de organisatie!
Ik ben nog best tevreden over het resultaat van mijn speler. Met iets meer inzet had ik misschien zelfs net wel i.p.v. net niet in de top 10 terecht kunnen komen.
Het programmeren van een spelertje was best een leuke klus. Helaas ben ik niet zo handig in het programmeren van een goede zelf-snoeiende boomdoorzoeker, dus heb ik maar een handvol eliminatieregels toegepast. Hieronder een (zeer) korte samenvatting van mijn speler:
Schepen plaatsen:
Genereer 25000 random velden van voornamelijk horizontaal of voornamelijk verticaal geplaatste schepen. Kies van die velden het veld waarvan de rij-/kolomtotalen zoveel mogelijk bij 2 in de buurt liggen. Dit zou het leven van de brute forcers lastig moeten maken wegens teveel vrijheidsgraden.
Schepen kelderen:
Dit zijn mijn 100% zeker regels die na elk binnengekomen schot worden toegepast:
- Vrije vakjes in rijen/kolommen met totaal 0 zijn water.
- Vrije vakjes in kruisingen van rijen en kolommen met totaal 1 zijn water. Als daar namelijk een schip zou liggen, zou die lengte 1 hebben. Die bestaan niet. Om dezelfde reden worden vakjes die aan vier kanten water heben zelf ook op water gezet.
- Vrije vakjes die aan minstens 1 hoekpunt een scheepsvakje hebben zijn water. Dit omdat schepen niet diagonaal mogen raken.
- Als het aantal onbekende vakjes in een rij/kolom gelijk is aan het aantal te vinden scheepsdelen in die rij/kolom, schiet ik met directe voorrang op die vakjes met 100% zekerheid.
- Als het langste nog te vinden schip aanwezig is, zet ik hem op slot zodat op die plek niet meer geplaatst mag worden. Tevens zet ik de vakjes direct voor en direct achter het gevonden schip op water.
Dit zijn mijn gokregels:
- Ik plaats het langste nog niet gevonden schip op alle nog vrije plaatsen en geef hokjes een score van +1 per keer dat een hokje door een mogelijke plaatsing van een schip wordt bedekt. Hoe hoger de score, hoe eerder ik er op schiet. Deze tactiek wordt, als ik het goed begreep, ook door de brute force rekenaars toegepast.
- Hokjes vlak voor of vlak na een reeds gevonden scheepsdeel krijgen een score van +10, zodat die automatisch een hogere prioriteit krijgen bij het schieten. Hiermee hoop ik achter elkaar aaneengesloten op een schip te schieten.
- Het hokje met de hoogste prioriteit en de laagste nog te vinden rij/kolomtotalen wordt gekozen. Dat laatste omdat schieten op een hokje waarvan in een rij/kolom nog 1 gevonden moet worden meer eliminatiemogelijkheden biedt als het raak is.
- Bij hokjes met gelijke schietprioriteit, kies 1e in leesrichting. Zo te zien zijn sommige borden al tegen die tactiek ontworpen, dus had ik beter random kunnen kiezen.
Als mijn algoritme verder nog in de knoop raakt en geen kandidaat kan vinden, dan wordt gewoon de 1e in leesrichting gepakt.
Ik zal mijn code nog eens goed ontluizen voordat ik hem openbaar.
Misschien dat ik er dan een beetje reclame voor F# mee kan maken (of angst zaaien).
@Soultaker: elke tabel waarin ik hoger eindig dan nu is een goeie.
"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE
Van de onofficiële tablelen vind ik persoonlijk de middelste het meest valide, en ik denk dat daar ook de meeste mensen blij mee zijn omdat daar 11 mensen in de top 10 staan. =)
@hieronder: dat is wel typisch inderdaad...
@hieronder: dat is wel typisch inderdaad...
[ Voor 25% gewijzigd door Soultaker op 15-02-2010 00:19 ]
Echt representatief is de middelste niet. Ik sta daar boven Janoz en Bolukan, terwijl ze toch veel beter waren dan mij.
You don't have to be crazy to do this job, but it helps ....
Misschien maakt dit het wat inzichtelijker:
Elke cel bevat de som van geïncasseerde minus geschoten spelers voor elk paar spelers (en de matrix is dus spiegelsymmetrisch over de diagonaal). Voor elke positieve score krijg je een punt, voor elke negatieve score een strafpunt.
De reden dat je dan boven Janoz en Bolukan komt is dat je Bolukan überhaupt verslaat. Janoz verslaat jou weliswaar, maar verliest van Bolukan, - peter - en dcm360, waar jij van wint.
Maar misschien moet ik m'n oude methode van steeds de onderste eruit gooien en opnieuw berekenen nog eens van stal halen, dan wordt je waarschijnlijk wel lager gesorteerd.
edit:
In deze tabel valt _js_ met z'n stomme +1 winst op mij ook veel te goed op, grrr
_js_ | Soul | JFei | Skie | Alai | Jano | Bolu | cfer | - pe | dcm3 | Jego | Site | Onbe | berk | gvdh | Sv3n | host | Rain | Othe | qana | zwip | t.co | D2k | BSTN | Winst | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
_js_ | - | 1 | 17 | 58 | 50 | 10 | 402 | 58 | 48 | 105 | 71 | 120 | 106 | 77 | 119 | 120 | 124 | 63 | 75 | 74 | 87 | 133 | 131 | 238 | 23 |
Soultaker | -1 | - | 104 | 65 | 77 | 23 | 393 | 73 | 64 | 92 | 61 | 135 | 96 | 160 | 98 | 110 | 126 | 73 | 126 | 107 | 84 | 151 | 107 | 213 | 21 |
JFeitsma | -17 | -104 | - | 54 | 51 | 12 | 420 | 70 | 77 | 271 | 57 | 82 | 85 | 131 | 83 | 101 | 99 | 80 | 65 | 69 | 73 | 105 | 144 | 197 | 19 |
Skier | -58 | -65 | -54 | - | 36 | 29 | -24 | 33 | 48 | -25 | 26 | 79 | 37 | 46 | 68 | 53 | 46 | 40 | 68 | 65 | 55 | 61 | 84 | 202 | 13 |
AlainS | -50 | -77 | -51 | -36 | - | -28 | 15 | 13 | 11 | 38 | -6 | 50 | 15 | 14 | 43 | 1 | 8 | 33 | 11 | 24 | 3 | 48 | 137 | 184 | 11 |
Janoz | -10 | -23 | -12 | -29 | 28 | - | -13 | 17 | -3 | -11 | 42 | 53 | 12 | 53 | 155 | 28 | 34 | 63 | 67 | 50 | 11 | 74 | 33 | 190 | 9 |
Bolukan | -402 | -393 | -420 | 24 | -15 | 13 | - | 94 | 26 | -113 | 34 | -14 | 71 | 0 | 24 | 55 | 66 | 40 | 48 | -5 | 19 | 114 | 235 | 154 | 8 |
cfern | -58 | -73 | -70 | -33 | -13 | -17 | -94 | - | -51 | 60 | 19 | 60 | 6 | 109 | 73 | 91 | 78 | 17 | 45 | 47 | 34 | 87 | 151 | 269 | 7 |
- peter - | -48 | -64 | -77 | -48 | -11 | 3 | -26 | 51 | - | 41 | 14 | -15 | 40 | -13 | 29 | 20 | 37 | 34 | 26 | 26 | 17 | 87 | 172 | 181 | 7 |
dcm360 | -105 | -92 | -271 | 25 | -38 | 11 | 113 | -60 | -41 | - | 20 | 47 | -13 | -73 | 61 | -41 | 7 | 41 | 47 | 32 | 50 | 12 | 114 | -58 | 3 |
Jegorex | -71 | -61 | -57 | -26 | 6 | -42 | -34 | -19 | -14 | -20 | - | 45 | -55 | 124 | 35 | 21 | 48 | 24 | 65 | 41 | 59 | 95 | 119 | 197 | 3 |
Site.to.Make | -120 | -135 | -82 | -79 | -50 | -53 | 14 | -60 | 15 | -47 | -45 | - | -18 | 26 | 28 | 48 | -21 | 66 | 75 | 106 | 64 | 56 | 208 | 289 | 1 |
Onbekend | -106 | -96 | -85 | -37 | -15 | -12 | -71 | -6 | -40 | 13 | 55 | 18 | - | 10 | -14 | -11 | 17 | 6 | -6 | -6 | 7 | 48 | 54 | 106 | -3 |
berktwist | -77 | -160 | -131 | -46 | -14 | -53 | 0 | -109 | 13 | 73 | -124 | -26 | -10 | - | 190 | 16 | -82 | 43 | -66 | 43 | -63 | 40 | 67 | 162 | -4 |
gvdh | -119 | -98 | -83 | -68 | -43 | -155 | -24 | -73 | -29 | -61 | -35 | -28 | 14 | -190 | - | 10 | 4 | -2 | 2 | 15 | 40 | 83 | 148 | 190 | -5 |
Sv3nz0r | -120 | -110 | -101 | -53 | -1 | -28 | -55 | -91 | -20 | 41 | -21 | -48 | 11 | -16 | -10 | - | -18 | 43 | 5 | 25 | 51 | 30 | 198 | 210 | -5 |
hostname | -124 | -126 | -99 | -46 | -8 | -34 | -66 | -78 | -37 | -7 | -48 | 21 | -17 | 82 | -4 | 18 | - | -17 | 0 | 20 | 46 | 46 | 167 | 177 | -6 |
Rainmaker1987 | -63 | -73 | -80 | -40 | -33 | -63 | -40 | -17 | -34 | -41 | -24 | -66 | -6 | -43 | 2 | -43 | 17 | - | 22 | 38 | 12 | 77 | 129 | 196 | -7 |
Otherside1982 | -75 | -126 | -65 | -68 | -11 | -67 | -48 | -45 | -26 | -47 | -65 | -75 | 6 | 66 | -2 | -5 | 0 | -22 | - | 1 | 1 | 42 | 101 | 191 | -8 |
qanar | -74 | -107 | -69 | -65 | -24 | -50 | 5 | -47 | -26 | -32 | -41 | -106 | 6 | -43 | -15 | -25 | -20 | -38 | -1 | - | 33 | 74 | 77 | 124 | -11 |
zwippie | -87 | -84 | -73 | -55 | -3 | -11 | -19 | -34 | -17 | -50 | -59 | -64 | -7 | 63 | -40 | -51 | -46 | -12 | -1 | -33 | - | 47 | 101 | 59 | -15 |
t.coenraad | -133 | -151 | -105 | -61 | -48 | -74 | -114 | -87 | -87 | -12 | -95 | -56 | -48 | -40 | -83 | -30 | -46 | -77 | -42 | -74 | -47 | - | 45 | 58 | -19 |
D2k | -131 | -107 | -144 | -84 | -137 | -33 | -235 | -151 | -172 | -114 | -119 | -208 | -54 | -67 | -148 | -198 | -167 | -129 | -101 | -77 | -101 | -45 | - | 3 | -21 |
BSTNjitRam | -238 | -213 | -197 | -202 | -184 | -190 | -154 | -269 | -181 | 58 | -197 | -289 | -106 | -162 | -190 | -210 | -177 | -196 | -191 | -124 | -59 | -58 | -3 | - | -21 |
Elke cel bevat de som van geïncasseerde minus geschoten spelers voor elk paar spelers (en de matrix is dus spiegelsymmetrisch over de diagonaal). Voor elke positieve score krijg je een punt, voor elke negatieve score een strafpunt.
De reden dat je dan boven Janoz en Bolukan komt is dat je Bolukan überhaupt verslaat. Janoz verslaat jou weliswaar, maar verliest van Bolukan, - peter - en dcm360, waar jij van wint.
Maar misschien moet ik m'n oude methode van steeds de onderste eruit gooien en opnieuw berekenen nog eens van stal halen, dan wordt je waarschijnlijk wel lager gesorteerd.
edit:
In deze tabel valt _js_ met z'n stomme +1 winst op mij ook veel te goed op, grrr
Verwijderd
Gefeliciteerd _js_ , en bedankt Onbekend voor de leuke wedstrijd.
Ik heb een speler maar omdat ik nog op 70 schoten zat toch maar niet mee gedaan.
Volgende keer misschien vier op een rij?
Ik heb een speler maar omdat ik nog op 70 schoten zat toch maar niet mee gedaan.
Volgende keer misschien vier op een rij?
Bedankt onbekend voor het organiseren
En gefeliciteerd _js_ met het winnen natuurlijk
Ik sta in alle lijstjes in de top 10 dus ik ben er wel tevreden mee.
Later deze week zal ik mijn code wel in dit topic zetten, in het kort gaat het als volgt:
- Vrije vakjes waar de rij/kolom 0 is worden op water gezet.
- Vrije vakjes die omringt zijn door water worden op water gezet.
- Vrije vakjes waar de rij 1 is en de aan de kolom kant klem zit tussen water worden op water gezet.
- Vrije vakjes waar de kolom 1 is en de aan de rij kant klem zit tussen water worden op water gezet.
- Vrije vakjes die met een hoekpunt een scheepsdeel aanraken worden op water gezet.
- Er wordt een kans berekend aan de hand van het aantal scheepsdelen dat nog in een rij/kolom moet komen en het aantal vrije vakjes in die rij/kolom.
- Als een vrij vakje aan een scheepsdeel ligt wordt de kans verhoogd met huidige kans+((1-huidige kans)*bonus kans) (het wordt dus nooit verlaagd) Bij de bonuskans wordt rekening gehouden met:
-- Als het schip 1 vakje lang is dan is de kans 100%/het aantal vrije vakjes om het schip heen.
-- Als het schip langer dan 1 vakje is dan wordt er naar meerdere dingen gekeken.
Als tenslotte het ideale schot omringt is door 3 vakjes met water dan wordt het schot verplaatst naar het vrije vakje omdat een schip minstens 2 vakjes groot is.
Het maken van de velden gebeurt volledig random, elke 10 milliseconden wordt er een veld gemaakt.
Vervolgens bekijk ik hoe moeilijk dat veld is voor mijn eigen speler en als het goed genoeg is wordt hij in de lijst met de 500 beste velden geplaatst.
En gefeliciteerd _js_ met het winnen natuurlijk
Ik sta in alle lijstjes in de top 10 dus ik ben er wel tevreden mee.
Later deze week zal ik mijn code wel in dit topic zetten, in het kort gaat het als volgt:
- Vrije vakjes waar de rij/kolom 0 is worden op water gezet.
- Vrije vakjes die omringt zijn door water worden op water gezet.
- Vrije vakjes waar de rij 1 is en de aan de kolom kant klem zit tussen water worden op water gezet.
- Vrije vakjes waar de kolom 1 is en de aan de rij kant klem zit tussen water worden op water gezet.
- Vrije vakjes die met een hoekpunt een scheepsdeel aanraken worden op water gezet.
- Er wordt een kans berekend aan de hand van het aantal scheepsdelen dat nog in een rij/kolom moet komen en het aantal vrije vakjes in die rij/kolom.
- Als een vrij vakje aan een scheepsdeel ligt wordt de kans verhoogd met huidige kans+((1-huidige kans)*bonus kans) (het wordt dus nooit verlaagd) Bij de bonuskans wordt rekening gehouden met:
-- Als het schip 1 vakje lang is dan is de kans 100%/het aantal vrije vakjes om het schip heen.
-- Als het schip langer dan 1 vakje is dan wordt er naar meerdere dingen gekeken.
Als tenslotte het ideale schot omringt is door 3 vakjes met water dan wordt het schot verplaatst naar het vrije vakje omdat een schip minstens 2 vakjes groot is.
Het maken van de velden gebeurt volledig random, elke 10 milliseconden wordt er een veld gemaakt.
Vervolgens bekijk ik hoe moeilijk dat veld is voor mijn eigen speler en als het goed genoeg is wordt hij in de lijst met de 500 beste velden geplaatst.
Ok, ik zal ook even een uitleg en gelijk m'n code posten. Ik heb over de afgelopen weken heel wat code verzamelt, omdat ik een beetje aan het experimenteren was met Go. In testcompetitie 2 draaide m'n speler volledig op Go, met en sich goede resultaten, maar de performance was niet helemaal naar wens, vandaar dat ik voor de finale mijn solver herschreven heb in C. De webserver heb ik gemakshalve in Go gelaten; die serveert voorberekende borden als speler 1, of roept een externe solver aan als speler 2.
De uiteindelijk code dus:
Zoals andere mensen hier genereeer ik mijn stellingen op basis van een template van rij- en kolomtotalen die ruim 1,6 miljoen verschillende oplossingen hebben. Als gevolg daarvan hebben zelfs brute-forcende spelers relatief veel schoten nodig om te bepalen welke van die oplossingen de juiste is. Om het nog extra moeilijk te maken, neem ik precies die borden die met gebruikmaken van de bovengenoemde heuristiek (schieten op een vakje met maximale raakkans) zo veel mogelijk missers opleveren. Dat verklaart wellicht - peter -'s observatie. Helaas werkte het niet tegen alle spelers even geniaal (waarom niet, is me nog niet helemaal duidelijk; misschien gooit nondeterminisme roet in het eten).
Het kostte mij nog aardige moeite om de runtime van de solver rond de 1 seconde te krijgen. Ik had verwacht dat een aantal andere spelers wel door de tijd zouden gaan vanwege mijn moeilijke borden, maar dat viel erg mee (of tegen
). Behoorlijk sterke tegenstand dus, en dat is altijd leuk. Vandaar dat ik iedereen wil bedanken voor de deelname, en laat ik voor de zekerheid Onbekend nog maar eens bedanken
voor de uitstekende organisatie, want dat dat lang niet eenvoudig is, daar kan ik over meepraten.
De uiteindelijk code dus:
- de solver: solver.c
- de server: server.go
- alles bij elkaar: zeeslag.tar.gz
Zoals andere mensen hier genereeer ik mijn stellingen op basis van een template van rij- en kolomtotalen die ruim 1,6 miljoen verschillende oplossingen hebben. Als gevolg daarvan hebben zelfs brute-forcende spelers relatief veel schoten nodig om te bepalen welke van die oplossingen de juiste is. Om het nog extra moeilijk te maken, neem ik precies die borden die met gebruikmaken van de bovengenoemde heuristiek (schieten op een vakje met maximale raakkans) zo veel mogelijk missers opleveren. Dat verklaart wellicht - peter -'s observatie. Helaas werkte het niet tegen alle spelers even geniaal (waarom niet, is me nog niet helemaal duidelijk; misschien gooit nondeterminisme roet in het eten).
Het kostte mij nog aardige moeite om de runtime van de solver rond de 1 seconde te krijgen. Ik had verwacht dat een aantal andere spelers wel door de tijd zouden gaan vanwege mijn moeilijke borden, maar dat viel erg mee (of tegen
En ik ben daar geen laatsteSoultaker schreef op maandag 15 februari 2010 @ 00:07:
Van de onofficiële tablelen vind ik persoonlijk de middelste het meest valide, en ik denk dat daar ook de meeste mensen blij mee zijn omdat daar 11 mensen in de top 10 staan. =)
Ach ik heb me wel vermaakt, maar een volgende keer ga ik proberen eerder te beginnen én betere resultaten op te leveren
Tnx @Onbekend voor het organiseren!
(code volgt later vandaag denk ik)
Doet iets met Cloud (MS/IBM)
Geen laatste
En ik merk al dat mijn veldgenerator beter had gemoeten. Jammer, maar helaas... Ik had nooit bedacht dat 1,2...2,1 het beste was. Code volgt nog!
Meedoen met een nog totaal in de steigers staande speler levert het verwachte resultaat op 
Enige reden dat ik gedeeld laatste sta ipv laatste is dat dcm360 bij mij op A1 is blijven vuren
Hopelijk kan ik bij een volgende competitie wat eerder beginnen. Meedoen met de testcompetities zou wel handig zijn geweest.
Onbekend in ieder geval bedankt voor het hosten van deze competitie
(en op naar de volgende?
)
En _js_ natuurlijk gefeliciteerd met je overwinning!
Enige reden dat ik gedeeld laatste sta ipv laatste is dat dcm360 bij mij op A1 is blijven vuren
Hopelijk kan ik bij een volgende competitie wat eerder beginnen. Meedoen met de testcompetities zou wel handig zijn geweest.
Onbekend in ieder geval bedankt voor het hosten van deze competitie

En _js_ natuurlijk gefeliciteerd met je overwinning!
Wishlist Backpack Survivors op Steam !
Goed, nog even een korte uitleg over wat ik gistermiddag nog even snel er tussen gehacked heb 
Ik heb een hash bedacht die ongevoelig is voor rotatie, spiegeling en verplaatsing. Deze gebruik ik voor het herkennen van borden. Ik had alvast een database volgegooid met alle borden die ik tegen gekomen ben. Ik was nopg van plan om net als iemand anders hier ook alle competitieborden toe te voegen, maar hier heb ik geen tijd meer voor gehad. Ook worden alle borden die ik voorgeschoteld gekregen heb in de database opgeslagen.
Eerste stap na het 'enrichen' was dan ook kijken of ik het bord misschien al kende en dan proberen de schepen af te schieten.
Bij de verdediging heb ik vertrouwd op de keurige veld generatie van mijn tegenstanders
. En om er voor te zorgen dat het veld niet zomaar herkend werd gooide ik er wel een keurige translatie overheen. Iedereen heeft in de potjes tegen mij dus een bord van zichzelf voorgeschoteld gekregen
. (om de potjes te overbruggen waarbij ik als eerste tegen iemand speelde had ik nog 4 willekeurige lastige borden ergens vandaan geplukt en deze (met transformatie) voorgeschoteld).
Omdat ik het transformeren (en de detectie van de transformatie) nog nooit in zijn geheel getest had heb ik nooit echt de zekerheid gehad dat het überhaupt ging werken, maar aangezien ik nog redelijk geëindigd ben neem ik aan dat dat wel geod gekomen is
Voor de rest gefeliciteerd voor degenen boven mij
nanananana voor degenen onder mij
En Onbekend erg bedankt voor de hele reutemeteut!
Ik heb een hash bedacht die ongevoelig is voor rotatie, spiegeling en verplaatsing. Deze gebruik ik voor het herkennen van borden. Ik had alvast een database volgegooid met alle borden die ik tegen gekomen ben. Ik was nopg van plan om net als iemand anders hier ook alle competitieborden toe te voegen, maar hier heb ik geen tijd meer voor gehad. Ook worden alle borden die ik voorgeschoteld gekregen heb in de database opgeslagen.
Eerste stap na het 'enrichen' was dan ook kijken of ik het bord misschien al kende en dan proberen de schepen af te schieten.
Bij de verdediging heb ik vertrouwd op de keurige veld generatie van mijn tegenstanders
Omdat ik het transformeren (en de detectie van de transformatie) nog nooit in zijn geheel getest had heb ik nooit echt de zekerheid gehad dat het überhaupt ging werken, maar aangezien ik nog redelijk geëindigd ben neem ik aan dat dat wel geod gekomen is
Voor de rest gefeliciteerd voor degenen boven mij
nanananana voor degenen onder mij
En Onbekend erg bedankt voor de hele reutemeteut!
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Mijn code in lotusscript: (tis een Lotusscript agent voor degenen die weten waar ik het over heb
)
http://www.d2k.nl/domino/media/blogs/blog/contest.lss
Tis verre van netjes vind ik zelf, kan een stuk beter, maar goed, ik programmeer veeeeeeeeeeeeeeeel te weinig.
Aanpak?
- uitsluiten row's & col's waar de waarde 0 is
- uitsluiten row's & col's waar alle schepen geraakt zijn
- bepalen of het vorige schot raak was
Ik had nog willen inbouwen:
- betere random
- bijhouden welke boten er nog nodig waren
- beter cols/rows beheren
- plaatsen van schepen
http://www.d2k.nl/domino/media/blogs/blog/contest.lss
Tis verre van netjes vind ik zelf, kan een stuk beter, maar goed, ik programmeer veeeeeeeeeeeeeeeel te weinig.
Aanpak?
- uitsluiten row's & col's waar de waarde 0 is
- uitsluiten row's & col's waar alle schepen geraakt zijn
- bepalen of het vorige schot raak was
- ja? Dan kijken links-rechts-boven-onder (en die rij nog niet uitgesloten is uiteraard)
- nee? Dan bepalen in welke rij/kol er het beste kan worden geschoten
Ik had nog willen inbouwen:
- betere random
- bijhouden welke boten er nog nodig waren
- beter cols/rows beheren
- plaatsen van schepen
Doet iets met Cloud (MS/IBM)
Dat excuus heb je al eens gebruikt he, dus dat telt nu niet meerD2k schreef op maandag 15 februari 2010 @ 11:30:
Tis verre van netjes vind ik zelf, kan een stuk beter, maar goed, ik programmeer veeeeeeeeeeeeeeeel te weinig.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Het wordt juist alleen maar meer valide merkte ikCreepy schreef op maandag 15 februari 2010 @ 11:46:
[...]
Dat excuus heb je al eens gebruikt he, dus dat telt nu niet meer
(en waarom deed jij niet mee? Slacker?
Doet iets met Cloud (MS/IBM)
Nou, mijn code was vrij simpel.
Ik heb een bruteforcer gebouwt, maar daar zaten geen slimmigheden in, dus die kon ik pas inzetten vanaf 6 overgebleven schepen. Dan bleef ie onder de 5 seconden. Die bruteforce was wel nodig om in de 1e rondes vrij hoog te scoren.
Ik bouwde eerst de gamestate, filterde alle affe schepen eruit, filterde de vakjes rondom de schepen eruit, en alle vakjes waar geen schepen meer konden liggen.
Voor een nieuw schip rekende ik uit waar het volgende schip allemaal kon liggen, en koos dan het meest gedeelde veld. (Daarom idd Soultaker die grote missers bij jou blijkbaar). Dat gaf bijzonder goede resultaten. De eerste 2 schipjagers die ik bouwde gebruikten nog kans nav de kolom en rijen, maar dit simpele algoritme gaf een stuk meer hits. Dat was wel voldoenend om te ontdekken.
Om borden te genereren heb ik puur een random generator gebruikt, en dan honderden borden doorgespeeld en degene waar ik het slechts op scoorde in een library gestopt en geserveerd.
DomainModel Code: Visual Studio 2008 Project:
DomainModel Zeeslagje -peter- vs2008.zip
In C# geschreven en vrij veel objecten gebruikt. Daardoor zal de bruteforce ook wel langzamer zijn gegaan, want ik heb niet met een simpele array gewerkt met 0,1,2 enz. Maar het werkte wel prettig opzich.
Erg genoten hiervan, al was na 2 weken voor mij wel de code zodanig klaar dat ik geen zin meer had om te optimaliseren.
Ik heb een bruteforcer gebouwt, maar daar zaten geen slimmigheden in, dus die kon ik pas inzetten vanaf 6 overgebleven schepen. Dan bleef ie onder de 5 seconden. Die bruteforce was wel nodig om in de 1e rondes vrij hoog te scoren.
Ik bouwde eerst de gamestate, filterde alle affe schepen eruit, filterde de vakjes rondom de schepen eruit, en alle vakjes waar geen schepen meer konden liggen.
Voor een nieuw schip rekende ik uit waar het volgende schip allemaal kon liggen, en koos dan het meest gedeelde veld. (Daarom idd Soultaker die grote missers bij jou blijkbaar). Dat gaf bijzonder goede resultaten. De eerste 2 schipjagers die ik bouwde gebruikten nog kans nav de kolom en rijen, maar dit simpele algoritme gaf een stuk meer hits. Dat was wel voldoenend om te ontdekken.
Om borden te genereren heb ik puur een random generator gebruikt, en dan honderden borden doorgespeeld en degene waar ik het slechts op scoorde in een library gestopt en geserveerd.
DomainModel Code: Visual Studio 2008 Project:
DomainModel Zeeslagje -peter- vs2008.zip
In C# geschreven en vrij veel objecten gebruikt. Daardoor zal de bruteforce ook wel langzamer zijn gegaan, want ik heb niet met een simpele array gewerkt met 0,1,2 enz. Maar het werkte wel prettig opzich.
Erg genoten hiervan, al was na 2 weken voor mij wel de code zodanig klaar dat ik geen zin meer had om te optimaliseren.
[ Voor 30% gewijzigd door - peter - op 15-02-2010 17:38 ]
D2k schreef op maandag 15 februari 2010 @ 12:03:
[...]
Het wordt juist alleen maar meer valide merkte ik
(en waarom deed jij niet mee? Slacker?)

* Creepy mompeld iets over wat er 12 weken geleden gebeurde en nog steeds aardige impact heeft op m'n toch al drukke leven
(en nee, dit is ook niet de eerste keer dat ik dat als excuus gebruik
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Smoesjes... Dat kan best samen : http://www.youtube.com/watch?v=bYcF_xX2DE8
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Met verplaatsing bedoel je ook het permuteren van blokken van rijen/kolommen? Ik had zelf mijn borden gevarieerd door ze te spiegelen over de diagonaal en door rijen te permuteren; ik was me er van bewust dat dat om te keren is, maar ik dacht dat niemand gek genoeg zou zijn om dat te gaan doen (ook omdat je extra moeite moet doen om de permutatie te onthouden en terug uit te voeren). Met andere woorden: kon je al mijn borden terugvoeren op dezelfde set mogelijkheden? If so, well done.Janoz schreef op maandag 15 februari 2010 @ 09:28:
Ik heb een hash bedacht die ongevoelig is voor rotatie, spiegeling en verplaatsing. Deze gebruik ik voor het herkennen van borden.
Je gebruikt het woord "enrichen" al een aantal keer in je posts, maar ik weet niet precies wat dat inhoud. Kun je dat toelichten? Bedoel je hiermee dat je eerst met logica wat informatie afleidt voordat je gaat bruteforcen?Eerste stap na het 'enrichen' was dan ook kijken of ik het bord misschien al kende en dan proberen de schepen af te schieten.
Bastard!Bij de verdediging heb ik vertrouwd op de keurige veld generatie van mijn tegenstanders. En om er voor te zorgen dat het veld niet zomaar herkend werd gooide ik er wel een keurige translatie overheen. Iedereen heeft in de potjes tegen mij dus een bord van zichzelf voorgeschoteld gekregen
.
Verwijderd
volgens mij heft bijna iedereen borden naar de tegenstander gestuurd waar zijn eigen speler het slechts tegen scoordeSoultaker schreef op maandag 15 februari 2010 @ 17:27:
Bastard!Dat verklaart wel waarom je relatief goed presteert tegen mij; ik had mijn borden uitgezocht als worst cases van mijn eigen speler, en ik was me er wederom van bewust dat dat tegen me gebruikt zou kunnen worden, maar dacht weer dat niemand dat zou implementeren. (Zelf had ik het niet gedaan omdat het me niet waarschijnlijk leek dat iemand borden zou genereren die nóg moeilijker waren dan die ik al verzonnen had). Ik heb in ieder geval geleerd dat ik mijn tegenstanders (nog) minder moet onderschatten...
als je gewoon iedereen zijn eigen veld terug had, had je waarschijnlijk een aardige score
De reden waarom het tegen mij zo te zien niet echt gelukt is, is omdat de velden van mijn speler niet zijn gemaakt met het algoritme waarmee ik gespeeld heb, maar met mn algoritme van vorige week. En op mn eigen velden haalde ik iets van 7 a 8 schoten verbetering 
Zelf had ik ook nog wel als idee om transformaties toe te passen (ook zodanig dat ik transformaties terug kon draaien), maar daar heb ik geen tijd meer voor gehad.
Mijn idee was om eerst de nullen aan het begin/einde weg te gooien zodat ik een klein veld kreeg. Vervolgens die getallen zodanig zetten dat de eerste lager is dan de laatste (eventueel ook 2e/1 na-laatste indien nodig of verder), en daarna rows/cols ook op volgorde van laag->hoog van het eerste cijfer zetten. Zo heb je perfect alle transformaties geëlimineerd en houd je een 'neutraal' veld over. Vervolgens zou ik kunnen controleren of ik het veld al kende en de transformaties op de bekende plaatsen terugdraaien. Tot zover de theorie, de praktijk heeft het niet gehaald helaas...
Zelf had ik ook nog wel als idee om transformaties toe te passen (ook zodanig dat ik transformaties terug kon draaien), maar daar heb ik geen tijd meer voor gehad.
Mijn idee was om eerst de nullen aan het begin/einde weg te gooien zodat ik een klein veld kreeg. Vervolgens die getallen zodanig zetten dat de eerste lager is dan de laatste (eventueel ook 2e/1 na-laatste indien nodig of verder), en daarna rows/cols ook op volgorde van laag->hoog van het eerste cijfer zetten. Zo heb je perfect alle transformaties geëlimineerd en houd je een 'neutraal' veld over. Vervolgens zou ik kunnen controleren of ik het veld al kende en de transformaties op de bekende plaatsen terugdraaien. Tot zover de theorie, de praktijk heeft het niet gehaald helaas...
@Soultaker
Permutaties van borden 'beperkte' zich tot horizontaal, verticaal en diagonaal spiegelen en het verplaatsen wanneer er aan de uiteinden een 0 kolom of row was. Permuteren heb ik niet aan gedaan omdat ik te weinig analyse op de borden zelf gedaan had. Ik was al vanaf het begin van plan om mensen hun eigen probleem vermomd terug te gaan geven. Het enige wat ik verder aan verdediging gedaan heb is gewoon dom genereren en kijken hoe ze scoorden.
Met 'enrichen' bedoel ik logica om van alles af te leiden. Ik had er een aantal. De simpelste was er een die de hele kolom met water vulde wanneer er nog maar 0 schepen over waren, of met schepen wanneer het aantal schepen gelijk was aan het aantal open plekken. D'r was er ook 1 die een soort dilatie over het veld gooide waarbij allemaal patronen werden gematched. Denk hierbij aan en neerzetten van allemaal water op de diagonalen van een gevonden schipvakje of het langer maken van een herkend schip uiteinde (omdat ze allemaal minimaal 2 lang zijn). Ook had ik er nog een die herkende waar het langste schip zou kunnen liggen en vulde die rij zoveel mogelijk in (bij 7 openingen waarbij de middelste een schip is dan moeten beide veldjes ernaast ook een schip hebben aangezien er anders geen van 5 past). Uiteindelijk ook nog een 'sinker' die alle complete schepen weghaalde en de metadata aanpaste. Eigenlijk heb ik dus alllemaal truukjes geprogrammeerd die ik normaal ook handmatig uitvoer wanneer ik dergelijke puzzels oplos.
Deze enrichers liet ik op het veld los tot het veld niet meer veranderde. Vervolgens ging ik aimers implementeren. De eerste was een 'zoek het vrije veld met de hoogste som van rij en kolom' en een boatkiller die zodra het hele veld afgeleid kon worden schoot op alle schepen die nog niet geschoten waren maar al lang waren afgeleid.
Ik zit nu achter een andere laptop, maar ik zal binnenkort wel eens even wat code posten.
@dcm:
Zo werkte inderdaad mijn hash ongeveer. 0-en weggooien aan het begin. Alleen gebruik ik dezelfde selectie criteria voor het kiezen tussen de normale en de reversde als voor welke ik kolommen en rijen maak. Als je ze nu allemaal achter elkaar zet en een hash van trekt is deze onafhankelijk van transformaties.
Permutaties van borden 'beperkte' zich tot horizontaal, verticaal en diagonaal spiegelen en het verplaatsen wanneer er aan de uiteinden een 0 kolom of row was. Permuteren heb ik niet aan gedaan omdat ik te weinig analyse op de borden zelf gedaan had. Ik was al vanaf het begin van plan om mensen hun eigen probleem vermomd terug te gaan geven. Het enige wat ik verder aan verdediging gedaan heb is gewoon dom genereren en kijken hoe ze scoorden.
Met 'enrichen' bedoel ik logica om van alles af te leiden. Ik had er een aantal. De simpelste was er een die de hele kolom met water vulde wanneer er nog maar 0 schepen over waren, of met schepen wanneer het aantal schepen gelijk was aan het aantal open plekken. D'r was er ook 1 die een soort dilatie over het veld gooide waarbij allemaal patronen werden gematched. Denk hierbij aan en neerzetten van allemaal water op de diagonalen van een gevonden schipvakje of het langer maken van een herkend schip uiteinde (omdat ze allemaal minimaal 2 lang zijn). Ook had ik er nog een die herkende waar het langste schip zou kunnen liggen en vulde die rij zoveel mogelijk in (bij 7 openingen waarbij de middelste een schip is dan moeten beide veldjes ernaast ook een schip hebben aangezien er anders geen van 5 past). Uiteindelijk ook nog een 'sinker' die alle complete schepen weghaalde en de metadata aanpaste. Eigenlijk heb ik dus alllemaal truukjes geprogrammeerd die ik normaal ook handmatig uitvoer wanneer ik dergelijke puzzels oplos.
Deze enrichers liet ik op het veld los tot het veld niet meer veranderde. Vervolgens ging ik aimers implementeren. De eerste was een 'zoek het vrije veld met de hoogste som van rij en kolom' en een boatkiller die zodra het hele veld afgeleid kon worden schoot op alle schepen die nog niet geschoten waren maar al lang waren afgeleid.
Ik zit nu achter een andere laptop, maar ik zal binnenkort wel eens even wat code posten.
@dcm:
Zo werkte inderdaad mijn hash ongeveer. 0-en weggooien aan het begin. Alleen gebruik ik dezelfde selectie criteria voor het kiezen tussen de normale en de reversde als voor welke ik kolommen en rijen maak. Als je ze nu allemaal achter elkaar zet en een hash van trekt is deze onafhankelijk van transformaties.
[ Voor 7% gewijzigd door Janoz op 15-02-2010 20:46 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Bah, die online file hosting services zuigen wel erg hard.
Geen solution dus, maar pastebin:
499 regels totaal, inclusief (schaarse) comments.
Als je de boel binnen Visual Studio wilt compilen, hou dan deze volgorde aan binnen het project.
Misschien is een eigen webstekkie niet eens zo'n heel slecht idee...
source | korte omschrijving |
---|---|
ZSTypes.fs | gridceltypedefinitie |
ZSParse.fs | vertaling posities <--> (rij,kolom)-code |
ZSConstraints.fs | onmogelijke hokjes afkruisen |
ZSPlaceShips.fs | de bordengenerator |
ZSPlayers.fs | 3 verschillende spelers |
ZSServer.fs | spreekt voor zich |
499 regels totaal, inclusief (schaarse) comments.
Als je de boel binnen Visual Studio wilt compilen, hou dan deze volgorde aan binnen het project.
Misschien is een eigen webstekkie niet eens zo'n heel slecht idee...
"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE
Ik wil wel een zipje voor je online gooien als je dat graag wil.
(Hoewel ik denk dat mensen niet per se een heel project hoeven te hebben. Ik vind het zelf wel leuk om andermans code te bekijken, maar ik hoef de speler niet echt te kunnen compileren.)
Het zou trouwens ook handig zijn als je je Tweakers.net Private Storage kon gebruiken om files te hosten, zoals wel kan bij het foto-album.
edit:
Je kunt trouwens het Tweakers.net fotoalbum hier wel voor misbruiken.
Voorbeeld:
Rechts klikken, Save Image As... voorbeeld.zip
Het zou trouwens ook handig zijn als je je Tweakers.net Private Storage kon gebruiken om files te hosten, zoals wel kan bij het foto-album.
edit:
Je kunt trouwens het Tweakers.net fotoalbum hier wel voor misbruiken.
Voorbeeld:

Rechts klikken, Save Image As... voorbeeld.zip
[ Voor 64% gewijzigd door Soultaker op 15-02-2010 21:51 ]
Ach, via pastebin is het gelukt met gratis syntax highlighting (OCaml lijkt hiervoor genoeg op F#).
Het zou wel tof zijn als die private storage ook voor file hosting dienst kon doen, al was het alleen maar voor medetweakers. Maar als ik de tweakers manual goed heb begrepen, moet ik eerst nog flink doorblatenposten voordat ik ook maar in de buurt van 1 enkel bitje storage kom.
Het zou wel tof zijn als die private storage ook voor file hosting dienst kon doen, al was het alleen maar voor medetweakers. Maar als ik de tweakers manual goed heb begrepen, moet ik eerst nog flink doorblatenposten voordat ik ook maar in de buurt van 1 enkel bitje storage kom.
"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE
Leuk om te zien hoe jullie het beste speelveld probeerden te serveren.
Mijn code genereerde gewoon de schepen random. Ik kon niet zo zeer moeilijke borden hier tussen vinden en aangezien ik had verwacht dat de tegenstanders hun eigen geserveerde borden wel zelf zouden onthouden om die in 30 schoten uit te spelen, vond ik het niet nodig om die borden ook terug te geven. Achteraf had ik dat misschien beter kunnen doen. 
Het idee klinkt goed. Nu nog een vrijwilliger vinden die de volgende programmeervuur wil organiseren.Verwijderd schreef op maandag 15 februari 2010 @ 00:03:
Ik kreeg zojuist trouwens een ideetje voor een volgende contest: kamertje verhuren.
Speel ook Balls Connect en Repeat
Zelf heb ik ook nog een idee liggen voor een contest: Tron, op zich ook heel erg uitdagend zover ik het zag. Als er intresse naar is kan ik het idee wel weer DM'en. Op zich wil ik wel een nieuwe contest opzetten, al ben ik zelf niet een geweldige coder om zelf een programma in elkaar te zetten die als server functioneerd.
[ Voor 10% gewijzigd door P-Storm op 16-02-2010 19:58 ]
Verwijderd
Lijkt mij leuk maar is een spel zoals tron wel haalbaar.Het zal heel wat tijd nemen tot er 1 wedstrijdje gespeeld is.
Ik zie Vier op een Rij wel zitten (kan leuker gemaakt worden door grote grid of 5 op een rij...)
Ik zie Vier op een Rij wel zitten (kan leuker gemaakt worden door grote grid of 5 op een rij...)
Is de code van de winnaar al beschikbaar? Of heb ik die gemist?
Ik zie graag iets komen waar het niet om brute-force gaat, maar om slimmigheidjes. Vier-op-een-rij is trouwens opgelost.
Vier op een rij lijkt mij vrij gemakkelijk d.m.v. brute force...
Maar hier is ie dan: de source
Dit zijn de instructies:
Zipje uitpakken in een bepaalde map. Bij voorkeur de map 127.0.0.1/Zeeslag/ omdat dat al in de code is gedefinieerd.
Wat publiek op de server staat is de index.php. Die kan je starten om zo jouw code uit te voeren.
De testspeler die ik online had staan is Player.php. De speler waarmee ik op de zondagen heb meegedaan is MyPlayer.php en die is een stukje slimmer.
Als je het spel hebt gestart zie je nu een extra knopje verschijnen: Fire (loop). Hiermee kan je dus een compleet spel spelen, zonder steeds op Fire te klikken. Dat knopje had ik verwijderd om onnodig dataverkeer en processorkracht te besparen.
De code waarmee ik het spel heb gerund kan je beginnen met GameInput.php. In de code daarvan zette ik de spelernamen en de URLs. Alle spelers ondersteunden GET-requests, dus dat was makkelijk.
Zodra je op Start klikt, genereert hij een GamePool.txt en een Players.txt. Ook kan je meteen de spellen starten. Met CTRL+klik opent hij in een nieuw tabblad en begint het spel meteen te draaien.
Ik moet hier even bij vermelden dat een webbrowser een limiet heeft op het aantal gelijktijdige connecties.
De waarden network.http.max-connections-per-server en network.http.max-persistent-connections-per-server had ik uit voorzorg verhoogt naar 48.
Nadat de spellen klaar zijn kan je, op het eerste tabblad na, de tabbladen sluiten en weer opnieuw openen voor een volgende ronde.
Als je klaar bent, kan je het script Final.php aanroepen. Deze genereert de uitslagen in ubb-codes zodat ik het snel hier op het forum kon plakken.
Als iemand hier vragen, opmerkingen of verbeterpunten voor mij heeft, hoor ik dat graag.
Verder nogmaals iedereen bedankt voor het meedoen en ik kijk uit naar de volgende programmeervuur.
Maar hier is ie dan: de source
Dit zijn de instructies:
Zipje uitpakken in een bepaalde map. Bij voorkeur de map 127.0.0.1/Zeeslag/ omdat dat al in de code is gedefinieerd.
Wat publiek op de server staat is de index.php. Die kan je starten om zo jouw code uit te voeren.
De testspeler die ik online had staan is Player.php. De speler waarmee ik op de zondagen heb meegedaan is MyPlayer.php en die is een stukje slimmer.
Als je het spel hebt gestart zie je nu een extra knopje verschijnen: Fire (loop). Hiermee kan je dus een compleet spel spelen, zonder steeds op Fire te klikken. Dat knopje had ik verwijderd om onnodig dataverkeer en processorkracht te besparen.
De code waarmee ik het spel heb gerund kan je beginnen met GameInput.php. In de code daarvan zette ik de spelernamen en de URLs. Alle spelers ondersteunden GET-requests, dus dat was makkelijk.
Zodra je op Start klikt, genereert hij een GamePool.txt en een Players.txt. Ook kan je meteen de spellen starten. Met CTRL+klik opent hij in een nieuw tabblad en begint het spel meteen te draaien.
Ik moet hier even bij vermelden dat een webbrowser een limiet heeft op het aantal gelijktijdige connecties.
De waarden network.http.max-connections-per-server en network.http.max-persistent-connections-per-server had ik uit voorzorg verhoogt naar 48.
Nadat de spellen klaar zijn kan je, op het eerste tabblad na, de tabbladen sluiten en weer opnieuw openen voor een volgende ronde.
Als je klaar bent, kan je het script Final.php aanroepen. Deze genereert de uitslagen in ubb-codes zodat ik het snel hier op het forum kon plakken.
Als iemand hier vragen, opmerkingen of verbeterpunten voor mij heeft, hoor ik dat graag.
Verder nogmaals iedereen bedankt voor het meedoen en ik kijk uit naar de volgende programmeervuur.
Speel ook Balls Connect en Repeat
Excuses voor het niet posten van mijn code.
Kort voor de wedstrijd begon heb ik een 64-bit Windows geïnstalleerd, daarom ik heb als uitgangspunt zoveel mogelijk gebruik maken van 64-bit variabelen, om te kijken hoeveel winst dat oplevert. Resultaat is dat compileren voor x86 het programma twee keer zo snel maakt als x64
De aanval is brute force, er zijn twee threads omdat mijn computer twee cores heeft. Er is ook een optie om brute force niet tot het diepste te draaien, dat was bedoeld om tegenstanders te analysere, kijken wat voor bruteforce zij gebruiken (als ze dat gebruiken), maar de analyse heb ik niet af kunnen krijgen en heb ik weer verwijderd voor de wedstrijd begon.
De verdediging is gebaseerd op een veld met wat wisselingen in kolommen (in de logs kom je nog een tweede variant tegen, in een deel van ronde 4 heb ik de kaart verticaal gespiegeld, omdat ik hoopte dat dat beter zou werken tegen Soultaker, dat werkte niet en ik heb het originele veld weer teruggezet).
De code zoals die was op het moment van de wedstrijd:
Webserver: http://pastebin.com/f141efd70
Voorbereiding: http://pastebin.com/f73af6598
Oplossen van spellen: http://pastebin.com/f69b8135a
Verdediging: http://pastebin.com/f75976fbb
Logging: http://pastebin.com/f5d0d0bc2
Omzetten van strings in andere formaten: http://pastebin.com/f1e4bca3e
Kort voor de wedstrijd begon heb ik een 64-bit Windows geïnstalleerd, daarom ik heb als uitgangspunt zoveel mogelijk gebruik maken van 64-bit variabelen, om te kijken hoeveel winst dat oplevert. Resultaat is dat compileren voor x86 het programma twee keer zo snel maakt als x64

De aanval is brute force, er zijn twee threads omdat mijn computer twee cores heeft. Er is ook een optie om brute force niet tot het diepste te draaien, dat was bedoeld om tegenstanders te analysere, kijken wat voor bruteforce zij gebruiken (als ze dat gebruiken), maar de analyse heb ik niet af kunnen krijgen en heb ik weer verwijderd voor de wedstrijd begon.
De verdediging is gebaseerd op een veld met wat wisselingen in kolommen (in de logs kom je nog een tweede variant tegen, in een deel van ronde 4 heb ik de kaart verticaal gespiegeld, omdat ik hoopte dat dat beter zou werken tegen Soultaker, dat werkte niet en ik heb het originele veld weer teruggezet).
De code zoals die was op het moment van de wedstrijd:
Webserver: http://pastebin.com/f141efd70
Voorbereiding: http://pastebin.com/f73af6598
Oplossen van spellen: http://pastebin.com/f69b8135a
Verdediging: http://pastebin.com/f75976fbb
Logging: http://pastebin.com/f5d0d0bc2
Omzetten van strings in andere formaten: http://pastebin.com/f1e4bca3e
Thanks Onbekend!Onbekend schreef op woensdag 17 februari 2010 @ 23:47:
*source + Instructies*
Doet iets met Cloud (MS/IBM)
Mijn speler is hier gelokaliseerd:
http://pastebin.com/f568654ab
Wat hij gewoon doet is het beste vakje schieten, aan de hand van de gegeven rows en cols. Het duurde een eeuwigheid 'm zover te krijgen, dus daar was ik al erg gelukkig mee... Verder maakt de veldengenerator slechts een geldig veld, niks meer, of minder. Bruteforce was gezien de code die ik van anderen heb gezien sowieso niet mijn ding geweest, gezien ik ook weer niet zó goed php beheers/het probleem doorzie
Maar toch wel erg tof om te zien dat ook ik nog iets nuttigs met php kan
http://pastebin.com/f568654ab
Wat hij gewoon doet is het beste vakje schieten, aan de hand van de gegeven rows en cols. Het duurde een eeuwigheid 'm zover te krijgen, dus daar was ik al erg gelukkig mee... Verder maakt de veldengenerator slechts een geldig veld, niks meer, of minder. Bruteforce was gezien de code die ik van anderen heb gezien sowieso niet mijn ding geweest, gezien ik ook weer niet zó goed php beheers/het probleem doorzie
@t.c: ik wil je in ieder geval complimenteren dat je je speler in de finale redelijk stabiel werkend hebt gekregen, wat in de testronden nog niet het geval was. Aan de score is het niet echt te merken, maar ik denk wel dat je je code aanzienlijk verbeterd hebt tussendoor. 

(Trouwens, als mensen Tron leuk vinden, heb ik ook nog wel een eigengemaakte Zatacka-kloon liggen met een bot-interface waar een contest om heen te bouwen is, maar ik denk dat dat iets te hoogdrempelig is voor het publiek hier.)
Verder denk ik dat als iemand een contest van een bestaand spel wil maken, het leuker is als er custom regels verzonnen worden, zodat standaardmethoden niet direct van toepassing zijn en mensen gedwongen worden om zelf goed na te denken... Kamertje-verhuren lijkt me daarom in de standaarduitvoering niet ideaal, maar wellicht is er een interessante variant op te verzinnen.
Zoiets bedoel je? Deadline komende vrijdag!P-Storm schreef op dinsdag 16 februari 2010 @ 19:53:
Zelf heb ik ook nog een idee liggen voor een contest: Tron, op zich ook heel erg uitdagend zover ik het zag.
(Trouwens, als mensen Tron leuk vinden, heb ik ook nog wel een eigengemaakte Zatacka-kloon liggen met een bot-interface waar een contest om heen te bouwen is, maar ik denk dat dat iets te hoogdrempelig is voor het publiek hier.)
Verder denk ik dat als iemand een contest van een bestaand spel wil maken, het leuker is als er custom regels verzonnen worden, zodat standaardmethoden niet direct van toepassing zijn en mensen gedwongen worden om zelf goed na te denken... Kamertje-verhuren lijkt me daarom in de standaarduitvoering niet ideaal, maar wellicht is er een interessante variant op te verzinnen.
Beter laat dan nooit zal ik maar zeggen, dus mijn code staat nu ook online.
Helaas geen taart voor degene die erin weet te vinden waarom ik zoveel fout schoot, want daar ben ik zelf ondertussen al uitgekomen
Deze code zou sowieso met Delphi 2006 icm Indy 10 moeten werken, andere versies zou ook kunnen maar bij mij werkte het niet in 2009.
Helaas geen taart voor degene die erin weet te vinden waarom ik zoveel fout schoot, want daar ben ik zelf ondertussen al uitgekomen
Deze code zou sowieso met Delphi 2006 icm Indy 10 moeten werken, andere versies zou ook kunnen maar bij mij werkte het niet in 2009.
Niet gedacht dat er nog iemand ging meedoen met Delphi.dcm360 schreef op zaterdag 20 februari 2010 @ 12:11:
Beter laat dan nooit zal ik maar zeggen, dus mijn code staat nu ook online.
Helaas geen taart voor degene die erin weet te vinden waarom ik zoveel fout schoot, want daar ben ik zelf ondertussen al uitgekomen
Deze code zou sowieso met Delphi 2006 icm Indy 10 moeten werken, andere versies zou ook kunnen maar bij mij werkte het niet in 2009.
Mijn code is geschreven in FreePascal. In mijn dagelijkse werk gebruik ik Delphi 2006, maar ik vond het een leuk idee om voor dit projectje eindelijk eens te kijken naar FreePascal.
Mijn speler draaide als CGI programma op een Apache server op mijn lokale desktop.
De code is hier te vinden: Tweakers-Zeeslag.zip.
De losse files:
zeeslag.pas - de hoofdfile die de CGI verwerking doet en ook het plaatsen van schepen
zeeslaggame.pas - de eigenlijke speler (althans wat schieten betreft)
zeeslagutils.pas - Wat utilities functies, voornamelijk om te loggen
De meeste code heb ik geschreven in de eerste week, dus voor de 1ste testronde. Daarna heb ik er jammer genoeg niet veel meer aan kunnen veranderen door tijdsgebrek.
Om te schieten zoekt mijn speler het vakje met de meeste raakkans door simpel de Row en Col waarde op te tellen. Als Row of Col 0 is dan is de kans voor dat vakje ook 0. Daarna gebeuren nog enkele simpele controles om rekening te houden met de resultaten van de vorige schoten.
Om de schepen te plaatsen kijk de speler in de volledige lijst met gespeelde spellen en haalt daar random een veld uit waarvoor mijn speler een groot aantal schoten nodig had. Ik maakte dus gewoon gebruik van de velden die andere mensen mij toestuurden. Het was de bedoeling om dit nog wat intelligenter te maken maar na de 1ste testronde is daar eigenlijk niet veel aan veranderd.
Bedankt Onbekend voor de organistie en alle andere spelers bedankt voor het meespelen en het delen van jullie code en uitleg over hoe de spelers te werk gingen. Er zitten enkele mooie speeltechnieken bij.
Dit lijkt me wel een leukvervolg-spel: Regenwormen
een frustrerend spelletjeBolukan schreef op zondag 21 februari 2010 @ 21:26:
Dit lijkt me wel een leukvervolg-spel: Regenwormen
Even een kickje.
Zijn er mensen die interesse hebben in een nieuwe competitie?
En zo ja, voor welk spel heb je de voorkeur? En zijn er ook andere mensen die zich beschikbaar stellen om dit te organiseren?
Zijn er mensen die interesse hebben in een nieuwe competitie?
En zo ja, voor welk spel heb je de voorkeur? En zijn er ook andere mensen die zich beschikbaar stellen om dit te organiseren?
Speel ook Balls Connect en Repeat
Ja, altijd zin in. Lijkt me leuk. Zolang als het maar niet te moeilijk is
Maar weet niet zo een spelletje, geschikt hiervoor...
Interesse om mee te doen heb ik zeker.
Organiseren heb ik wss te weinig tijd/kennis voor.
Organiseren heb ik wss te weinig tijd/kennis voor.
Wishlist Backpack Survivors op Steam !
ik heb wel interesse om mee te doen, weet alleen niet precies hoeveel tijd ik ervoor heb.
Ik heb wel interesse in een nieuwe competitie. Ik zou het ook wel willen organiseren, maar ik weet eigenlijk niet goed welk spel geschikt is voor een competitie als deze.
Ik moet soms onverwacht naar het buitenland voor werk, dus een backup voor het starten/monitoren tijdens een sessie zou wel prettig zijn.
Ik moet soms onverwacht naar het buitenland voor werk, dus een backup voor het starten/monitoren tijdens een sessie zou wel prettig zijn.
You don't have to be crazy to do this job, but it helps ....
Verwijderd
ik heb ook wel interesse om mee te doen teminste als het niet bergen met tijd gaat kosten.
mooiste lijkt mee een soort van bordspel. dammen ?
mooiste lijkt mee een soort van bordspel. dammen ?
Verwijderd
Je kunt iets doen als dammen, of misschien iets simpelers nog als reversi ofzo. Je kunt natuurlijk ook de opdracht geven een voetbalteam AI te programmeren(aan de hand van een API) en dan hele wedstrijden simuleren ^^.
Ik ben ook wel in voor een nieuwe programmeer uitdaging. Echter lijkt mij reversie niet heel verstandig om te kiezen, daar zijn zoveel voorgekauwde algoritmes voor te vinden op internet. Maar als er een leuke uitdagende uitdaging komt zal ik zeker mee doen.
Verwijderd
dat is inderdaad het probleem, je moet iets vinden waarvoor nog geen 1000 voorgekouwde alghoritmen bestaan.
ik doe zeker mee, als ik iets leuks weet te bedenken post ik het wel hier.
ik doe zeker mee, als ik iets leuks weet te bedenken post ik het wel hier.
Creepy had een idee laatst, maar die was nog bezig met de uitwerking ervan.
Doet iets met Cloud (MS/IBM)
Aan het einde van het programmeervuurtopic stonden ook nog wat ideeen volgens mij. Ik heb ook wel interesse om mee te doen, organiseren heb ik te weinig tijd voor.
D2k schreef op woensdag 22 september 2010 @ 09:18:
Creepy had een idee laatst, maar die wasis nog bezig met de uitwerking ervan.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Niet iets waarin je per speler meerdere bots hebt die samen moeten werken? Soort AntArena achtig idee; maar dan wellicht meer in spelvorm.
Misschien is dit leuk om tussentijds te doen:
CodeCup 2011: DVONN
CodeCup 2011: DVONN
If money talks then I'm a mime
If time is money then I'm out of time
Een paar jaar geleden was er volgens mij een opdracht waarbij je een vecht robot moest programmeren ofzo aan de hand van een api.Verwijderd schreef op dinsdag 21 september 2010 @ 21:02:
Je kunt iets doen als dammen, of misschien iets simpelers nog als reversi ofzo. Je kunt natuurlijk ook de opdracht geven een voetbalteam AI te programmeren(aan de hand van een API) en dan hele wedstrijden simuleren ^^.
[Contest] BotWars
[ Voor 4% gewijzigd door Jegorex op 22-09-2010 21:33 ]
* Creepy mept D2k. Working on it as we speaktypeD2k schreef op woensdag 22 september 2010 @ 09:18:
Creepy had een idee laatst, maar die was nog bezig met de uitwerking ervan.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Werk door slet ;-) Die tweet is al een maand oudCreepy schreef op woensdag 22 september 2010 @ 21:15:
[...]
* Creepy mept D2k. Working on it as we speaktype
Doet iets met Cloud (MS/IBM)
Virtuele robot wars/battle bots! Alleen jammer dat, bij de meeste (command line) implementaties, de vonken er niet echt vanaf vliegen en ook het staalverbuigen tot een minimum beperkt is
Pluspunten als je graphics en sounds meelevert.SH4D3H schreef op woensdag 22 september 2010 @ 22:16:
[...]
Virtuele robot wars/battle bots! Alleen jammer dat, bij de meeste (command line) implementaties, de vonken er niet echt vanaf vliegen en ook het staalverbuigen tot een minimum beperkt is
[ Voor 75% gewijzigd door Bolukan op 23-09-2010 07:52 ]
Ik heb toen voor BotWars ook nog een entry geschreven.. wil best nog een keer met zoiets meedoen. Ik vind het spel van de DVONN contest wel erg complex en bovendien is het aantal talen beperkt. Ik vind de HTTP aanpak van Zeeslag wel leuk.
Heb alleen ook nog geen idee voor een spel
Zat te denken aan kaartspellen, maarja dan zit je met de geluksfactor en het feit dat de uitdaging misschien niet heel groot is. De grafische weergave is echter wel weer een no-brainer.
Heb alleen ook nog geen idee voor een spel
Ik wil dit keer ook wel mee doen, heb er nu wat tijd voor
Ik denk dat veel kaartspellen zich prima lenen vanwege de eenvoud van handelen, de vaak simpele regels en eenvoudige strategieën bij veel spellen. Ook spellen als kamertje verhuren en galgje zijn redelijk goed te implementeren.
Voordeel van deze spellen is dat de meeste ze ook wel eens zelf gespeeld hebben en daarbij een eigen strategie hebben ontwikkeld en de regels goed kennen.
Ik zou eerder meedoen als ik de regels niet eerst hoef te bestuderen en het zelf al eens gespeeld heb.
Bij een spel als rummikub zou je geleidelijk de regels ingewikkelder kunnen maken (jokers). Eventueel zou je voor versie met en zonder kunnen kiezen als mensen meer uitdaging zoeken.
Misschien het populaire doch simpele pesten?
Zou je volgens mij ook een mmo van kunnen maken
Met honderd bots tegelijk pesten.
Als mensen zichzelf op de centrale server in en uit kunnen schrijven kan je het misschien standaard eens per week laten draaien.
Voordeel van deze spellen is dat de meeste ze ook wel eens zelf gespeeld hebben en daarbij een eigen strategie hebben ontwikkeld en de regels goed kennen.
Ik zou eerder meedoen als ik de regels niet eerst hoef te bestuderen en het zelf al eens gespeeld heb.
Bij een spel als rummikub zou je geleidelijk de regels ingewikkelder kunnen maken (jokers). Eventueel zou je voor versie met en zonder kunnen kiezen als mensen meer uitdaging zoeken.
Misschien het populaire doch simpele pesten?
Zou je volgens mij ook een mmo van kunnen maken
Met honderd bots tegelijk pesten.
Als mensen zichzelf op de centrale server in en uit kunnen schrijven kan je het misschien standaard eens per week laten draaien.
👑
Het leukste is natuurlijk om van een spel de spelregels iets te veranderen waarbij de standaard algoritmes niet gaan werken. Ook moet de geluksfactor laag blijven om zo de slimme stukken code te kunnen scheiden van de slechtere stukken code.
Een leuk idee is bijvoorbeeld misschien in een vier-op-een-rij-raster ( 7x6 regels) om de beurt een steen in te werpen totdat het geheel helemaal vol is. En daarna het aantal 3 op een rij gaan tellen.
Of bijvoorbeeld kamertjeverhuur met drie spelers waardoor ook de standaard tactiek niet meer voldoet.
Een leuk idee is bijvoorbeeld misschien in een vier-op-een-rij-raster ( 7x6 regels) om de beurt een steen in te werpen totdat het geheel helemaal vol is. En daarna het aantal 3 op een rij gaan tellen.
Of bijvoorbeeld kamertjeverhuur met drie spelers waardoor ook de standaard tactiek niet meer voldoet.
Speel ook Balls Connect en Repeat
Behalve dat het 3 op-een-rij me niet zo aanspreekt sluit ik me hier bij aan.Onbekend schreef op donderdag 23 september 2010 @ 18:01:
Het leukste is natuurlijk om van een spel de spelregels iets te veranderen waarbij de standaard algoritmes niet gaan werken. Ook moet de geluksfactor laag blijven om zo de slimme stukken code te kunnen scheiden van de slechtere stukken code.
Een leuk idee is bijvoorbeeld misschien in een vier-op-een-rij-raster ( 7x6 regels) om de beurt een steen in te werpen totdat het geheel helemaal vol is. En daarna het aantal 3 op een rij gaan tellen.
Of bijvoorbeeld kamertjeverhuur met drie spelers waardoor ook de standaard tactiek niet meer voldoet.
Ik doe ook mee als er een leuk idee is.
Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW
Ik dacht nog aan voertuigjes die je met simpele code (100 bytes) een veld in moet sturen met een opdracht (elkaar raken of vlag). Bij terugkomst krijg je (je masterprogramma) terug wat het voertuig allemaal heeft gezien en mag je een ander voertuig inbrengen. ('Verkenner', 'Doolhof-specialist', etc). Het is nog een idee...
Dat was het idee van Bot Wars ook wel een beetje, maar dat was toch niet echt een succes. Ik denk dat een bestaand spel (want: bekend, uitgebalanceerd etc.) toch een beter idee is.Bolukan schreef op zaterdag 25 september 2010 @ 16:01:
Ik dacht nog aan voertuigjes die je met simpele code (100 bytes) een veld in moet sturen met een opdracht (elkaar raken of vlag). Bij terugkomst krijg je (je masterprogramma) terug wat het voertuig allemaal heeft gezien en mag je een ander voertuig inbrengen. ('Verkenner', 'Doolhof-specialist', etc). Het is nog een idee...
Verwijderd
We kunnen ook voor OpenTTD ieder een AI schrijven en die tegen elkaar laten "strijden". Het nadeel hiervan is dat dit enkel in C kan
.
Is al een keer gedaan: OpenTTD Programmeer Challenge. Toen mocht je alleen de scripttaal Squirrel gebruiken. Wel een leuk idee trouwens.Verwijderd schreef op zaterdag 25 september 2010 @ 18:33:
We kunnen ook voor OpenTTD ieder een AI schrijven en die tegen elkaar laten "strijden". Het nadeel hiervan is dat dit enkel in C kan.
Misschien iets zoals poker, waarbij burn cards bekend worden gemaakt.
Verwijderd
Inderdaad Texas Hold 'em lijkt me leuk. De spelregels zijn vrij simpel, dus iedereen kan meedoen met een eenvoudige bot. Een goede bot maken is daarentegen een stuk moeilijker. Om te voorkomen dat spelers te snel er uit liggen zou je nog kunnen overwegen te beperken tot de limit-variant ipv no limit, maar dat is een heel stuk minder uitdagend om te schrijven.
[ Voor 34% gewijzigd door Verwijderd op 26-09-2010 17:45 ]
Verwijderd
Het liefst zou ik gewoon een heel nieuw GoT contest zien. Aangezien ik zo goed als niet meer programmeer lijkt het me wel leuk om mee te doen. hint
[ Voor 5% gewijzigd door Verwijderd op 26-09-2010 19:02 ]
Verwijderd
ff vraagje tussen door. hoeveel uur word er gemiddeld gespendeerd aan de opdracht ? uren dagen ?
Dat ligt aan je ervaring en perfectionismeVerwijderd schreef op zondag 26 september 2010 @ 19:48:
ff vraagje tussen door. hoeveel uur word er gemiddeld gespendeerd aan de opdracht ? uren dagen ?
Na twee middagjes had ik het gros van de zeeslag-contest in php voor elkaar. Alleen was de ai nog waardeloos. Toen zag ik ook in dat ik te weinig tijd zou hebben voor de afronding en heb ik het project gestaakt
Verwijderd
je kan meedoen met een paar uur, maar als je 1e wil worden ben je toch wel een paar dagen verder
afhankelijk van het gekozen algoritme natuurlijk.
afhankelijk van het gekozen algoritme natuurlijk.
Verwijderd
Heb net een heel leuke gevonden, het nadeel is dat hij al bestaat: http://www.ai-contest.com
Is dan een soort multiplayer bot worms niet veel leuker? Ipv 1 vs 1 met zn allen in 1 veld en tegen elkaar. Iemand zal dan alleen wel een server moeten maken
Worms heeft geen 'AI', de computer is daar zelfs expres onnauwkeurig. Je kunt simpel uitrekenen hoe hard je moet schieten met welke angle om waar terecht te komen. Laat dat nu net iets zijn waar computers erg goed in zijn.Site.to.Make schreef op maandag 27 september 2010 @ 15:39:
Is dan een soort multiplayer bot worms niet veel leuker? Ipv 1 vs 1 met zn allen in 1 veld en tegen elkaar. Iemand zal dan alleen wel een server moeten maken
https://niels.nu
Daarom, alleen maar AI's tegen elkaar
Stop 20 AI's in 1 veld en ik denk dat je best een leuke uitdaging nog krijgt.
Spellen die afhankelijk zijn van snel handelen en nauwkeurig handelen zijn naar mijn bescheiden mening geen leuke opties. Dit is een kwestie van achterhalen welk algoritme de game-server gebruikt om te kijken of het raak of mis is en je hebt de perfecte AI. Volgens mij heeft(/had) Wikipedia: Tank Wars de mogelijkheid om (zo goed als) perfecte AI's tegen elkaar te laten spelen. Was niet echt een uitdaging om naar te kijken.
Ik denk dat spellen die voor win of verlies afhankelijk zijn van kans en strategie en niet van tijd en nauwkeurigheid veel leuker zijn om te programmeren.
Ik wil nogmaals de optie multiplayer hartejagen aanhalen. Vanwege de multiplayer variant zijn er nog niet zoveel tactieken te vinden denk ik.
Ik denk dat spellen die voor win of verlies afhankelijk zijn van kans en strategie en niet van tijd en nauwkeurigheid veel leuker zijn om te programmeren.
Ik wil nogmaals de optie multiplayer hartejagen aanhalen. Vanwege de multiplayer variant zijn er nog niet zoveel tactieken te vinden denk ik.
[ Voor 1% gewijzigd door ajakkes op 27-09-2010 16:40 . Reden: Link edit ]
👑
yathzee is ook een goeie om een AI voor te bedenkenajakkes schreef op maandag 27 september 2010 @ 16:38:
Spellen die afhankelijk zijn van snel handelen en nauwkeurig handelen zijn naar mijn bescheiden mening geen leuke opties. Dit is een kwestie van achterhalen welk algoritme de game-server gebruikt om te kijken of het raak of mis is en je hebt de perfecte AI. Volgens mij heeft(/had) Wikipedia: Tank Wars de mogelijkheid om (zo goed als) perfecte AI's tegen elkaar te laten spelen. Was niet echt een uitdaging om naar te kijken.
Ik denk dat spellen die voor win of verlies afhankelijk zijn van kans en strategie en niet van tijd en nauwkeurigheid veel leuker zijn om te programmeren.
Ik wil nogmaals de optie multiplayer hartejagen aanhalen. Vanwege de multiplayer variant zijn er nog niet zoveel tactieken te vinden denk ik.
Hmm, bij Yathzee speel je niet echt tegen elkaar toch? Keuzes van je tegenstander hebben geen invloed op jouw keuze. Geluk speelt een grote rol en strategie een vrij kleine. Of kennen jullie een variant waar dit niet zo is?
👑
Hmm mja dat is misschien wel een beetje een probleem. er zijn wel multiplayer yathzee spelletjes alleen daar speel je tegenelkaar voor de punten...ajakkes schreef op maandag 27 september 2010 @ 16:49:
Hmm, bij Yathzee speel je niet echt tegen elkaar toch? Keuzes van je tegenstander hebben geen invloed op jouw keuze. Geluk speelt een grote rol en strategie een vrij kleine. Of kennen jullie een variant waar dit niet zo is?
Het aantal keren dat een speler moet antwoorden moet wel laag blijven omdat de response tijden soms hoog zijn. Als je de geluksfactor laag wil houden, zal je elke speler meerdere keren een spel moeten laten spelen.
Mijn ervaring is dat er altijd trage servers of spelers tussen zitten die de boel ophouden.
Een hartenjagenspel hangt, net zoals vele kaartspellen, aardig veel van geluk af en is niet zo geschikt vind ik.
Rummikub hing wat minder met geluk af en zag je duidelijk de verschillen tussen de verschillende codes.
Mijn ervaring is dat er altijd trage servers of spelers tussen zitten die de boel ophouden.
Een hartenjagenspel hangt, net zoals vele kaartspellen, aardig veel van geluk af en is niet zo geschikt vind ik.
Rummikub hing wat minder met geluk af en zag je duidelijk de verschillen tussen de verschillende codes.
Speel ook Balls Connect en Repeat
Van Yahtzee is de totale optimale strategie berekend.
*Ah, hier heb ik hem al weer gevonden*
Oeps daar gaat mijn winkans
Edit: Maar zo'n soort spelletje is wel een goed idee.
*Ah, hier heb ik hem al weer gevonden*
Oeps daar gaat mijn winkans

Edit: Maar zo'n soort spelletje is wel een goed idee.
[ Voor 18% gewijzigd door Bolukan op 27-09-2010 20:20 ]
Verwijderd
En als we nou eens een soort variant op van die tower defence spellen die je wel eens ziet maken?
Nee, want de AI die als eerste vuurt wint, dat is het punt dus. Dat is net zoals als een AI schrijven voor boter-kaas-en-eieren.Site.to.Make schreef op maandag 27 september 2010 @ 16:25:
Daarom, alleen maar AI's tegen elkaarStop 20 AI's in 1 veld en ik denk dat je best een leuke uitdaging nog krijgt.
Nee, als je dat door een AI laat spelen is het puur geluk.Rmg schreef op maandag 27 september 2010 @ 16:41:
yathzee is ook een goeie om een AI voor te bedenken
[ Voor 23% gewijzigd door Hydra op 29-09-2010 16:10 ]
https://niels.nu