Skip to content

Instantly share code, notes, and snippets.

@bchetty
Created May 23, 2013 21:32
Show Gist options
  • Save bchetty/5639594 to your computer and use it in GitHub Desktop.
Save bchetty/5639594 to your computer and use it in GitHub Desktop.
GCJ 2011 - Magicka
import java.util.*;
import java.io.*;
public class Magicka {
public String castAspell(HashMap<String, String> mergeMap, HashMap<String, ArrayList<String>> opposingMap,
String invokeString, int invokeStringLength) {
StringBuilder sbOutput = new StringBuilder("" + invokeString.charAt(0));
for(int i=1;i<invokeStringLength;i++) {
int len = sbOutput.length();
if(len > 0) {
int pos = sbOutput.length() - 1;
String str1 = "" + sbOutput.charAt(pos);
String str2 = "" + invokeString.charAt(i);
if(mergeMap.containsKey(str1+str2) || mergeMap.containsKey(str2+str1)) {
sbOutput.deleteCharAt(pos);
sbOutput.append(mergeMap.get(str1+str2));
continue;
} else {
String tempStr = sbOutput.toString();
Iterator iter = opposingMap.entrySet().iterator();
boolean flag = false;
while (iter.hasNext()) {
Map.Entry pair = (Map.Entry) iter.next();
String key = (String) pair.getKey();
ArrayList&ltString&gt keyList = (ArrayList<String>) pair.getValue();
if(tempStr.indexOf(key) >= 0) {
for(String value: keyList) {
if(str2.indexOf(value) >= 0) {
sbOutput.delete(0, len);
flag = true;
}
}
}
if(flag) {
break;
}
}
if(!flag) {
sbOutput.append(", " + invokeString.charAt(i));
}
}
} else {
sbOutput.append(invokeString.charAt(i));
}
}
return "[" + sbOutput.toString() + "]";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment