Skip to content

Instantly share code, notes, and snippets.

@theabbie
Created March 12, 2020 17:46
Show Gist options
  • Save theabbie/6c9fceaeb27b1acb40aaddf7a3d47332 to your computer and use it in GitHub Desktop.
Save theabbie/6c9fceaeb27b1acb40aaddf7a3d47332 to your computer and use it in GitHub Desktop.
var fs = require("fs");
var file = 'b_dream.txt';
fs.readFile(file,'utf8', function(err, data) {
var w = parseInt(data.split("\n")[0].split(" ")[0]);
var h = parseInt(data.split("\n")[0].split(" ")[1]);
var devlen = parseInt(data.split("\n")[h+1]);
var devs = data.split("\n").slice(h+2,h+2+devlen).map(function(x) {return {"company": x.split(" ")[0],"bonus": parseInt(x.split(" ")[1]),"skills": x.split(" ").splice(3),"dev": true}});
var pmlen = parseInt(data.split("\n")[h+2+devlen]);
var pms = data.split("\n").slice(h+3+devlen,h+3+devlen+pmlen).map(function(x) {return {"company": x.split(" ")[0],"bonus": parseInt(x.split(" ")[1]),"dev": false}})
var room = [];
for (i=0; i<h; i++) {
room[i] = data.split("\n")[i+1].split("");
}
var avdev = avpm = 0;
for (i=0; i<room.length; i++) {
for (j=0; j<room[0].length; j++) {
if (room[i][j]=="_") avdev++;
if (room[i][j]=="M") avpm++;
}
}
var devarr = [];
while(devarr.length < avdev){
var r = Math.floor(Math.random() * avdev);
if(devarr.indexOf(r) === -1) devarr.push(r);
}
var pmarr = [];
while(pmarr.length < avpm){
var r = Math.floor(Math.random() * avpm);
if(pmarr.indexOf(r) === -1) pmarr.push(r);
}
var di = pmi = 0;
for (i=0; i<room.length; i++) {
for (j=0; j<room[0].length; j++) {
if (room[i][j]=="_") room[i][j] = devs[devarr[di++]]; devarr[di-1] = [i,j];
if (room[i][j]=="M") room[i][j] = pms[pmarr[pmi++]]; pmarr[pmi-1] = [i,j];
}
}
for (x in devs) {
fs.appendFile("soln_"+file,devarr.indexOf(x)!=-1?devarr[x][0]+" "+devarr[x][1]:"X"+"\n",function() {});
}
for (x in pms) {
fs.appendFile("soln_"+file,pmarr.indexOf(x)!=-1?pmarr[x][0]+" "+pmarr[x][1]:"X"+"\n",function() {});
}
console.log(score(room));
function score(room) {
var score = 0;
for (i=0; i<h-1; i++) {
for (j=0; j<w-1; j++) {
if (room[i][j]!="#" && room[i+1][j]!="#") {
if (room[i][j].dev && room[i+1][j].dev) {
if (room[i][j].company==room[i+1][j].company) {score+=room[i][j].bonus*room[i+1][j].bonus}
var common = ((room[i][j].skills || []).filter(value => -1 !== (room[i+1][j].skills || []).indexOf(value))).length;
var tot = [new Set([...(room[i][j].skills || []),...(room[i+1][j].skills || [])])].length;
score += Math.abs(common*(tot-common));
}
if (!room[i][j].dev && !room[i+1][j].dev) {
if (room[i][j].company==room[i+1][j].company) {score+=room[i][j].bonus*room[i+1][j].bonus}
}
}
if (room[i][j]!="#" && room[i][j+1]!="#") {
if (room[i][j].dev && room[i+1][j].dev) {
if (room[i][j].company==room[i][j+1].company) {score+=room[i][j].bonus*room[i][j+1].bonus}
}
if (!room[i][j].dev && !room[i+1][j].dev) {
if (room[i][j].company==room[i][j+1].company) {score+=room[i][j].bonus*room[i][j+1].bonus}
var common = ((room[i][j].skills || []).filter(value => -1 !== (room[i][j+1].skills || []).indexOf(value))).length;
var tot = [new Set([...(room[i][j].skills || []),...(room[i][j+1].skills || [])])].length;
score += Math.abs(common*(tot-common));
}
}
}
}
return score;
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment