Skip to content

Instantly share code, notes, and snippets.

@jianminchen
Created December 8, 2016 07:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/ae14bc0d764240d03831e6429337199a to your computer and use it in GitHub Desktop.
Save jianminchen/ae14bc0d764240d03831e6429337199a to your computer and use it in GitHub Desktop.
HackerRank - Matrix Rotation - study code written using JavaScript, by a Stanford university student -
var rows,
cols,
array = [];
function processData(input) {
//Enter your code here
var input = input.split('\n');
var vars = input.shift().split(' ');
var m = vars[0], // Rows
n = vars[1], // Cols
r = vars[2]; // Rotations
for(var i = 0; i < m; i++) {
array.push(input.shift().split(' '));
}
rows = m;
cols = n;
var minD = Math.min(m,n);
var depth = minD/2;
//process.stdout.write(getRingArray(0));
//process.stdout.write(getRingArray(0));
for(var i = 0; i < depth; i++) {
doNRotations(r,i);
}
for(var i = 0; i < rows; i++) {
process.stdout.write(array[i].join(' ') + '\n');
}
}
function doNRotations(rotationCount, origin) {
var ra = getRingArray(origin);
//process.stdout.write('pre: '+ ra);
var rotations = rotationCount % ra.length;
for(var i = 0; i < rotations; i++) {
ra.unshift(ra.pop());
}
//process.stdout.write('post: '+ ra);
writeRingArray(origin, ra);
}
function getRingArray(origin) {
var upDown = rows - (origin*2);
var leftRight = cols - (origin*2);
var ra = [];
var y = origin,
x = origin;
for(y = origin; y < rows - origin; y++) {
ra.push(array[y][x]);
//process.stdout.write(ra + '\n');
}
y--;
x++;
for(x; x < cols - origin; x++) {
ra.push(array[y][x]);
}
x--;
y--;
for(y; y >= origin; y--) {
ra.push(array[y][x]);
}
y++;
x--;
for(x; x > origin; x--) {
ra.push(array[y][x]);
}
return ra;
}
function writeRingArray(origin, ra) {
var upDown = rows - (origin*2);
var leftRight = cols - (origin*2);
var y = origin,
x = origin;
i = 0;
for(y = origin; y < rows - origin; y++) {
array[y][x] = ra.shift();
}
y--;
x++;
for(x; x < cols - origin; x++) {
array[y][x] = ra.shift();
}
x--;
y--;
for(y; y >= origin; y--) {
array[y][x] = ra.shift();
}
y++;
x--;
for(x; x > origin; x--) {
array[y][x] = ra.shift();
}
//process.stdout.write('['+x+','+y+']\n');
}
process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
_input += input;
});
process.stdin.on("end", function () {
processData(_input);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment