Braille characters are written using a 3x2 arrangement
of up to 6 dots (See right). To represent Braille
characters in the input file DATA21.txt, each line of
Braille characters is composed of a set of 3
conventional lines composed of x's and o's (in lower
case). The X represents the presence of a dot and the
O the absence of a dot. The file contains 5 sets of 3
lines, where each set represents a phrase in Braille.
No line will be longer than 250 characters (125 braille
characters).
OX
XX for example represents the letter t and
XO
OXXOXO
XXXXOX the word: the
XOOOOO
Write a program that will read DATA21.txt (DATA22.txt for the second try) and translate each phrase into conventional text.
Sample Input
oxxoxooxoooxoxoooxxoxoooxooxxoooxoxxooxoooxoxoxoxo
xxxxooxxooxoxoooxxxxoxooooxooxoooxxoooooooxooxoxoo
oxooooxoooooxoooxoooooooxxxoooooxoooooooooooxoxoxo
oxoxoxxoxoxooxooxxoxxxoxxoxoxooxooxoxoooxxxoxxxoxoxooxxooxoxxoxxox
xxxoxxxxoxooxxooxoxoooxxooxxoxxooooxxxoooooxoxxooxxxxoooxxxooxoxxo
oxooxoooxoxxxoooxoooooxoxxxoooxoooxoxoooooxoxoxxooxoxoooxoooxoxoxo
xoxoooxxxxooxoxoxooxooxoxxxxoooxxooxoxxoxoxooxoo
oxxxoooooxoooxooxxxooooooxoxooxxxxxoxooooxxxxooo
xoooooxoxxooooooxoxoooooxooooooxooooxoxoooxoxooo
xoxooxooxoxooxxooooxoxoxooxxxooxoxoxxxxx
xxoxxxooxoooxxoxooxoxxxoooxxoxxxxxxooxxx
ooxooxooxoooxoooooooxoxoooooooxoxoooxooo
xxxoxooxxoxooxxoxoooxoxxxxooxxxoxooxxoxooxxoxo
ooooxxxooxooxooxxxoooooxoxooooooxxxooxooxooxxx
ooxxxoooxoxxxoooxoooooxoooooooxxxoooxoxxxoooxo
Sample Output
what is the use of a book
without pictures or conversations
oh my ears and whiskers
how late its getting
curiouser and curiouser
import java.io.File; import java.util.ArrayList; import java.util.Scanner; public class Problem_2_Braille { public static void main(String[] args) { try { Scanner scanner = new Scanner(new File("C:\\Users\\Mike\\Desktop\\problem_2_braille_DATA11.txt")); ArrayList<String> list = new ArrayList<String>(); // read in the file line by line to the ArrayList while (scanner.hasNextLine()) { list.add(scanner.nextLine()); } // five string arrays for the five sets of braille sentences // group braille in 2x3 so only have the array be half the length String[] set1 = new String[list.get(0).length() / 2]; String[] set2 = new String[list.get(3).length() / 2]; String[] set3 = new String[list.get(6).length() / 2]; String[] set4 = new String[list.get(9).length() / 2]; String[] set5 = new String[list.get(12).length() / 2]; // go through each set of three lines individually and construct the array elements // so that one array element contained three vertical pairs of braille (separated by commas) for (int line = 0; line < 3; line++) { for (int pair = 0; pair < list.get(line).length() - 1; pair += 2) { // every two characters String s = list.get(line).substring(pair, pair + 2); // collect this pair of characters if (line == 0) set1[pair / 2] = s + ","; // first line in the set of three, so set the entire element else if (line == 1) set1[pair / 2] += s + ","; // second line in the set of three, so append to the element (also with a comma) else set1[pair / 2] += s; // third line in the set of three, so append to the element (without a comma) } } // same thing for the rest of the loops, except add three to every index because it's a new set of three lines. for (int line = 3; line < 6; line++) { for (int pair = 0; pair < list.get(line).length() - 1; pair += 2) { String s = list.get(line).substring(pair, pair + 2); if (line == 3) set2[pair / 2] = s + ","; else if (line == 4) set2[pair / 2] += s + ","; else set2[pair / 2] += s; } } for (int line = 6; line < 9; line++) { for (int pair = 0; pair < list.get(line).length() - 1; pair += 2) { String s = list.get(line).substring(pair, pair + 2); if (line == 6) set3[pair / 2] = s + ","; else if (line == 7) set3[pair / 2] += s + ","; else set3[pair / 2] += s; } } for (int line = 9; line < 12; line++) { for (int pair = 0; pair < list.get(line).length() - 1; pair += 2) { String s = list.get(line).substring(pair, pair + 2); if (line == 9) set4[pair / 2] = s + ","; else if (line == 10) set4[pair / 2] += s + ","; else set4[pair / 2] += s; } } for (int line = 12; line < 15; line++) { for (int pair = 0; pair < list.get(line).length() - 1; pair += 2) { String s = list.get(line).substring(pair, pair + 2); if (line == 12) set5[pair / 2] = s + ","; else if (line == 13) set5[pair / 2] += s + ","; else set5[pair / 2] += s; } } // print each braille sentence for (String s : set1) { System.out.print(brailleToEnglish(s)); } System.out.println(); for (String s : set2) { System.out.print(brailleToEnglish(s)); } System.out.println(); for (String s : set3) { System.out.print(brailleToEnglish(s)); } System.out.println(); for (String s : set4) { System.out.print(brailleToEnglish(s)); } System.out.println(); for (String s : set5) { System.out.print(brailleToEnglish(s)); } } catch (Exception e) { System.out.println("Exception"); } } /* returns the English letter representation of the braille string parameter */ public static String brailleToEnglish(String braille) { if (braille.equals("xo,oo,oo")) return "a"; else if (braille.equals("xo,xo,oo")) return "b"; else if (braille.equals("xx,oo,oo")) return "c"; else if (braille.equals("xx,ox,oo")) return "d"; else if (braille.equals("xo,ox,oo")) return "e"; else if (braille.equals("xx,xo,oo")) return "f"; else if (braille.equals("xx,xx,oo")) return "g"; else if (braille.equals("xo,xx,oo")) return "h"; else if (braille.equals("ox,xo,oo")) return "i"; else if (braille.equals("ox,xx,oo")) return "j"; else if (braille.equals("xo,oo,xo")) return "k"; else if (braille.equals("xo,xo,xo")) return "l"; else if (braille.equals("xx,oo,xo")) return "m"; else if (braille.equals("xx,ox,xo")) return "n"; else if (braille.equals("xo,ox,xo")) return "o"; else if (braille.equals("xx,xo,xo")) return "p"; else if (braille.equals("xx,xx,xo")) return "q"; else if (braille.equals("xo,xx,xo")) return "r"; else if (braille.equals("ox,xo,xo")) return "s"; else if (braille.equals("ox,xx,xo")) return "t"; else if (braille.equals("xo,oo,xx")) return "u"; else if (braille.equals("xo,xo,xx")) return "v"; else if (braille.equals("ox,xx,ox")) return "w"; else if (braille.equals("xx,oo,xx")) return "x"; else if (braille.equals("xx,ox,xx")) return "y"; else if (braille.equals("xo,ox,xx")) return "z"; else if (braille.equals("oo,oo,oo")) return " "; else return "ERROR"; } }
Note: I did hard code in the braille conversions and the sets of three lines parsing. It just happened to be much faster to do that, rather than worrying about getting a complicated array working.
DOWNLOAD as .javaUsing their sample input:
oxxoxooxoooxoxoooxxoxoooxooxxoooxoxxooxoooxoxoxoxo xxxxooxxooxoxoooxxxxoxooooxooxoooxxoooooooxooxoxoo oxooooxoooooxoooxoooooooxxxoooooxoooooooooooxoxoxo oxoxoxxoxoxooxooxxoxxxoxxoxoxooxooxoxoooxxxoxxxoxoxooxxooxoxxoxxox xxxoxxxxoxooxxooxoxoooxxooxxoxxooooxxxoooooxoxxooxxxxoooxxxooxoxxo oxooxoooxoxxxoooxoooooxoxxxoooxoooxoxoooooxoxoxxooxoxoooxoooxoxoxo xoxoooxxxxooxoxoxooxooxoxxxxoooxxooxoxxoxoxooxoo oxxxoooooxoooxooxxxooooooxoxooxxxxxoxooooxxxxooo xoooooxoxxooooooxoxoooooxooooooxooooxoxoooxoxooo xoxooxooxoxooxxooooxoxoxooxxxooxoxoxxxxx xxoxxxooxoooxxoxooxoxxxoooxxoxxxxxxooxxx ooxooxooxoooxoooooooxoxoooooooxoxoooxooo xxxoxooxxoxooxxoxoooxoxxxxooxxxoxooxxoxooxxoxo ooooxxxooxooxooxxxoooooxoxooooooxxxooxooxooxxx ooxxxoooxoxxxoooxoooooxoooooooxxxoooxoxxxoooxo
And the output to that is:
what is the use of a book without pictures or conversations oh my ears and whiskers how late its getting curiouser and curiouserDOWNLOAD as .txt
Created: April 1, 2014
Completed in full by: Michael Yaworski