Skip to content

Instantly share code, notes, and snippets.

@felipecwb
Last active September 15, 2016 12:23
Show Gist options
  • Save felipecwb/fcc7b233f3f389f29459 to your computer and use it in GitHub Desktop.
Save felipecwb/fcc7b233f3f389f29459 to your computer and use it in GitHub Desktop.
Arvore de Pascal in JavaScript
#!/usr/bin/env node
"use strict";
String.PAD_LEFT = 1;
String.PAD_RIGHT = 2;
String.PAD_BOTH = 3;
String.prototype.pad = function(len, pad, dir) {
var str = this;
if (typeof(len) == "undefined") { len = 0; }
if (typeof(pad) == "undefined") { pad = ' '; }
if (typeof(dir) == "undefined") { dir = String.PAD_RIGHT; }
if (len + 1 >= str.length) {
switch (dir){
case String.PAD_LEFT:
str = new Array(len + 1 - str.length).join(pad) + str;
break;
case String.PAD_BOTH:
var padlen = len - str.length;
var right = Math.ceil(padlen / 2);
var left = padlen - right;
str = new Array(left+1).join(pad) + str + new Array(right+1).join(pad);
break;
default:
str = str + new Array(len + 1 - str.length).join(pad);
break;
}
}
return str;
};
String.prototype.repeat = function(n) {
for (var i=0,s='';i<n;i++,s+=this);
return s;
};
var pascal = function(n) {
var triangle = new Array(n);
var max = 0;
for (var l = 0; l < n; l++) {
triangle[l] = new Array(l+1);
for (var c = 0; c <= l; c++) {
triangle[l][c] = (c !== 0 && c !== l) ? triangle[l-1][c-1] + triangle[l-1][c] : 1;
if (triangle[l][c] > max) {
max = triangle[l][c];
}
}
}
triangle.min = 1;
triangle.max = max;
return triangle;
};
var height = process.argv[2];
if (typeof(height) === 'undefined' || height < 1) {
process.stderr.write("Please put a valid secund parameter and more than 0.\n");
process.exit(1);
}
var pascalTree = pascal(height);
// print
var block = pascalTree.max.toString().length + 1;
var lastLine;
for (var i = 0; i < pascalTree.length; i++) {
lastLine = '';
for (var j=0; j < pascalTree[i].length; j++) {
lastLine += pascalTree[i][j]
.toString()
.pad(block, ' ', String.PAD_BOTH);
}
process.stdout.write(lastLine.pad(block * height, ' ', String.PAD_BOTH) + "\n");
}
var trunk = '#'.repeat(height & 1 ? height : height-1)
.pad(lastLine.length, ' ', String.PAD_BOTH) +
"\n";
process.stdout.write(trunk.repeat(Math.ceil(height / 2)));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment