Programmeervuur zeeslag

Pagina: 1 2 ... 7 Laatste
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07

Programmeervuur zeeslag

Helaas is deze programmeervuur afgelopen. Je kunt dus niet meer meedoen.

Na een succesvol programmeervuur rummikub van Soultaker is het nu tijd voor een nieuwe programmeervuur. Doordat mijn lokale webserver de Get en Post requests niet altijd netjes afhandelde heeft het eventjes geduurd voordat ik mijn code goed werkend kreeg. Ik heb verschillende spelsituaties getest en gezocht naar een goed spelelement zodat het niet alleen maar op goed geluk aan komt. Verder heb ik deze programmeervuur grotendeels gebaseerd op de vorige programmeervuur zodat jullie voor sommige punten het wiel niet opnieuw uit hoeven te vinden.

Het doel is om een programma te schrijven dat een variant op Zeeslag kan spelen via een webinterface. Dit programma kan dan gebruikt worden om een toernooitje te spelen tegen de andere deelnemers.

Moeilijkheidsgraad
Gemiddeld. Om de basisregels in code om te zetten zal het lastigste deel zijn denk ik. Daarna komt het aan op logica en tactiek. Maar zoals altijd geldt: meedoen is belangrijker dan winnen!. :)

Spelregels
De programmeervuur zeeslag is grotendeels gebaseerd op de papieren versie uit de bekende puzzelboekjes. Eerst wordt door speler 1 de schepen in een 2 dimensionaal veld geplaatst. Daarna moet speler 2 alle geplaatste schepen vinden. Dit gebeurt d.m.v. het selecteren van een vakje, waarna de speler terug krijgt of in dat vlakje een stukje schip lag of niet. Uiteraard is het de bedoeling dat het aantal pogingen hiertoe minimaal is.

De server werkt eigenlijk als volgt:
  1. Ontvang gegevens speler 1 en speler 2.
  2. Ontvang van speler 1 de posities van de schepen.
  3. Ontvang van speler 2 een kolom en regelnummer.
  4. Ga naar de vorige stap als speler 2 nog niet alle schepen van speler 1 heeft gevonden.
  5. Zend aan speler 1 en speler 2 de uitslag van dit spel.



De opdracht kan je eigenlijk opsplitsen in twee delen:
  1. Het plaatsen van de schepen in het veld. Hierbij is het doel om de schepen zodanig te positioneren zodat de tegenstander de schepen lastig kan vinden.
  2. Het vinden van de geplaatste schepen in het veld. Hierbij is het de bedoeling om zo snel mogelijk alle schepen te vinden.
Je moet ze allebei programmeren. Als je dat niet doet heeft dat een zeer negatief effect op je eindscore. :)


Alle spelers zullen minimaal twee keer tegen elkaar moeten spelen; Namelijk één keer om de schepen te plaatsen, en één keer om de schepen te vinden. Afhankelijk van het totale aantal deelnemers zal dit een aantal malen herhaald worden zodat geluk een kleinere rol gaat spelen, en dat tactiek de winstgevender is.

Het spel zal gespeeld worden op een speelveld van 16x16 vakjes.
De vlakken lopen van A1 t/m P16, waarbij de de kolommen met letters en de regels met cijfers
zijn aangeduid.


Technische regels
Implementeer een Zeeslagspeler met een webinterface, dat een GET of POST request kan ontvangen en het resultaat als plain-text in de body teruggeeft.


Request parameters
Hier staan alle mogelijke parameters beschreven die ontvangen kunnen worden. Verderop in deze post is te vinden wanneer je welke parameter kan verwachten.

ParameterBeschrijvingVoorbeeld
ActionDe actie wat door het programma uitgevoerd moet worden.De mogelijke waarden zijn “Ships”, “Fire” en “Finished”.
OpponentEen unieke identificatie van de tegenstander. Indien je eerder deze tegenstander hebt gehad kan mogelijk de tactiek te verbeteren.Willekeurige tekenreeks zoals “X6T3” of “94DQ294V3C”
ShotsDe locaties waar al op geschoten is, inclusief het resultaat. Het eerste karakter is een W indien er op die locatie water ligt, of een S indien er een deel van een schip ligt. De volgende karakter is de kolom, en het getal daarna geeft het regelnummer aan.Een mogelijke waarde is “WC4.WF11.SH5.SH6.SH7” waarbij er al drie scheepsdelen op de H-lijn zijn gevonden.
RowsDit zijn 16 getallen welke gescheiden zijn door een punt. Deze getallen geven aan hoeveel delen van schepen op die regel liggen.Een mogelijke waarde is “4.0.3.0.4.0.3.1.1.1.2.2.4.0.5.0”
ColsHetzelfde als bij de parameter Rows, maar dan geldt dit voor de kolommen.Zie hierboven.
ShipsHierin staat waar de schepen lagen.Mogelijke waarde “5HK8.4HH5.4HI2.3HI15.3VP12. 3HE1.2VP1.2VK10.2VA1.2VM11” Dit is het zelfde formaat waarin de schepen geplaatst moesten worden.
PlayerAls dit een 1 is, dan ben je de speler die de schepen hebt geplaatst. Bij een 2 ben je de speler die naar de schepen hebt gezocht.1 of 2
GameIdDit is een uniek nummer (timestamp) dat per spel zal verschillen.1264703546



Het plaatsen van schepen
Indien de parameter Action de waarde “Ships” bevat dienen er schepen geplaatst te worden.
De parameters Opponent en GameId worden dan ook meegeven, maar het is niet verplicht om hiervan gebruik te maken.

De volgende schepen dienen allemaal te worden geplaatst:
  • 1 schip van 5 vakjes lang (Vliegdekschip)
  • 2 schepen van 4 vakjes lang (Slagschip of kruiser)
  • 3 schepen van 3 vakjes lang (Onderzeeboot of torpedojager)
  • 4 schepen van 2 vakjes lang (Mijnenveger of fregat)
Deze schepen mogen willekeurig in het veld worden geplaatst en mogen de randen van het veld raken.
De enige eis is dat de schepen elkaar niet mogen raken of kruisen. Er dient dus minimaal 1 vakje water tussen de schepen te zitten. Schepen mogen elkaar ook niet diagonaal raken.

Het aangeven van een schip gaat op de volgende manier:
  • Het eerste teken is een cijfer en geeft de lengte van het schip aan. Dit kan dus alleen de waarden 2 t/m 5 hebben.
  • Het tweede teken geeft de richting aan. H = horizontaal en V = verticaal.
  • Het derde teken geeft de kolom weer in de vorm van A t/m P.
  • Het vierde en eventueel het vijfde karakter geeft het regelnummer weer 1 t/m 16.
4HC9 geeft aan dat er een schip op de vlakken C9, D9, E9 en F9 ligt.
2VN14 geeft aan dat er een schip op de vlakken N14 en N15 ligt.
Bij de uitvoer dienen de schepen gescheiden te zijn door een punt.

Voorbeeld:
Bij een request van ?Action=Ships&Opponent=X6T3
Kan een mogelijke uitvoer 5HK8.4HH5.4HI2.3HI15.3VP12.3HE1.2VP1.2VK10.2VA1.2VM11 zijn.


Het vinden van de geplaatste schepen
Indien de parameter Action de waarde “Fire” bevat dient er een vakje teruggegeven te worden.
De parameter Shots geeft aan waar al geschoten is en wat het resultaat was.
De parameters Rows en Cols geven aan hoeveel scheepsdelen er op die betreffende regel of kolom liggen.
De parameters Opponent en GameId worden dan ook weer meegeven, maar het is niet verplicht om hiervan gebruik te maken.

De uitvoer dient gewoon een vakje te zijn.
Het eerste teken geeft de kolom weer in de vorm van A t/m P.
De rest geeft de regelnummer weer 1 t/m 16.
Het spel eindigt automatisch als het laatste deel van een schip is gevonden.

Voorbeeld:
Bij een request ?Action=Fire&Opponent=Name1&Rows=4.0.3.0.4.0.3.1.1.1.2.2.4.0.5.0&Cols=3.1.2.2.1.7.2.2.2.2.2.1.3.0.0.0&Shots=WM15.SE15.SD15
Kan een mogelijke uitvoer C15 zijn.

In dit voorbeeld liggen bijvoorbeeld in de laatste drie kolommen (N, O en P) geen schepen en in kolom E ligt maar één deel van een schip.
Aangezien op E15 al een deel van een schip is gevonden, kunnen er in de rest van deze kolom verder geen andere scheepsdelen voorkomen en hoef je er daar dus ook niet naar te zoeken. ;)



Einde van het spel
Zodra het laatste deel van het laatste schip is gevonden is het spel over.
Aan beide deelnemers wordt dan een request gestuurd met in de Action-parameter “Finished” gestuurd. In de parameter Ships is aangegeven hoe de schepen lagen, en in de parameter Shots staan waar de schoten afgevuurd waren. In de parameter Opponent staat wie de tegenstander was.
De parameter Player wordt ook verzonden. Als dit een 1 is, dan ben je de speler die de schepen hebt geplaatst. Bij een 2 ben je de speler die naar de schepen hebt gezocht.
De parameter GameId wordt ook verzonden.

Het is niet verplicht om hier iets mee te doen, maar het kan misschien handig zijn.


Puntentelling
Bij het vinden van de schepen, kost elk schot dat het programma nodig heeft 1 punt.
Dit punt wordt bij de tegenstander opgeteld.
Het programma met uiteindelijk de meeste punten is de winnaar.


Uitzonderingen
Bij het plaatsen van schepen krijgt het programma maximaal vijf keer de mogelijkheid om de schepen te plaatsen. Lukt dat niet, dan wordt er vanuit gegaan dat de tegenstander alle schepen heeft gevonden zonder mis te schieten. De score wordt dan maar met 30 verhoogt, en de tegenstander kost het dus maar 30 punten.

Bij het vinden van de schepen wordt elke teruggegeven waarde behandeld als een schot. Indien de teruggegeven waarden niet correct is kost dat ook een punt.
Het maximum is 256 pogingen. (16x16)

Voor elk request krijgt het programma vijf seconden de tijd om een waarde terug te geven.
(Intern wordt er een iets hogere request timeout gebruikt vanwege network latency e.d.)


Testen
Je kunt hier je speler testen en zo verifiëren dat je de regels en het protocol goed geïmplementeerd hebt.


Competities
DatumTijdDeelnemers
Testcompetitie 1Zondag 31 januariVanaf 19:00 uurResultaten
Testcompetitie 2Zondag 7 februariVanaf 19:00 uurResultaten
EindcompetitieZondag 14 februariVanaf 17:00 uurResultaten


Met dank aan Soultaker waarvan ik zijn post en zijn programma-interface grotendeels heb overgenomen.
En dank aan de moderators van PRG voor de controle en acceptatie van dit topic. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Leuk, eens kijken of ik wat kan maken ;)

Acties:
  • 0 Henk 'm!

Anoniem: 341513

Heel leuk.Alleen snap ik als beginnende programmeur de GET/POST niet.Wil dit zeggen dat je het programma moet in php schrijven?Helaas ken ik nog niets over php. :)

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 10-06 15:46
Ziet er interessant uit. Bij deze alvast mijn inschrijving.

En ook meteen de eerste vraag/opmerking:
Het programma met uiteindelijk de meeste punten is de winnaar.
Dit heeft als gevolg dat het programma dat het beste de schepen kan 'verbergen' de winnaar zal zijn, niet het programma met de beste methode om schepen te zoeken/raken. Het lijkt me logischer om dat om te draaien.
Dus: Geef iemand 1 punt voor elk door hem/haar gelost schot, de persoon met de minste punten wint uiteindelijk.
Anoniem: 341513 schreef op vrijdag 22 januari 2010 @ 22:33:
Heel leuk.Alleen snap ik als beginnende programmeur de GET/POST niet.Wil dit zeggen dat je het programma moet in php schrijven?Helaas ken ik nog niets over php. :)
Het gebruik van GET/POST betekend in ieder geval dat het spel over HTTP gespeeld gaat worden. Welke taal je wilt gebruiken om deel te nemen is aan jouw. PHP en ASP(.NET) zijn voor de hand liggende opties, maar niet de enige. Kijk maar in het vorige topic (Soultaker in "Het Grote Tweakers Programmeervuur") voor wat ideeen daarover.

[ Voor 38% gewijzigd door EdwinG op 22-01-2010 22:40 . Reden: +quote van T0MM ]

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

Anoniem: 341513

Even het ander topic doorgelezen.Via ruby kan ik wel GET/POST maar hoe krijgt mijn programma de info van het jurryprogramma.

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Via de GET/POST parameters ;) Het juryprogramma stuurt een HTTP-request naar jouw programma met als GET/POST parameters de data.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Anoniem: 341513 schreef op vrijdag 22 januari 2010 @ 23:00:
Even het ander topic doorgelezen.Via ruby kan ik wel GET/POST maar hoe krijgt mijn programma de info van het jurryprogramma.
Verdiep je even in de materie, zet een test op en stoei met wat code. Dit topic is niet de plek om basics als GET/POST uit te leggen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
EdwinG schreef op vrijdag 22 januari 2010 @ 22:34:
Dit heeft als gevolg dat het programma dat het beste de schepen kan 'verbergen' de winnaar zal zijn, niet het programma met de beste methode om schepen te zoeken/raken. Het lijkt me logischer om dat om te draaien.
Dus: Geef iemand 1 punt voor elk door hem/haar gelost schot, de persoon met de minste punten wint uiteindelijk.
Het werkt beide kanten op.

Met de parameters Cols en Rows weet speler 2 waar de schepen ongeveer liggen.
Speler 1 kan met het plaatsen van de schepen hier rekening mee houden.
Elk schot wat speler 2 nodig heeft kost speler 2 een punt, en komt bij speler 1 erbij.

Als iemand het zoekalgoritme inefficiënt heeft geschreven kan dat dus veel punten opleveren voor speler 1.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Hee, dit lijkt me ook wel leuk om mee te doen :)

Eens zien of ik morgenochtend iets als een simpele Indy HTTP Server kan opzetten op een vrije poort en de commando's werkend kan krijgen. Tactiek moet denk ik later maar volgen, dat is denk ik ook het ingewikkeldste. Eerst maar bedenken of ik dat ga scripten of hardcoden :)

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Ha leuk, ik ga ook mee doen. Proberen met C# eens iets te klussen.

Waarom eigenlijk dat Cols & Rows? Op die manier wordt toch al veel van de sluier opgelicht?

[ Voor 41% gewijzigd door - peter - op 22-01-2010 23:52 ]


Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 16-06 18:03
Leuk om eens mee te spelen :)
Ik zal er dit weekend eens beter naar kijken als ik tijd heb.

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 10-06 15:46
- peter - schreef op vrijdag 22 januari 2010 @ 23:47:
Waarom eigenlijk dat Cols & Rows? Op die manier wordt toch al veel van de sluier opgelicht?
Goed punt, ik weet niet hoe de verhoudingen (aantal & afmeting schepen/veld) is, maar de boekjes zijn meestal met een paar hulppunten op te lossen. Met een beetje geluk kun je dus alle schoten raak hebben.

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Onbekend schreef op vrijdag 22 januari 2010 @ 23:21:
[...]
Met de parameters Cols en Rows weet speler 2 waar de schepen ongeveer liggen.
Dit is toch afleidbaar uit Shots?

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 10-06 15:46
qanar schreef op zaterdag 23 januari 2010 @ 12:18:
Dit is toch afleidbaar uit Shots?
Shots zijn de schoten die al zijn gelost door speler 2, en geven aan het einde uiteraard de exacte locatie aan van de schepen.

Cols en Rows geven aanwijzingen in de richting van de schepen, nog voordat schoten gelost zijn. In het voorbeeld van de startpost zijn bijvoorbeeld 3 schoten gelost, maar veel meer scheepsdelen bekend.
Cols en Rows geven dus niet aan wat al gevonden is in een rij/kolom, maar wat aanwezig is in een rij/kolom.

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
dank

dan is het dus eigenlijk meer zo'n 'vind de figuur-puzzel'

Acties:
  • 0 Henk 'm!

Anoniem: 156876

Count me in! :Y

Acties:
  • 0 Henk 'm!

Anoniem: 341513

De code voor zeeslag zelf is nu helemaal af (was er al mee begonnen toen ik las dat de TS deze competitie ging maken).Nu nog de code om hem te laten meespelen.Maar ik zit nog met 1 probleem wat ik niet snap,wanneer weet mijn speler wanneer het zijn beurt is om te spelen?

Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Kan je uit "opponent" afleiden wat de huidige map is? (dus, wisselt dat per spel)
Zo ja, dan kan ik data cachen met dat als UID.
Zo niet, is het geen probleem, gezien alle data aanwezig is, maar kost het meer cycles om gamestate weer op te bouwen :P

Daarnaast, er zijn geen regels over of schepen naast elkaar mogen liggen?

[ Voor 13% gewijzigd door MLM op 23-01-2010 14:54 ]

-niks-


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
qanar schreef op zaterdag 23 januari 2010 @ 12:27:
dank

dan is het dus eigenlijk meer zo'n 'vind de figuur-puzzel'
Ja, het lijkt daar wel op.
Anoniem: 341513 schreef op zaterdag 23 januari 2010 @ 14:52:
De code voor zeeslag zelf is nu helemaal af (was er al mee begonnen toen ik las dat de TS deze competitie ging maken).Nu nog de code om hem te laten meespelen.
Waarschijnlijk zijn er meer mensen die dat gedaan hebben. ;)
Maar ik zit nog met 1 probleem wat ik niet snap,wanneer weet mijn speler wanneer het zijn beurt is om te spelen?
Zodra de speler een request krijgt waarvan de parameter Action de waarde “Fire” moet je dus een locatie teruggeven. Dit staat ook netjes in de startpost. :)
MLM schreef op zaterdag 23 januari 2010 @ 14:53:
Kan je uit "opponent" afleiden wat de huidige map is? (dus, wisselt dat per spel)
Zo ja, dan kan ik data cachen met dat als UID.
Zo niet, is het geen probleem, gezien alle data aanwezig is, maar kost het meer cycles om gamestate weer op te bouwen :P
Nee, elke keer als je de zelfde tegenstander hebt heeft de parameter "Opponent" de zelfde waarde.
Ik raad je dan ook gewoon aan om de parameters te gebruiken die jouw programma binnenkrijgt.
Daarnaast, er zijn geen regels over of schepen naast elkaar mogen liggen?
Er zijn wel regels die ook netjes in mijn startpost staan:
De enige eis is dat de schepen elkaar niet mogen raken of kruisen. Er dient dus minimaal 1 vakje water tussen de schepen te zitten. Schepen mogen elkaar ook niet diagonaal raken.

[ Voor 6% gewijzigd door Onbekend op 23-01-2010 15:37 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Zo, enorm simple random AI werkt, samen met I/O 'library'. Nu eens even wat slimmigheden inbouwen om te kijken of een vakje water is ;)

Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 16-06 18:03
ERROR

The requested URL could not be retrieved

While trying to retrieve the URL: http://tweakers.megabyet.net/Server.php

The following error was encountered:

Zero Sized Reply
Squid did not receive any data for this request.

Your cache administrator is webmaster.
Generated Sat, 23 Jan 2010 14:51:37 GMT by sv1.megabyet.net (squid/2.7.STABLE7)
Ik kreeg dit tijdens het klikken op Fire op je testpagina.

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
Ik weet dat die host wel wat langzaam is, maar die foutmelding heb ik nog niet eerder gezien.
Kan je wel op Back klikken en dan weer doorgaan?

Ik zal het in ieder geval in de gaten houden.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Hmmm inderdaad... het is dus al niet slim om bij de code voor Action=Ships altijd hetzelfde veld/posities van schepen terug te geven, dit indien iemand jouw veld opslaat tijdens Action=Finished

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Of je geeft nu tijdens Action=Ships steeds hetzelfde terug, en dan tijdens de competitie verander je het. Dan heb je je tegenstanders mooi misleid ;)

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 11-04 11:18
Mmm, de Cols & Rows opties zijn denk ik voortgekomen uit puzzelboekjes, waar je in je eentje een puzzel kan oplossen. Misschien niet één oplossing mogelijk, maar het kan dus gebeuren dat alle schoten raak zijn.

Als je het spel speelt zoals met de bord-variant, dan zijn cols & rows niet nodig, dan moet je écht gaan zoeken. Lijkt me eigenlijk leuker voor het spelelement.

Ik moet wel nog wat tijd vinden voor een bot, m'n laatste competitie waar ik aan mee heb gedaan was de botwars...

Edit: bij het echte spel mogen volgens mij schepen elkaar juist wel raken, maakt het moeilijker te bepalen of je 'klaar' bent met een bepaald schip.

[ Voor 13% gewijzigd door mocean op 23-01-2010 16:43 ]

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Hm, bij mij gaat het tot nu toe nog niet zo goed. Ik laat het script van Onbekend een aantal stappen spelen, en voer vervolgens de parameters in in mijn programma. Het parsen werkt min of meer, alleen de 'voorspellingen' kloppen voor geen meter (oftewel, er zullen boten niet gevonden kunnen worden). En zo af en toe komt er een 'Out of system resources' voorbij. Leuk puzzeltje voor morgen verder dus :)

Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Kan je toelichten of er een verplichting op de text encoding of de headers die je server accepteert zit?
De requests werken, de respons word verzonden, maar niet geaccepteerd.

Bovenaan de pagina staat dan:
code:
1
2
3  37 5VH1.4VJ5.4VI13.3HN5.3HK12.3HE9.2HA7.2HC12.2HE6.2VP10 0
Error reading ship number 1 !

(dus, mijn server werkt en de data komt aan)

Ik heb gecheckt, maar volgens mij is die respons gewoon geldig. Moet ik een specifieke Content-Encoding header meegeven ofzo? Ik heb al behoorlijk wat combinaties geprobeerd, maar de tekst staat altijd goed bovenaan de pagina, maar word nooit geaccepteerd :(

-niks-


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
De server pakt mijn script soms niet. Parameters send: en Data received: is leeg, number of shots is 1 hoger geworden en voor de rest is er niks gebeurd...
Maakt het erg moeilijk om te bepalen waar het nou fout ging.

Edit: klopt het dat dit gebeurd als je een al geschoten vakje probeert te schieten?

[ Voor 32% gewijzigd door hostname op 23-01-2010 17:13 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:41
Anoniem: 341513 schreef op vrijdag 22 januari 2010 @ 23:00:
Via ruby kan ik wel GET/POST maar hoe krijgt mijn programma de info van het jurryprogramma. [..] Wanneer weet mijn speler wanneer het zijn beurt is om te spelen?
Je hebt het verkeerd om. Je speler doet geen requests, maar de scheidsrechter doet HTTP requests naar jouw programma wanneer hij een zet van je wil hebben. Vanuit HTTP-perspectief bekeken zijn de spelers dus servers, en is Onbekend de client.

In Ruby kun je een library als Mongrel gebruiken om een HTTP requests van de scheidsrechter te ontvangen. Alle informatie die relevant is voor de spelsituatie krijg je met de request mee, dus je hoeft tussendoor geen informatie op te slaan.

@Onbekend: mooie TS. d:)b Als ik van de week tijd om een werkende speler in elkaar te knutselen doe ik ook mee.

[ Voor 6% gewijzigd door Soultaker op 23-01-2010 17:21 ]


Acties:
  • 0 Henk 'm!

Anoniem: 341513

Bedankt Soultraker ik snapte het even niet. Maar nu even de site van Mongrel doorgelezen en nu is het duidelijk. :)

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
mocean schreef op zaterdag 23 januari 2010 @ 16:41:
Mmm, de Cols & Rows opties zijn denk ik voortgekomen uit puzzelboekjes, waar je in je eentje een puzzel kan oplossen. Misschien niet één oplossing mogelijk, maar het kan dus gebeuren dat alle schoten raak zijn.

Als je het spel speelt zoals met de bord-variant, dan zijn cols & rows niet nodig, dan moet je écht gaan zoeken. Lijkt me eigenlijk leuker voor het spelelement.

Ik moet wel nog wat tijd vinden voor een bot, m'n laatste competitie waar ik aan mee heb gedaan was de botwars...

Edit: bij het echte spel mogen volgens mij schepen elkaar juist wel raken, maakt het moeilijker te bepalen of je 'klaar' bent met een bepaald schip.
Bij het echte spel is dat inderdaad niet zo en dat heb ik uit de puzzelboekjes overgenomen. Ik kwam tijdens eerdere tests tot de conclusie dat als het programma willekeurig zou schieten, geluk een grote factor was. Dit wil ik juist voorkomen en daarom heb ik gekozen voor deze oplossing waardoor een slim programma er automatisch uitspringt.
MLM schreef op zaterdag 23 januari 2010 @ 16:55:
Kan je toelichten of er een verplichting op de text encoding of de headers die je server accepteert zit?
De requests werken, de respons word verzonden, maar niet geaccepteerd.

Bovenaan de pagina staat dan:
code:
1
2
3  37 5VH1.4VJ5.4VI13.3HN5.3HK12.3HE9.2HA7.2HC12.2HE6.2VP10 0
Error reading ship number 1 !

(dus, mijn server werkt en de data komt aan)

Ik heb gecheckt, maar volgens mij is die respons gewoon geldig. Moet ik een specifieke Content-Encoding header meegeven ofzo? Ik heb al behoorlijk wat combinaties geprobeerd, maar de tekst staat altijd goed bovenaan de pagina, maar word nooit geaccepteerd :(
Ik gebruik alleen maar de standaardinstellingen en controleer niet de meegegeven charset.
Zend je misschien UTF-8? In mijn code geeft ik in de headers "Content-Type: text/html" terug en geen charset.
hostname schreef op zaterdag 23 januari 2010 @ 17:11:
De server pakt mijn script soms niet. Parameters send: en Data received: is leeg, number of shots is 1 hoger geworden en voor de rest is er niks gebeurd...
Maakt het erg moeilijk om te bepalen waar het nou fout ging.

Edit: klopt het dat dit gebeurd als je een al geschoten vakje probeert te schieten?
Ja, elke waarde die je teruggeeft wordt behandeld als een schot en dan telt hij er dus 1 bij op.
Dat de Parameters send leeg is zou niet mogen gebeuren. Ik zal nakijken waardoor dat eventueel zou kunnen onstaan.
Hoe vaak komt dat dan eigenlijk voor?

[ Voor 3% gewijzigd door Onbekend op 23-01-2010 17:44 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Onbekend schreef op zaterdag 23 januari 2010 @ 17:36:
Ja, elke waarde die je teruggeeft wordt behandeld als een schot en dan telt hij er dus 1 bij op.
Dat de Parameters send leeg is zou niet mogen gebeuren. Ik zal nakijken waardoor dat eventueel zou kunnen onstaan.
Hoe vaak komt dat dan eigenlijk voor?
In het potje dat ik t/m 46 schoten heb kunnen spelen (toen bleef mijn speler telkens op hetzelfde punt schieten :() gebeurde het 3x.

Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Ik ga ook wat proberen. :)

Wanneer het spel is afgelopen, wordt een request gestuurd met Action “Finished”. Wordt hier de Opponent ook bij verstuurd?

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
AlainS schreef op zaterdag 23 januari 2010 @ 18:23:
Ik ga ook wat proberen. :)

Wanneer het spel is afgelopen, wordt een request gestuurd met Action “Finished”. Wordt hier de Opponent ook bij verstuurd?
Ja, die wordt dan ook meegestuurd. Dit was ik vergeten te vermelden in de startpost, dus ik heb het daar ook in neergezet.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Er zit een foutje in de tester, als je begint met het spel:

Action=Ships&Opponent=Name1

Dat moet de naam van speler twee zijn toch?
Speler1 krijgt de opdracht om schepen neer te zetten en dus de opponent moet dan niet zichzelf zijn natuurlijk. :)

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
Inderdaad, dat is een foutje. Gefikst. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 16-06 18:03
Onbekend schreef op zaterdag 23 januari 2010 @ 16:00:
Ik weet dat die host wel wat langzaam is, maar die foutmelding heb ik nog niet eerder gezien.
Kan je wel op Back klikken en dan weer doorgaan?

Ik zal het in ieder geval in de gaten houden.
ja, met Back en F5 werkte het weer.

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Onbekend schreef op zaterdag 23 januari 2010 @ 18:55:
Inderdaad, dat is een foutje. Gefikst. :)
Hij doet het ook fout bij ander acties zoals Fire:
Action=Fire&Opponent=Name1&Rows=1.1.1.5.5.2.1.0.4.1.1.1.4.3.0.0&Cols=0.1.2.1.3.2.0.7.0.1.6.2.2.2.1.0&Shots=

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
En dat hoort wel zo, omdat dat naar speler 2 is verzonden. ;)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

Anoniem: 308166

Ik wil me hierbij ook inschrijven. Je zegt met web interface, betekend dit dat ik geen gewoon java programma kan gebruiken maar persé een applet moet gaan maken?(of jsp ofzo)

[ Voor 3% gewijzigd door Anoniem: 308166 op 23-01-2010 19:52 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Anoniem: 308166 schreef op zaterdag 23 januari 2010 @ 19:52:
Ik wil me hierbij ook inschrijven. Je zegt met web interface, betekend dit dat ik geen gewoon java programma kan gebruiken maar persé een applet moet gaan maken?(of jsp ofzo)
Het betekent dat je gewoon een HTTP GET of POST moet afhandelen. Hoe je dat met een applet verwacht te kunnen doen beats me.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
[quote]Onbekend schreef op zaterdag 23 januari 2010 @ 19:25:
En dat hoort wel zo, omdat dat naar speler 2 is verzonden. ;)
[/quote]
Nee, dat krijgt player1 zodat ie weet wat ie gevuurd heeft + resultaat.



Krijg trouwens nu in de tester ook die fout:
ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: http://tweakers.megabyet.net/Player.php?

The following error was encountered:

* Access Denied.

Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is webmaster.
Terwijl de parameters als ik die kopieer en invoer in de browser wel een valide resultaat opleveren.

[ Voor 10% gewijzigd door - peter - op 24-01-2010 00:12 . Reden: toch niet mijn fout... :) ]


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Anoniem: 308166 schreef op zaterdag 23 januari 2010 @ 19:52:
Ik wil me hierbij ook inschrijven. Je zegt met web interface, betekend dit dat ik geen gewoon java programma kan gebruiken maar persé een applet moet gaan maken?(of jsp ofzo)
Of pak een simpele webserver. Ik gebruik in C# een System.Net.HttpListener, die kan gewoon HTTP request verwerken. Er is vast in Java een library om dat voor jou te doen :)

-niks-


Acties:
  • 0 Henk 'm!

Anoniem: 308166

Ja, ok, snap 'm al. HTTP requests kan ik wel verwerken. Dacht ff dat ik hele web interface ervoor moest bouwen ofzo zonder reden XD. En zit idd wel iets voor in java, java is zowat C# XD

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: http://tweakers.megabyet.net/Player.php?

The following error was encountered:

* Access Denied.

Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is webmaster.
Ik zal hem ergens anders hosten, want dit is gewoon onbetrouwbaar. :(

@MLM:
Ik heb inmiddels jouw probleem kunnen reproduceren met "Transfer-Encoding: chunked". Ik ga er voor zorgen dat hij ook daarmee overweg kan.

Edit:
Ik van iemand een betaalde webhost mogen gebruiken, en deze is ook een stuk sneller. :)
Je kan hem hier vinden.
Ik heb het script aangepast zodat hij nu ook netjes met "Transfer-Encoding: chunked" kan omgaan.

[ Voor 17% gewijzigd door Onbekend op 23-01-2010 23:22 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • SaphuA
  • Registratie: September 2005
  • Laatst online: 06-05 16:40
.

[ Voor 118% gewijzigd door SaphuA op 01-02-2022 17:00 ]


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Trouwens: heel erg relaxte tool waarmee je kan testen! ZIet er mooi grafisch en duidelijk uit.
Scheelt een hoop debug schrijfwerk. :)

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Zo, de ergste foutjes zijn eruit (door een andere compiler te nemen :X) en mn programma kan nu vuren. Als je echter kijkt hoe die vuurt gaan je haren overeind staan, want er zit totaal geen logica achter (en dat kleine beetje dat er wel in zit is bijna verwaarloosbaar). MorgenVandaag dus maar eens echte logica erin duwen en een leuke manier voor het plaatsen van schepen verzinnen :)

Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 16-06 18:03
SaphuA schreef op zaterdag 23 januari 2010 @ 23:51:
Ga het ook eens proberen :) 31 januari is wel krap :(

...

Edit: Ik vind de data overigens wel erg krap. Ik was niet van plan er full time mee bezig te zijn ;)
De competitie is tot 14 februari hoor, de tussenliggende zondagen zijn testdagen.
Je hebt dus 3 week de tijd.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

Zo, ik heb in de vrije uurtjes de afgelopen dagen al even wat lopen spelen. Net even een spelletje tegen de default player gedaan en in 39 schoten alles gekelderd van de tegenstander :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    0 4 5 2 2 1 2 1 4 1 1 3 4 0 0 0
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 4|   ~ X       ~   ~ X X X ~       |
 1|     X                           |
 1|                 X               |
 3|   X X           X               |
 1|   ~             X               |
 0|                                 |
 0|                                 |
 6|   ~ X X X X X   ~       X       |
 1|                         X       |
 1|   ~                     X       |
 2|   X                     X       |
 1|   X                             |
 0|                                 |
 8|   X X X X   X X X     X ~       |
 1|                       X         |
 0|                                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Het wachten is nu natuurlijk ook op de eerste die een keurige UBB outputter maakt..


Ik doe het trouwens in java, en mocht iemand nog een uber simpele light weight http server in java nodig hebben die hiervoor heel simpel gebruikt kan worden dan roept diegene maar even.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Mijn script gaat al een output van het veld, alleen die maken de logs nogal onoverzichtelijk:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   ABCDEFGHIJKLMNOP
1  UUUUUUUUUUUUUUUU
2  UUUUUUUUUUUUUUUU
3  UUUUUUUUUUUUUUUU
4  UUUUUUUUUUUUUUUU
5  UUUUwUwUUUUUUUUU
6  UUUUwSwUUUUUUUUU
7  UUUUwSwUUUUUUUUU
8  UUUUwUwUUUUUUUUU
9  UUUUUUUUUUUUUUUU
10 UUUUUUUUUUUUUUUU
11 UUUUUUUUUUUUUUUU
12 UUUUUUUUUUUUUUUU
13 UUUUUUUUUUUUUUUU
14 UUUUUUUUUUUUUUUU
15 UUUUUUUUUUUUUUUU
16 UUUUUUUUUUUUUUUU

Nu alleen nog even die bug eruit halen dat ie gaat schieten op plaatsen waar dat al gedaan is 8)7

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Even snel een PHP script gebakken dat een tabeletje maakt. De hoogte ben ik nog niet bepaald tevreden mee (en ik heb geen idee hoe ik die kleiner kan krijgen). Ook moet ik nog even kijken naar de waarden in Cols en Rows. Voor de geïnteresseerden: http://home.dcm360.nl/zeeslag.php Als parameters kan je hetzelfde meesturen als dat je zelf ontvangt, of je kan ze invullen in de invoervelden (ook in het formaat dat je anders ontvangt)
ABCDEFGHIJKLMNOP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Leuke opdracht! Ik ga ook wel even meedoen, hoewel ik tot 1 februari nog geen tijd heb :) Het zal een leuk php bouwseltje worden :9

Acties:
  • 0 Henk 'm!

  • SaphuA
  • Registratie: September 2005
  • Laatst online: 06-05 16:40
.

[ Voor 102% gewijzigd door SaphuA op 01-02-2022 17:00 ]


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Ik zie ook niet wat er mis aan is, het ziet er namelijk zo uit:
ABCDEFGHIJKLMNOP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dus ik denk dat dit iets is waar Onbekend even naar moet kijken ;)

Acties:
  • 0 Henk 'm!

  • SaphuA
  • Registratie: September 2005
  • Laatst online: 06-05 16:40
.

[ Voor 98% gewijzigd door SaphuA op 01-02-2022 17:00 ]


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
Ik ben er wel mee bezig geweest, maar ik kon ook niet zo snel de oorzaak vinden van jouw probleem.
Maar nu het opgelost lijkt te zijn zal ik er ook niet meer verder naar kijken. ;)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Janoz schreef op zondag 24 januari 2010 @ 10:46:
Zo, ik heb in de vrije uurtjes de afgelopen dagen al even wat lopen spelen. Net even een spelletje tegen de default player gedaan en in 39 schoten alles gekelderd van de tegenstander :)
Dat doe je lekker zeg! Ik heb nu mijn player af, ben nu bezig met de schipplaatser, die is nog niet optimaal.
Maar ik doe het in 50 schoten net tegen default player. Heb ook niet echt een idee hoe ik dat nog kan verbeteren op dit moment. :)

T'is iniedergeval leuk en ik kijk uit naar de competitie!

Acties:
  • 0 Henk 'm!

  • cfern
  • Registratie: Oktober 2009
  • Laatst online: 19:11
Zo, eindelijk een aanleiding om eens van mijn luie kont te komen en iets te gaan bouwen. Ik heb nog nooit eerder een servertje gebouwd, maar de tip van het gebruiken van een HttpListener was een goeie.

Ik zie deze competitie ook als een aardige aanleiding om eens iets groters te schrijven dan een gemiddelde Project Euler oefening. Ik heb al een visualisatie en een vers uit de duim gezogen plaatsingsalgoritme af. Niet slecht voor een half dagje werk.

Nu de AI (Artificial Ineptitude in mijn geval) voor het kelderen van de vloot nog.

O, ja. Ik bouw alles in F#.

edit:
En hulde voor de duidelijke specificatie!

[ Voor 4% gewijzigd door cfern op 24-01-2010 17:21 ]

"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

- peter - schreef op zondag 24 januari 2010 @ 16:34:
[...]

Dat doe je lekker zeg! Ik heb nu mijn player af, ben nu bezig met de schipplaatser, die is nog niet optimaal.
Maar ik doe het in 50 schoten net tegen default player. Heb ook niet echt een idee hoe ik dat nog kan verbeteren op dit moment. :)

T'is iniedergeval leuk en ik kijk uit naar de competitie!
Mwah, D'r zijn ook genoeg velden waar ik 50+ moves voor nodig heb. Degene die ik gepost had was de allereerste game die ik probeerde en was eigenlijk stom verbaasd dat de hit mis ratio zo hoog was.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Hmm, ik ben heel benieuwd naar jouw code aan het eind van de competitie. Kan me voorstellen dat functionele talen heel handig zijn in dit soort dingen?

Acties:
  • 0 Henk 'm!

  • cfern
  • Registratie: Oktober 2009
  • Laatst online: 19:11
Ik weet niet of functionele programmeertalen per sé handiger zijn voor deze opdracht. Het is zo dat ik behoorlijk moest wennen aan 'functioneel denken'. Ik klooi er nu zo'n beetje een jaar mee en heb nu pas het idee dat het begint te klikken.

Ik vind F# vooral handig omdat het
- een .Net-taal is, dus uit een vrij forse bibliotheek vol nuttigs kan tappen.
- een interactieve modus heeft (F# interactive) waar ik vrij snel losse code snippets in kan compilen en testen. Dat dit nuttig is wordt elke keer dat ik een los functieprototype door een kopieer-compileer-test-rondje gooi weer bevestigd.

Verder is de reden dat ik voor F# gekozen heb vrij eenvoudig: er zijn maar 3 programmeertalen waarvan ik vind dat ik ze voldoende beheers: VB.Net ( :'( ), C# en F#. Bij F# hoef ik veel minder te prutsen om wat in mijn hoofd zit in een werkend programma te vertalen.

edit:
ook dit nog:

Een aardig neveneffect van het leren van F#: ik heb nu het gevoel dat ik LINQ snap. Dit is in mijn dagelijkse C#-werk zeer goed van pas gekomen. Ook vermoed ik dat deze functionele denkkronkel het leren van XSLT een stuk eenvoudiger heeft gemaakt.

[ Voor 13% gewijzigd door cfern op 24-01-2010 19:28 ]

"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
voor talen zoals C# moet je dus eigenlijk je computer A ) toegankelijk maken vanaf internet (ie. server spelen) en B ) deze computer hebben aanstaan tijdens de competitie.

Ik zie echter het voordeel om een van deze talen te gebruiken tegenover PHP, waar ik (net als rummikub) weer mee aan het prutsen ben omdat ik 3/4e van de dingen die ik in java in een handomdraai doe hier altijd moet gaan opzoeken, vooral naar simpele arrays toe dan...

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
qanar schreef op zondag 24 januari 2010 @ 19:43:
voor talen zoals C# moet je dus eigenlijk je computer A ) toegankelijk maken vanaf internet (ie. server spelen) en B ) deze computer hebben aanstaan tijdens de competitie.
Ik heb gewoon een C# library gemaakt, en deze aan een totaal uitgeklede ASP.NET MVC website gehangen. Die draait gewoon bij mijn hoster.

Mooie is dat je vrij heftig kan rekenen, indien gewenst, zonder dat het nu veel tijd kost.

Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

A ) is heel simpel, zoals ik al eerder stelde, met een System.Net.HttpListener. Dat heeft wel als nadeel dat je programma als administrator moet draaien op Vista of Win7, maar dan ben je wel met 10 regels code klaar met het server gedeelte
B ) en je programma moet draaien :)

Indien er belangstelling voor is wil ik wel even een C# projectje online gooien die het HTTP gedeelte voor je regelt. Natuurlijk moet je dan zelf nog de implementatie regelen van de rest :)

-niks-


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Men, een slim zoeksysteem maken is niet zo moeilijk, maar om een formule/regel/algoritme te bedenken dat de schepen slim neerzet...

Acties:
  • 0 Henk 'm!

  • Ozzie
  • Registratie: Februari 2004
  • Laatst online: 17-06 08:27
Janoz schreef op zondag 24 januari 2010 @ 10:46:

Ik doe het trouwens in java, en mocht iemand nog een uber simpele light weight http server in java nodig hebben die hiervoor heel simpel gebruikt kan worden dan roept diegene maar even.
Ik zou het ook wel willen proberen in Java. Weet niet of ik er iets van kan maken.. maar tis iig een leuke oefening..

Zou je die uber simpele light weight http server kunnen sturen? :)
mail staat in me profiel..

"Write code as if the next maintainer is a vicious psychopath who knows where you live."


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 04-06 11:57
Is het hier de bedoeling een AI te schrijven voor zeeslag dat communiceert via HTTP GET/POST?

Geinig :) Zal ook eens meedoen als ik tijd heb

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

Ozzie schreef op maandag 25 januari 2010 @ 04:56:
[...]


Ik zou het ook wel willen proberen in Java. Weet niet of ik er iets van kan maken.. maar tis iig een leuke oefening..

Zou je die uber simpele light weight http server kunnen sturen? :)
mail staat in me profiel..
Ik zal de boel even wat uitkleden

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Zo, in 47 schoten schiet hij de default player naar de zeebodem :) En ook geen errors meer, werkt lekker dus. Volgens mij kan ik met de Cols en Rows parameter nog wat slimme trucjes inbouwen, maar dat komt vanzelf wel. Als ik nog even een host kan vinden voor m'n PHP scriptje doe ik ook mee met de testcompetitie :)

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

- peter - schreef op zondag 24 januari 2010 @ 20:43:
Men, een slim zoeksysteem maken is niet zo moeilijk, maar om een formule/regel/algoritme te bedenken dat de schepen slim neerzet...
Ik denk dat dat wel meevalt. Mocht je een slim zoeksysteem hebben gemaakt dan kun je desnoods meerdere random beginstellingen genereren en daar je eigen zoeksysteem op loslaten (een heel potje simuleren). Het lastigste bord (meeste zetten nodig om op te lossen) is dan de beste beginstelling. Enige waar je dan mee zit is de 5 sec limiet die er is.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Ik dacht zelf aan een stuk of 10 designs hardcoden en dan ten eerste een random design van die 10 teruggeven en ten tweede bijhouden wie je welke designs al gestuurd hebt en zorgen dat je niemand 2 keer dezelfde stuurt, indien mogelijk

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

Voor Ozzie en de andere mensen die met Java aan de slag willen heb ik hier een startpunt.

http://members.home.nl/janoz/zeeslagScaffolding.zip

Het "enige" wat je hoeft te doen is een implementatie van ZeeslagAI maken en deze in de ZeeslagHandler te initieren. Eventueel het poortnummer aanpassen en de boel draaien.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Janoz schreef op maandag 25 januari 2010 @ 13:14:
Voor Ozzie en de andere mensen die met Java aan de slag willen heb ik hier een startpunt.

http://members.home.nl/janoz/zeeslagScaffolding.zip

Het "enige" wat je hoeft te doen is een implementatie van ZeeslagAI maken en deze in de ZeeslagHandler te initieren. Eventueel het poortnummer aanpassen en de boel draaien.
Mooi, en ik snap ook wel wat er gebeurd in de code. Maar hoe laat ik het werken?

Ik nam (neem) aan dat je naar een website als whatismyip.com ging, je ip kopieerde en dan naar ip:port surfte.

Voor mezelf krijg ik daar een page not found. Nu kan dit natuurlijk ook aan men firewall, ISP, router of nog een tiental andere dingen liggen... dusseh... wat is de correcte manier? :-)

Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

De testserver accepteert nu ook de output van mijn programma. Probleem lag bij de combinatie encoding en content-type header, hij werkt nu met text/plain icm. UTF7 :)

Ik had een PM ontvangen of ik een C# opzetje kon publiceren, ik heb een ZIP online gegooid op http://xs4all.nl/~meidevml/zeeslag.zip met sourcecode.

Handleiding:
1) download, extract, open in Visual Studio, start programma
2) zorg dat je router poort 80 geforward is naar de PC die het programma draait, en je firewall poort 80 doorlaat
3) ga naar test-pagina, en vul je eigen IP in (dus: http://<jouw IP>/zeeslag/)
4) druk op start, en check of je programma de aanvraag ontvangt :)

Configuratie: in Program.cs staan een paar constanten, de poort waarop het programma gaat hangen (default: 80), de URL die afgevangen moet worder (default: /zeeslag/) en de text encoding (default: ASCII)

In Solver.cs staat de class die je moet uitbreiden/aanpassen voor je programma. Je krijgt een Dictionary<string, string> met input parameters, en een StreamWriter om antwoord te geven.

-niks-


Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
zwippie schreef op maandag 25 januari 2010 @ 11:42:
[...]

Ik denk dat dat wel meevalt. Mocht je een slim zoeksysteem hebben gemaakt dan kun je desnoods meerdere random beginstellingen genereren en daar je eigen zoeksysteem op loslaten (een heel potje simuleren). Het lastigste bord (meeste zetten nodig om op te lossen) is dan de beste beginstelling. Enige waar je dan mee zit is de 5 sec limiet die er is.
Ja, ik heb idd een simulator ook gebouwd om zo moeilijke en makkelijke mappen te onderscheiden.
Maar ik kan geen regels ontdekken waarom een moeilijke map nu moeilijk is of makkelijk nu makkelijk.
Ga denk ik idd nu maar voor gewoon een stuk of 50 moeilijke mappen hardcoden.

Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
MLM schreef op maandag 25 januari 2010 @ 15:04:
Ik had een PM ontvangen of ik een C# opzetje kon publiceren, ik heb een ZIP online gegooid op http://xs4all.nl/~meidevml/zeeslag.zip met sourcecode.
Bedankt, heb echter zelfde probleem als bij het java programma, zelfs als ik in de router mijn computer op 'exposed host' zet en dan de firewall uit...

Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

qanar schreef op maandag 25 januari 2010 @ 15:35:
[...]


Bedankt, heb echter zelfde probleem als bij het java programma, zelfs als ik in de router mijn computer op 'exposed host' zet en dan de firewall uit...
Het kan ook je ISP zijn die filtert, in dat geval kan je misschien een andere poort pakken. Vergeet niet om dan ook je URL te updaten met het nieuwe poortnummer in de testpagina.

-niks-


Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 16-06 18:03
qanar schreef op maandag 25 januari 2010 @ 15:35:
[...]


Bedankt, heb echter zelfde probleem als bij het java programma, zelfs als ik in de router mijn computer op 'exposed host' zet en dan de firewall uit...
Bij mij kan ik mijn eigen pc ook niet benaderen als ik mijn externe IP gebruik, maar vanaf andere locaties werkt het wel gewoon.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

Php werkt 'native', voor C# en Java zijn nu kant en klare oplossingen waarbij je je vervolgens alleen nog maar op het werkelijke probleem hoeft te richten. Het van buitenaf bereikbaar maken van een service die op je eigen computer draait lijkt me niet echt een probleem dat in dit topic behandeld zou moeten worden. Dit alles aan de praat zien te krijgen lijkt me dan ook meer iets wat je wel even uit kunt zoeken (al dan niet met wat hulp uit faqs van het netwerken deel van Got)

Om gewoon te testen of hij lokaal draait kun je natuurlijk veel makkelijke surfen naar localhost:poortnummer.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Zojuist een nieuwe versie van mn schietalgoritme getest, en ik moet zeggen dat die me aangenaam verraste. De eerste versie had 70+ schoten nodig, en een kleine update veranderde dat naar 50+. Met nog een schepje erbovenop kwam ik ineens uit op 43 :) Volgens mij ben ik dus al wel een eindje op weg naar een efficient algoritme.
ABCDEFGHIJKLMNOP
1
2
33930403116182917194
424
52627383732235
641
7101211
81361591487231
9
1036
113521
124320
134222
143328
153425
16

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
Is dat een gemiddelde of eenmalig?
Leuk al die positieve reacties. :)

[ Voor 34% gewijzigd door Onbekend op 25-01-2010 17:54 ]

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Over 7 potjes kom ik uit op een gemiddelde van 43.7, met 1 uitschieter naar 52 en 1 naar 37. Dus de score is redelijk 'herhaalbaar' :)

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Ondersteunt de server ook cookies? Dit zou namelijk wel handig zijn om potjes uit elkaar te kunnen houden in de logs en/of de gamestate te kunnen cachen.

(overigens haal ik nu gemiddeld 41,0 per potje)

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Ik heb ook even 7 potjes achter elkaar gedaan op de testserver:
40, 43, 40, 38, 45, 46, 42 (μ=42.0)

Met nog een klein beetje ruimte voor verbetering denk ik.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

Anoniem: 341513

Dus bij de test speler moet ik mijnip:80 invullen?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

