Add javascript bot
This commit is contained in:
parent
9a33ad42fc
commit
51712bf07e
1 changed files with 81 additions and 0 deletions
81
client/simple.js
Normal file
81
client/simple.js
Normal file
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue