diff --git a/client/simple.js b/client/simple.js new file mode 100644 index 0000000..5fc994e --- /dev/null +++ b/client/simple.js @@ -0,0 +1,81 @@ +const fs = require('fs') +const readline = require('readline'); +const rl = readline.createInterface({input: process.stdin, output: process.stdout}); + +const MY_PLAYER_NUMBER = 1 + +function move(moves) { + let record = {'moves': moves} + console.error(JSON.stringify(record)) + console.log(JSON.stringify(record)) +} + +function find_max_with_key(array, key) { + return array.reduce((item1, item2) => { + let val1 = item1[key]; + let val2 = item2[key]; + return (val1 > val2 ? item1 : item2); + }); +} + +function find_min_with_key(array, key) { + return array.reduce((item1, item2) => { + let val1 = item1[key]; + let val2 = item2[key]; + return (val1 < val2 ? item1 : item2); + }); +} + +/** + * De main code van de bot + */ +function run_bot(state) { + // Maak een lijst van mijn eigen planeten + let my_planets = state["planets"].filter((planet) => { + return planet['owner'] === MY_PLAYER_NUMBER + }) + + // Maak een lijst van de planeten van de tegenstander + let other_planets = state["planets"].filter((planet) => { + return planet['owner'] !== MY_PLAYER_NUMBER + }) + + if (my_planets.length === 0 || other_planets.length === 0) { + // Als er al een speler dood is moet ik niets meer doen + move([]) + } else { + // Stuur alle schepen behalve 1 van mijn planeet met meeste schepen + // naar die van de andere speler met zijn minste schepen + let planet = find_max_with_key(my_planets, 'ship_count'); + let dest = find_min_with_key(other_planets, 'ship_count'); + + if (planet !== undefined && dest !== undefined) { + move([{ + 'origin': planet['name'], + 'destination': dest['name'], + 'ship_count': planet['ship_count'] - 1 + }]) + } + } +} + + +function main() { + // Je kunt als 2de argument een file meegeven. De bot gaat deze dan gebruiken als input voor de ronde + if (process.argv.length > 2) { + try { + const data = fs.readFileSync(process.argv[2], 'utf8') + run_bot(JSON.parse(data)) + } catch (err) { + console.error(err) + } + } else { + // Anders gaan we stdin lezen + rl.on('line', (data) => { + run_bot(JSON.parse(data)) + }); + } +} + +let _ = main(); +