if (!String.format) { String.format = function(format) { var args = Array.prototype.slice.call(arguments, 1); return format.replace(/{(\d+)}/g, function(match, number) { return typeof args[number] != 'undefined'? args[number]: match; }); }; } let tree = { rslt:'\x1b[40m', palette:{ b:'{0}' ,g:'\x1b[42m{0}\x1b[40m' }, add:function(color, length){ this.rslt += String.format(this.palette[color],' '.repeat(length)); return this; }, lb:function(){ this.rslt +='\n'; return this; } } for(let i=0;i<5;i++){ tree.add('b',7-i).add('g',((i*2)+1)).add('b',7-i).lb(); } for(let i=2;i<6;i++){ tree.add('b',7-i).add('g',((i*2)+1)).add('b',7-i).lb(); } for(let i=2;i<7;i++){ tree.add('b',7-i).add('g',((i*2)+1)).add('b',7-i).lb(); } for(let i=0;i<2;i++){ tree.add('b',6).add('g',3).add('b',6).lb(); } console.log(tree.rslt)