Dat is nu al gewoon mogelijk mbv de oponent parameter. Zolang je geen twee spellen tegen dezelfde tegenstander tegelijk speelt kun je daarmee de spellen keurig uit elkaar houden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:33
Janoz schreef op maandag 25 januari 2010 @ 20:04:
Dat is nu al gewoon mogelijk mbv de oponent parameter. Zolang je geen twee spellen tegen dezelfde tegenstander tegelijk speelt kun je daarmee de spellen keurig uit elkaar houden.
De TS zegt:
Alle spelers zullen minimaal twee keer tegen elkaar moeten spelen; Namelijk één keer om de schepen te plaatsen, en één keer om de schepen te vinden. Afhankelijk van het totale aantal deelnemers zal dit een aantal malen herhaald worden zodat geluk een kleinere rol gaat spelen, en dat tactiek de winstgevender is.
Dus het zou best kunnen dat je 2x tegen dezelfde tegenstander speelt. Maar met een opschoonactie in ?Action=Finished kan dat ook te ondervangen zijn, dan hoop ik maar dat er niet parallel gespeeld gaat worden.

* hostname gaat eens even naar een schepen-plaats algoritme kijken

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Nou, ik zit nu op een gemiddelde van 44, over 100 wedstrijden (totale random map);
Dat vindt ik aardig zat, in het begin was het 47 per 100 wedstrijden.

Jammere is wel dat ie weinig consistent is: uitschieters van 35 tot 55.
Dat zal dan wel liggen aan de moeilijkheid van de gegenereerde map.

Ik heb er genoeg aan geklust voor nu, ben benieuwd naar de eerste competitie.

[ Voor 0% gewijzigd door - peter - op 25-01-2010 20:27 . Reden: uitschieters klopten niet. ]


Acties:
  • 0 Henk 'm!

Anoniem: 156876

dcm360 schreef op maandag 25 januari 2010 @ 17:51:
Zojuist een nieuwe versie van mn schietalgoritme getest, en ik moet zeggen dat die me aangenaam verraste. De eerste versie had 70+ schoten nodig, en een kleine update veranderde dat naar 50+. Met nog een schepje erbovenop kwam ik ineens uit op 43 :) Volgens mij ben ik dus al wel een eindje op weg naar een efficient algoritme.
ABCDEFGHIJKLMNOP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Zijn die onderste 3 dan puur toeval? Erg apart dat je ze alle 3 raakt zonder te missen. ;)

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 04-06 11:57
Ik vind de kans-gehalte wel erg hoog met dit spel. Ik wacht wel op de volgende programmeervuur.

Misschien iets met dammen, schaken of 4op1rij.

[ Voor 20% gewijzigd door Gamebuster op 25-01-2010 20:46 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Sowieso is dat algoritme niet 100% geoptimaliseerd. Je had E8 niet hoeven proberen en rond de 3Mt/m3P had je ook een schot kunnen weglaten (afhankelijk van de volgorde van proberen) :)

Acties:
  • 0 Henk 'm!

  • mat.hi.as
  • Registratie: November 2007
  • Laatst online: 23:28
Anoniem: 156876 schreef op maandag 25 januari 2010 @ 20:36:
[...]

Zijn die onderste 3 dan puur toeval? Erg apart dat je ze alle 3 raakt zonder te missen. ;)
Volgens mij valt dat wel mee, hangt ervan af hoe je algoritme is geschreven. De meest linker is logisch, doordat er alleen die kolom nog een boot van 3 kon komen, en de hoogte ervan spreekt ook vrij voor zich, aangezien je dan niet uitkomt. Probeer hem maar eentje omhoog te schuiven, dan kom je in de knoop met je rows. Je weet namelijk dat de andere 2 boten ook verticaal staan, en in welke kolom ook nog. Dan weet je de meest linker, en is er geen andere mogelijkheid meer van de andere 2 boten. Het is dus geen geluk, maar goed geprogrammeerd (en geredeneerd). Mooi gedaan _/-\o_

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 05-06 19:31
Gamebuster schreef op maandag 25 januari 2010 @ 20:46:
Ik vind de kans-gehalte wel erg hoog met dit spel. Ik wacht wel op de volgende programmeervuur.

Misschien iets met dammen, schaken of 4op1rij.
Met die cols en rows die je krijgt is het vooral een puzzel oplos spelletje.
Het is dus niet gewoon zeeslagje, waar je een blind veld voorgeschoteld krijgt.

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Ik heb mn code voor het maken van de tabel (en mn post hierboven) aangepast, de schoten staan er nu in genummerd :)

En mn huidige algoritme is puur kansberekening, voor ieder vakje wordt de kans berekend en degene met de beste papieren wordt beschoten :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-06 17:33

Janoz

Moderator Devschuur®

!litemod

Ik heb dcm360's speelbord even door mijn algoritme gegooid en ik heb net 3 schoten minder nodig. Maar mijn gemiddelden komen op vergelijkbare waarden uit.. Ik ben dus benieuwd :D

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • mat.hi.as
  • Registratie: November 2007
  • Laatst online: 23:28
dcm360 schreef op maandag 25 januari 2010 @ 21:17:
...
En mn huidige algoritme is puur kansberekening, voor ieder vakje wordt de kans berekend en degene met de beste papieren wordt beschoten :)
Damn, dit lijkt me nog best leuk ook, om zo'n algoritme te maken. Niet dat ik me wil inschrijven, want het wordt waarschijnlijk in Mathematica, en ik heb al helemaal geen ervaring om iets te submitten :P

Mag ik je vragen hoe je die kansberekening hebt gedaan? Is dat een kwestie welk vakje het meeste rows+cols heeft? Of vraag ik nu dingen die niet mogen O-)

Acties:
  • 0 Henk 'm!

Anoniem: 341513

Ik ben jaloers op jullie.Ik heb dat protocol om mee te doen nog al tijd niet werkend.Al in ruby en visual basic geprobeerd.Niemand die toevallig nog een source heeft liggen?

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07
hostname schreef op maandag 25 januari 2010 @ 20:10:
Dus het zou best kunnen dat je 2x tegen dezelfde tegenstander speelt. Maar met een opschoonactie in ?Action=Finished kan dat ook te ondervangen zijn, dan hoop ik maar dat er niet parallel gespeeld gaat worden.

* hostname gaat eens even naar een schepen-plaats algoritme kijken
Ik ben niet van plan om een speler twee spellen tegelijkertijd te laten spelen, maar ik kan het natuurlijk niet garanderen. Het kan ook zijn dat ik vanwege omstandigheden een spel halverwege af moet kappen en dat het spel opnieuw gespeeld moet worden.
Overigens kan je m.b.v. de parameters Cols en Rows wel de spellen uit elkaar houden. De kans dat bij twee verschillende spellen deze twee parameters identiek zijn is vrij klein. :)
Gamebuster schreef op maandag 25 januari 2010 @ 20:46:
Ik vind de kans-gehalte wel erg hoog met dit spel. Ik wacht wel op de volgende programmeervuur.

Misschien iets met dammen, schaken of 4op1rij.
Daarom heb ik de parameters Cols en Rows toegevoegd. In dit geval is de kans-gehalte een stuk lager geworden. En aangezien ik meerdere keren de zelfde tegenstanders een spel laat spelen, gaat tactiek een grotere rol spelen.
Anoniem: 341513 schreef op maandag 25 januari 2010 @ 20:03:
Dus bij de test speler moet ik mijnip:80 invullen?
Hij kijkt standaard naar de poort 80. Je hoeft dus alleen het IP-adres in te vullen.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
* qanar heeft momenteel een client in PHP die random schoten afvuurt (wel kijken of er al niet eens op die plaats geschoten is) en random 1 van n borden teruggeeft.
Pagina: 1 2 ... 7 Laatste