function parse(rotateShip, forwardShip, initShip, input) {
const move = (ship, instr) => {
if (instr[0] == 'N') {
return [ship[0], translate(ship[1], [0, Number(instr.slice(1))])];
}
if (instr[0] == 'S') {
return [ship[0], translate(ship[1], [0, -1 * Number(instr.slice(1))])];
}
if (instr[0] == 'E') {
return [ship[0], translate(ship[1], [Number(instr.slice(1)), 0])];
}
if (instr[0] == 'W') {
return [ship[0], translate(ship[1], [-1 * Number(instr.slice(1)), 0])];
}
if (instr[0] == 'L') {
return rotateShip(ship, Number(instr.slice(1)));
}
if (instr[0] == 'R') {
return rotateShip(ship, -1 * Number(instr.slice(1)));
}
if (instr[0] == 'F') {
return forwardShip(ship, Number(instr.slice(1)));
}
};
return input.split('\n').reduce(move, initShip);
}