Robot Block Command
up vote
1
down vote
favorite
Problem
We have a robot that can pickup blocks from a stash, move them
horizontally and lower them in place. There are 10 positions available
to lower blocks number 0 to 9. Each position can hold up to 15 blocks.
The robot understands the commands 'P', 'M' and 'L':
- P: Pickup from the stash and move to position 0
- M: Move to the Next Position
- L: Lower the block
The robot is safe to operate and very forgiving:
- There are always blocks in the stash (Pickup always gets a block)
- If the robot already holds a block, Pickup will reset position to 0
- The robot will not go beyond position 9, Trying to move further does nothing
- Lowering the block on a pile of 15 does nothing
- Lowering without a block does nothing
- Robot ignores any command that is not 'P', 'M','L'
Implement a function that takes a String of commands for the robot.
The function should output String representing the number of blocks
(in hexadecimal) at each position after running all the commands
Solution
I have implemented it and it works fine and all but I feel like this is not the correct way.
Key errors I feel are how I determine Hexadecimal values from A to F. What is the correct way of doing this other than using a hashmap?
Also, processing of each command using switch-case feels so verbose as well.
Has anyone solved this problem before? What's the optimal way of doing this?
private static int stash = new int[10];
private static HashMap<Integer, String> map = new HashMap<Integer, String>();
public static void main(String args) {
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
String command = "PMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMMMLPMLPMMLPMMMMMMMMMMLPMMMMMMMMMML";
executeCommand(command);
}
private static void executeCommand(String command) {
int block = 0;
int stashLocation = 0;
for (Character c : command.toCharArray()) {
switch (c) {
case 'P':
if (block == 0) {
block = 1;
} else {
stashLocation = 0;
}
break;
case 'M':
if (stashLocation < 9) {
stashLocation++;
}
break;
case 'L':
if (block != 0 && stash[stashLocation] < 15) {
stash[stashLocation] = stash[stashLocation] + 1;
block = 0;
stashLocation = 0;
}
break;
}
}
Arrays.stream(stash).forEach(val -> {
if (map.containsKey(val)) {
System.out.print(map.get(val));
} else {
System.out.print(val);
}
});
}
java algorithm
New contributor
add a comment |
up vote
1
down vote
favorite
Problem
We have a robot that can pickup blocks from a stash, move them
horizontally and lower them in place. There are 10 positions available
to lower blocks number 0 to 9. Each position can hold up to 15 blocks.
The robot understands the commands 'P', 'M' and 'L':
- P: Pickup from the stash and move to position 0
- M: Move to the Next Position
- L: Lower the block
The robot is safe to operate and very forgiving:
- There are always blocks in the stash (Pickup always gets a block)
- If the robot already holds a block, Pickup will reset position to 0
- The robot will not go beyond position 9, Trying to move further does nothing
- Lowering the block on a pile of 15 does nothing
- Lowering without a block does nothing
- Robot ignores any command that is not 'P', 'M','L'
Implement a function that takes a String of commands for the robot.
The function should output String representing the number of blocks
(in hexadecimal) at each position after running all the commands
Solution
I have implemented it and it works fine and all but I feel like this is not the correct way.
Key errors I feel are how I determine Hexadecimal values from A to F. What is the correct way of doing this other than using a hashmap?
Also, processing of each command using switch-case feels so verbose as well.
Has anyone solved this problem before? What's the optimal way of doing this?
private static int stash = new int[10];
private static HashMap<Integer, String> map = new HashMap<Integer, String>();
public static void main(String args) {
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
String command = "PMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMMMLPMLPMMLPMMMMMMMMMMLPMMMMMMMMMML";
executeCommand(command);
}
private static void executeCommand(String command) {
int block = 0;
int stashLocation = 0;
for (Character c : command.toCharArray()) {
switch (c) {
case 'P':
if (block == 0) {
block = 1;
} else {
stashLocation = 0;
}
break;
case 'M':
if (stashLocation < 9) {
stashLocation++;
}
break;
case 'L':
if (block != 0 && stash[stashLocation] < 15) {
stash[stashLocation] = stash[stashLocation] + 1;
block = 0;
stashLocation = 0;
}
break;
}
}
Arrays.stream(stash).forEach(val -> {
if (map.containsKey(val)) {
System.out.print(map.get(val));
} else {
System.out.print(val);
}
});
}
java algorithm
New contributor
P
andL
actions do not match the problem statement (P
should always move arm to position 0,L
should not change the arm position).
– vnp
8 hours ago
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
Problem
We have a robot that can pickup blocks from a stash, move them
horizontally and lower them in place. There are 10 positions available
to lower blocks number 0 to 9. Each position can hold up to 15 blocks.
The robot understands the commands 'P', 'M' and 'L':
- P: Pickup from the stash and move to position 0
- M: Move to the Next Position
- L: Lower the block
The robot is safe to operate and very forgiving:
- There are always blocks in the stash (Pickup always gets a block)
- If the robot already holds a block, Pickup will reset position to 0
- The robot will not go beyond position 9, Trying to move further does nothing
- Lowering the block on a pile of 15 does nothing
- Lowering without a block does nothing
- Robot ignores any command that is not 'P', 'M','L'
Implement a function that takes a String of commands for the robot.
The function should output String representing the number of blocks
(in hexadecimal) at each position after running all the commands
Solution
I have implemented it and it works fine and all but I feel like this is not the correct way.
Key errors I feel are how I determine Hexadecimal values from A to F. What is the correct way of doing this other than using a hashmap?
Also, processing of each command using switch-case feels so verbose as well.
Has anyone solved this problem before? What's the optimal way of doing this?
private static int stash = new int[10];
private static HashMap<Integer, String> map = new HashMap<Integer, String>();
public static void main(String args) {
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
String command = "PMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMMMLPMLPMMLPMMMMMMMMMMLPMMMMMMMMMML";
executeCommand(command);
}
private static void executeCommand(String command) {
int block = 0;
int stashLocation = 0;
for (Character c : command.toCharArray()) {
switch (c) {
case 'P':
if (block == 0) {
block = 1;
} else {
stashLocation = 0;
}
break;
case 'M':
if (stashLocation < 9) {
stashLocation++;
}
break;
case 'L':
if (block != 0 && stash[stashLocation] < 15) {
stash[stashLocation] = stash[stashLocation] + 1;
block = 0;
stashLocation = 0;
}
break;
}
}
Arrays.stream(stash).forEach(val -> {
if (map.containsKey(val)) {
System.out.print(map.get(val));
} else {
System.out.print(val);
}
});
}
java algorithm
New contributor
Problem
We have a robot that can pickup blocks from a stash, move them
horizontally and lower them in place. There are 10 positions available
to lower blocks number 0 to 9. Each position can hold up to 15 blocks.
The robot understands the commands 'P', 'M' and 'L':
- P: Pickup from the stash and move to position 0
- M: Move to the Next Position
- L: Lower the block
The robot is safe to operate and very forgiving:
- There are always blocks in the stash (Pickup always gets a block)
- If the robot already holds a block, Pickup will reset position to 0
- The robot will not go beyond position 9, Trying to move further does nothing
- Lowering the block on a pile of 15 does nothing
- Lowering without a block does nothing
- Robot ignores any command that is not 'P', 'M','L'
Implement a function that takes a String of commands for the robot.
The function should output String representing the number of blocks
(in hexadecimal) at each position after running all the commands
Solution
I have implemented it and it works fine and all but I feel like this is not the correct way.
Key errors I feel are how I determine Hexadecimal values from A to F. What is the correct way of doing this other than using a hashmap?
Also, processing of each command using switch-case feels so verbose as well.
Has anyone solved this problem before? What's the optimal way of doing this?
private static int stash = new int[10];
private static HashMap<Integer, String> map = new HashMap<Integer, String>();
public static void main(String args) {
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
String command = "PMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMLPMMMLPMLPMMLPMMMMMMMMMMLPMMMMMMMMMML";
executeCommand(command);
}
private static void executeCommand(String command) {
int block = 0;
int stashLocation = 0;
for (Character c : command.toCharArray()) {
switch (c) {
case 'P':
if (block == 0) {
block = 1;
} else {
stashLocation = 0;
}
break;
case 'M':
if (stashLocation < 9) {
stashLocation++;
}
break;
case 'L':
if (block != 0 && stash[stashLocation] < 15) {
stash[stashLocation] = stash[stashLocation] + 1;
block = 0;
stashLocation = 0;
}
break;
}
}
Arrays.stream(stash).forEach(val -> {
if (map.containsKey(val)) {
System.out.print(map.get(val));
} else {
System.out.print(val);
}
});
}
java algorithm
java algorithm
New contributor
New contributor
edited 7 mins ago
Jamal♦
30.2k11115226
30.2k11115226
New contributor
asked 13 hours ago
mel3kings
1063
1063
New contributor
New contributor
P
andL
actions do not match the problem statement (P
should always move arm to position 0,L
should not change the arm position).
– vnp
8 hours ago
add a comment |
P
andL
actions do not match the problem statement (P
should always move arm to position 0,L
should not change the arm position).
– vnp
8 hours ago
P
and L
actions do not match the problem statement (P
should always move arm to position 0, L
should not change the arm position).– vnp
8 hours ago
P
and L
actions do not match the problem statement (P
should always move arm to position 0, L
should not change the arm position).– vnp
8 hours ago
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
mel3kings is a new contributor. Be nice, and check out our Code of Conduct.
mel3kings is a new contributor. Be nice, and check out our Code of Conduct.
mel3kings is a new contributor. Be nice, and check out our Code of Conduct.
mel3kings is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209155%2frobot-block-command%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
P
andL
actions do not match the problem statement (P
should always move arm to position 0,L
should not change the arm position).– vnp
8 hours ago