Problem Statement | |||||||||||||
A simple line drawing program uses a blank 20 x 20 pixel canvas and a directional cursor that starts at the upper left corner pointing straight down. The upper left corner of the canvas is at (0, 0) and the lower right corner is at (19, 19). You are given a String[], commands, each element of which contains one of two possible commands. A command of the form "FORWARD x" means that the cursor should move forward by x pixels. Each pixel on its path, including the start and end points, is painted black. The only other command is "LEFT", which means that the cursor should change its direction by 90 degrees counterclockwise. So, if the cursor is initially pointing straight down and it receives a single "LEFT" command, it will end up pointing straight to the right. Execute all the commands in order and return the resulting 20 x 20 pixel canvas as a String[] where character j of element i represents the pixel at (i, j). Black pixels should be represented as uppercase 'X' characters and blank pixels should be represented as '.' characters. | |||||||||||||
Definition | |||||||||||||
| |||||||||||||
Notes | |||||||||||||
- | The cursor only paints the canvas if it moves (see example 1). | ||||||||||||
Constraints | |||||||||||||
- | commands will contain between 1 and 50 elements, inclusive. | ||||||||||||
- | Each element of commands will be formatted as either "LEFT" or "FORWARD x" (quotes for clarity only), where x is an integer between 1 and 19, inclusive, with no extra leading zeros. | ||||||||||||
- | When executing the commands in order, the cursor will never leave the 20 x 20 pixel canvas. | ||||||||||||
Examples | |||||||||||||
0) | |||||||||||||
| |||||||||||||
1) | |||||||||||||
| |||||||||||||
2) | |||||||||||||
| |||||||||||||
3) | |||||||||||||
|
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.
答案:
1
public class DrawLines
{
2
3
4
public String[] execute(String[] commands)
{
5
if (commands == null || commands.length == 0) return null;
6
7
// initialize result array
8
String[][] canvas = new String[20][20];
9
for(int i = 0; i < 20; i++)
{
10
for(int j = 0; j < 20; j++)
{
11
canvas[i][j] = ".";
12
}
13
}
14
15
// execute commands
16
int m = 0;
17
int n = 1;
18
int x = 0;
19
int y = 0;
20
int movelength = 0;
21
for(int index = 0; index < commands.length; index++)
{
22
if("LEFT".equalsIgnoreCase(commands[index]))
{
23
System.out.println("LEFT");
24
if(m == 0 && n == 1)
{
25
m = 1;
26
n = 0;
27
}else if(m == 1 && n == 0)
{
28
m = 0;
29
n = -1;
30
}else if(m == 0 && n == -1)
{
31
m = -1;
32
n = 0;
33
}else if(m == -1 && n == 0)
{
34
m = 0;
35
n = 1;
36
}
37
System.out.println("m, n:" + m + "," + n);
38
continue;
39
}
40
41
if("FORWARD".equalsIgnoreCase(commands[index].substring(0, 7)))
{
42
movelength = Integer.parseInt(commands[index].substring(8, commands[index].length()));
43
System.out.println("movelength:" + movelength);
44
if(m == 0 && n == 1)
{
45
for(int j = y; j <= y + movelength * n; j += n)
{
46
canvas[x][j] = "X";
47
}
48
y = y + movelength * n;
49
}
50
if(m == 0 && n == -1)
{
51
for(int j = y; j >= y + movelength * n; j += n)
{
52
canvas[x][j] = "X";
53
}
54
y = y + movelength * n;
55
}
56
if(n == 0 && m == 1)
{
57
for(int i = x; i <= x + movelength * m; i += m)
{
58
canvas[i][y] = "X";
59
}
60
x = x + movelength * m;
61
}
62
if(n == 0 && m == -1)
{
63
for(int i = x; i >= x + movelength * m; i += m)
{
64
canvas[i][y] = "X";
65
}
66
x = x + movelength * m;
67
}
68
System.out.println("x, y:" + x + "," + y);
69
}
70
}
71
72
// format result
73
String[] result = new String[20];
74
for(int j = 0; j < 20; j++)
{
75
result[j] = "";
76
for(int i = 0; i < 20; i++)
{
77
result[j] += canvas[i][j];
78
}
79
}
80
return result;
81
82
83
}
84
85
/** *//**
86
* @param args
87
*/
88
public static void main(String[] args)
{
89
DrawLines drawLines = new DrawLines();
90
String[] input = new String[7];
91
//input = {"FORWARD 19", "LEFT", "FORWARD 19", "LEFT", "FORWARD 19", "LEFT", "FORWARD 19"};
92
input[0] = "FORWARD 19";
93
input[1] = "LEFT";
94
input[2] = "FORWARD 19";
95
input[3] = "LEFT";
96
input[4] = "FORWARD 19";
97
input[5] = "LEFT";
98
input[6] = "FORWARD 19";
99
100
String[] result = drawLines.execute(input);
101
102
for(int i = 0; i < result.length; i++)
{
103
System.out.println(result[i]);
104
}
105
}
106
107
}
108



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
