-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathdraw_rectangle.js
114 lines (102 loc) · 2.95 KB
/
draw_rectangle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
const repeatCharacter = function(character, times) {
let line = '';
for (let count = 0; count < times; count++) {
line = line + character;
}
return line;
};
const createLine = function(width, leftChar, middleChar, rightChar) {
let leftBorderWidth = 1 % (width + 1);
let rightBorderWidth = 1 % width;
let left = repeatCharacter(leftChar, leftBorderWidth);
let middle = repeatCharacter(middleChar, width - 2);
let right = repeatCharacter(rightChar, rightBorderWidth);
return left + middle + right;
};
const joinLines = function(previous, lineToJoin, lineSeparator) {
return previous + lineSeparator + lineToJoin;
};
const createLineGenerator = function(leftChar, middleChar, rightChar) {
let lineGenerator = function(width) {
return createLine(width, leftChar, middleChar, rightChar);
};
return lineGenerator;
};
const filledLineGenerator = createLineGenerator('*', '*', '*');
const dashedLineGenerator = createLineGenerator('-', '-', '-');
const hollowLineGenerator = createLineGenerator('*', ' ', '*');
const createRectangle = function(
width,
height,
topLineGenerator,
middleLineGenerator,
bottomLineGenerator,
) {
let lineSeparator = '\n';
if (height < 1) {
return "";
}
let rectangle = topLineGenerator(width);
for (let row = 0; row < height - 2; row++) {
let middleLine = middleLineGenerator(width);
rectangle = joinLines(rectangle, middleLine, lineSeparator);
}
if(height < 2) {
return rectangle;
}
let bottomLine = bottomLineGenerator(width);
return joinLines(rectangle, bottomLine, lineSeparator);
};
const createFilledRectangle = function(width, height) {
return createRectangle(
width,
height,
filledLineGenerator,
filledLineGenerator,
filledLineGenerator,
);
};
const createHollowRectangle = function(width, height) {
return createRectangle(
width,
height,
filledLineGenerator,
hollowLineGenerator,
filledLineGenerator,
);
};
const createAlternatingRectangle = function(width,height) {
let lineSeparator = '';
let rectangle ='';
let generators = [ filledLineGenerator, dashedLineGenerator ];
if (height < 1) {
return "";
}
for (let row = 0; row < height; row++) {
let generator = generators[row%2];
let line = generator(width);
rectangle = joinLines(rectangle, line, lineSeparator);
lineSeparator = '\n';
}
return rectangle;
}
const createRectangleOfType = function(rectangleType, width, height) {
if (rectangleType == 'filled') {
return createFilledRectangle(width, height);
}
if (rectangleType == 'hollow') {
return createHollowRectangle(width, height);
}
if (rectangleType == 'alternating') {
return createAlternatingRectangle(width, height);
}
return '';
};
const main = function() {
const rectangleType = process.argv[2];
const width = +process.argv[3];
const height = +process.argv[4];
const rectangle = createRectangleOfType(rectangleType, width, height);
console.log(rectangle);
};
main();