Thứ Năm, 10 tháng 1, 2019

UVa 00227 - Puzzle (parse the input, array manipulation)

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=4&page=show_problem&problem=163
Sol:
import java.util.Scanner;
import java.io.*;
/* The hardest part of this problem was to read input with Java */
/* This will only work with ANSI encoded files used for input */
class Board {
public int m, n;
public int i, j; // empty square
char map[][];
public Board(int m, int n) {
this.m = m;
this.n = n;
map = new char[m][n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
map[i][j] = ' ';
}
public char getItem(int x, int y) {
return map[x][y];
}
boolean makeMove(char move) {
switch(move) {
case 'A':
if (!isOnTheBoard(i-1, j))
return false;
map[i][j] = map[i-1][j];
map[i-1][j] = ' ';
i = i - 1;
break;
case 'B':
if (!isOnTheBoard(i+1, j))
return false;
map[i][j] = map[i+1][j];
map[i+1][j] = ' ';
i = i + 1;
break;
case 'R':
if (!isOnTheBoard(i, j+1))
return false;
map[i][j] = map[i][j+1];
map[i][j+1] = ' ';
j = j + 1;
break;
case 'L':
if (!isOnTheBoard(i, j-1))
return false;
map[i][j] = map[i][j-1];
map[i][j-1] = ' ';
j = j - 1;
break;
default:
return false;
}
return true;
}
public void setItem(int x, int y, char item) {
//System.out.println(x + " " + y + ":" + item + ":");
if (item == ' ') {
i = x;
j = y;
}
map[x][y] = item;
}
private boolean isOnTheBoard(int i, int j) {
return i >= 0 && j >= 0 && i < m && j < n;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
builder.append(map[i][j] + (j<(n-1)?" ":""));
}
builder.append("\n");
}
return builder.toString();
}
}
public class Main {
public static void main(String[] args) throws Exception {
//Scanner in = new Scanner (new FileReader(new File("proba.txt")));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
int tc = 0;
while (true) {
char c = (char) in.read();
if (c == 'Z')
break;
if (++tc != 1) {
System.out.println();
}
Board board = new Board(5, 5);
board.setItem(0, 0, c);
for (int j = 1; j < 5; j++) {
c = (char) in.read();
//System.out.println("|c|");
board.setItem(0, j, c);
}
//skip newline
in.readLine();
for (int i = 1; i < 5; i++) {
for (int j = 0; j < 5; j++) {
c = (char) in.read();
//System.out.println("|" + c + "|");
board.setItem(i, j, c);
}
in.readLine(); // skip newline
}
boolean legalMove = true;
boolean done = false;
while (!done) {
line = in.readLine();
for (int i = 0; i < line.length(); i++) {
char move = line.charAt(i);
if (move == '0') {
done = true;
break;
}
if (legalMove) {
legalMove = board.makeMove(move);
}
}
}
System.out.println("Puzzle #" + tc + ":");
if (legalMove) {
System.out.print(board);
} else {
System.out.println("This puzzle has no final configuration.");
}
}
}
}

Không có nhận xét nào:

Đăng nhận xét

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...