import java.util.Arrays; import java.util.Objects; import java.util.Scanner; import java.util.function.BiConsumer; import java.util.regex.Matcher; import java.util.regex.Pattern;
public class Main {
private Integer xPosition;
private Integer yPosition;
Main() {
xPosition = 0;
yPosition = 0;
}
private void up(Integer distance) {
this.yPosition += distance;
}
private void down(Integer distance) {
this.yPosition -= distance;
}
private void left(Integer distance) {
this.xPosition -= distance;
}
private void right(Integer distance) {
this.xPosition += distance;
}
private void printPosition() {
System.out.println(String.format("%s,%s", xPosition, yPosition));
}
private static class Movement {
private Direction direction;
private Integer distance;
private void move(Main m) {
direction.action.accept(m, distance);
}
public static Movement createByCmd(String cmd) {
String rex = "^([WSAD])(\\d+)$";
Pattern pattern = Pattern.compile(rex);
Matcher matcher = pattern.matcher(cmd);
if (matcher.find()) {
String directionStr = matcher.group(1);
int distance = Integer.parseInt(matcher.group(2));
Movement movement = new Movement();
movement.direction = Direction.valueOf(directionStr);
movement.distance = distance;
return movement;
}
return null;
}
}
enum Direction {
W("up", Main::up),
S("down", Main::down),
A("left", Main::left),
D("right", Main::right);
private final String note;
private final BiConsumer<Main, Integer> action;
Direction(String note, BiConsumer<Main, Integer> action) {
this.note = note;
this.action = action;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
Main mover = new Main();
Arrays.stream(line.split(";")).map(Movement::createByCmd).filter(Objects::nonNull).forEach(x -> x.move(mover));
mover.printPosition();
}
}
}