Untitled
Darin
plain_text
2 years ago
2.6 kB
8
Indexable
Tối ưu đoạn code sau cả về thời gian chạy và syntax sao cho dễ hiểu nhất, ngắn gọn nhất.
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
class UserSolution {
Map<String, TreeSet<String>> mapDir[] = new HashMap[3];
Map<String, Room> map = new HashMap<>();
Room current;
void init() {
map.clear();
for (int i = 0; i < 3; i++) {
mapDir[i] = new HashMap<>();
}
}
void addRoom(int mID, char[] mWord, int[] mDirLen) {
Room room = new Room(mID, mWord, mDirLen);
room.addToHash();
}
void setCurrent(char mWord[]) {
current = map.get(string(mWord));
}
// di chuyển current, nếu không được return 0
int moveDir(int mDir) {
String keyWord = current.dir[mDir];
if (mapDir[mDir].get(keyWord) != null) {
for (String word : mapDir[mDir].get(keyWord)) {
Room room = map.get(word);
if (room != current) { // ???
current = room;
return room.id;
}
}
}
return 0;
}
void changeWord(char mWord[], char mChgWord[], int mChgLen[]) {
Room room = map.get(string(mWord));
room.removeFromHash();
addRoom(room.id, mChgWord, mChgLen);
if (room == current) { // ???
current = map.get(string(mChgWord));
}
}
class Room {
int id;
String word;
String dir[] = new String[3];
Room(int mID, char[] mWord, int[] mDirlen) {
id = mID;
word = string(mWord);
dir[0] = word.substring(0, mDirlen[0]);
dir[1] = word.substring(4, 7);
dir[2] = word.substring(word.length() - mDirlen[2]);
}
void addToHash() {
// thêm Room vào map với từ khóa word
// đảo ngược
map.put(word, this);
// back
mapDir[2].computeIfAbsent(word.substring(0, 2),
k -> new TreeSet<>()).add(word);
mapDir[2].computeIfAbsent(word.substring(0, 4),
k -> new TreeSet<>()).add(word);
// middle
mapDir[1].computeIfAbsent(word.substring(4, 7),
k -> new TreeSet<>()).add(word);
// front
mapDir[0].computeIfAbsent(word.substring(7), k -> new TreeSet<>())
.add(word);
mapDir[0].computeIfAbsent(word.substring(9), k -> new TreeSet<>())
.add(word);
}
void removeFromHash() {
map.remove(word);
mapDir[2].get(word.substring(0, 2)).remove(word);
mapDir[2].get(word.substring(0, 4)).remove(word);
mapDir[1].get(word.substring(4, 7)).remove(word);
mapDir[0].get(word.substring(7)).remove(word);
mapDir[0].get(word.substring(9)).remove(word);
}
}
String string(char[] s) {
return new String(s).trim();
}
}
Editor is loading...