Skip to content

Instantly share code, notes, and snippets.

@torazuka
Created July 28, 2012 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save torazuka/3194544 to your computer and use it in GitHub Desktop.
Save torazuka/3194544 to your computer and use it in GitHub Desktop.
第2回 オフラインリアルタイムどう書く: Java解答
package yhpg2;
import static org.junit.Assert.assertEquals;
import java.util.*;
import org.junit.Test;
/**
* 問題: http://nabetani.sakura.ne.jp/hena/ord2/
*/
public class BitTetris {
String execute(String input) {
String[] split = input.split("-");
String[] cols = getCols(split);
String[] rows = _tr(cols);
List<Integer> deleteIndexes = getDeleteIndexes(rows);
String[] deleted = getDeleted(rows, deleteIndexes);
String[] result = new String[deleted.length];
result = _tr(deleted);
result = _tr(result);
result = _tr(result);
String resultStr = getResultStr(result);
return resultStr;
}
String toData(String hexStr) {
String binStr = Integer.toBinaryString(Integer.parseInt(hexStr, 16));
Formatter f = new Formatter();
f.format("%04d", Integer.parseInt(binStr));
return f.toString();
}
String[] getDeleted(String[] rows, List<Integer> deleteRowList) {
String[] clone = new String[rows.length + 1];
for (int i = 0; i < rows.length; i++) {
clone[i] = rows[i];
}
clone[clone.length - 1] = "00000000";
String[] tmp = new String[rows.length - deleteRowList.size()];
int cnt = 0;
for (int i : deleteRowList) {
for (int k = i - cnt; k < rows.length; k++) {
clone[k] = clone[k + 1];
}
cnt++;
}
for (int i = 0; i < tmp.length; i++) {
tmp[i] = clone[i];
}
return tmp;
}
boolean canDelete(String row) {
if (row.indexOf("0") == -1) {
return true;
}
return false;
}
String getResultStr(String[] result) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.length; i++) {
Formatter f = new Formatter();
f.format("%08d", Integer.parseInt(result[i]));
String string = f.toString();
sb.append(Integer.toHexString(Integer.valueOf(
string.substring(0, 4), 2)));
sb.append(Integer.toHexString(Integer.valueOf(
string.substring(4, 8), 2)));
sb.append("-");
}
sb.deleteCharAt(sb.length() - 1);
return new String(sb);
}
String[] getCols(String[] split) {
String[] result = new String[split.length];
for (int i = 0; i < split.length; i++) {
String data = "";
for (int k = 0; k < 2; k++) {
data += toData(String.valueOf(split[i].charAt(k)));
}
result[i] = data;
}
return result;
}
List<Integer> getDeleteIndexes(String[] rows) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < rows.length; i++) {
if (canDelete(rows[i])) {
result.add(i);
}
}
return result;
}
String[] _tr(String[] str) {
String[] result = new String[str[0].length()];
for (int i = 0; i < result.length; i++) {
for (int k = 0; k < str.length; k++) {
if (result[i] == null) {
result[i] = String.valueOf(str[k].charAt(i));
} else {
String s = result[i];
result[i] = s + String.valueOf(str[k].charAt(i));
}
}
}
return result;
}
public static void main(String[] args) {
BitTetris tet = new BitTetris();
System.out.println(tet.execute("ff-2f-23-f3-77-7f-3b"));
}
@Test
public void testExecute() throws Exception {
BitTetris tet = new BitTetris();
assertEquals("1f-03-00-1c-0d-0f-06",
tet.execute("ff-2f-23-f3-77-7f-3b"));
assertEquals("00", tet.execute("01"));
assertEquals("00", tet.execute("00"));
assertEquals("0c-02", tet.execute("7a-4e"));
assertEquals("08-14", tet.execute("56-b6"));
assertEquals("00-00-00", tet.execute("12-12-12"));
assertEquals("0a-0f-05", tet.execute("de-ff-7b"));
assertEquals("05-1e-20", tet.execute("95-be-d0"));
assertEquals("1c-20-2b", tet.execute("7c-b0-bb"));
assertEquals("3a-56-11-2a", tet.execute("7a-b6-31-6a"));
assertEquals("18-06-11-40", tet.execute("32-0e-23-82"));
assertEquals("0f-07-0b-0d-0e", tet.execute("ff-7f-bf-df-ef"));
assertEquals("35-5f-5c-2e-02", tet.execute("75-df-dc-6e-42"));
assertEquals("22-11-6f-47-78", tet.execute("62-51-ef-c7-f8"));
assertEquals("04-23-46-6d-2d-0b", tet.execute("0c-47-8e-dd-5d-17"));
assertEquals("52-28-2b-35-4f-0f", tet.execute("aa-58-5b-6d-9f-1f"));
assertEquals("0f-00-08-04-02-01", tet.execute("ff-55-d5-75-5d-57"));
assertEquals("7e-7d-7b-77-6f-5f-3f",
tet.execute("fe-fd-fb-f7-ef-df-bf"));
assertEquals("7e-7d-7b-77-6f-5f-3f",
tet.execute("fd-fb-f7-ef-df-bf-7f"));
assertEquals("69-05-55-67-0b-4f-6e",
tet.execute("d9-15-b5-d7-1b-9f-de"));
assertEquals("18-05-7d-20-00-46-5a",
tet.execute("38-15-fd-50-10-96-ba"));
assertEquals("fe-fd-fb-f7-ef-df-bf-7f",
tet.execute("fe-fd-fb-f7-ef-df-bf-7f"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment