import java.util.*;
import java.util.Arrays;
import chn.util.*;
/**
* Write a description of class RandomAlpha here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class RandomAlpha
{
public static void main(String[] args){
ConsoleIO sys = new ConsoleIO();
RandomAlpha rnd = new RandomAlpha();
System.out.print("Would you like to encode/decode (e/d)\n>");
char choice = sys.readLine().charAt(0);
System.out.print("Enter the name of the file\n>");
String name = sys.readLine();
FileInput inFile = new FileInput(name);
String key = "";
if(choice=='e'){
key = rnd.arrToString(rnd.getAlphabet());
}
else if(choice=='d'){
//System.out.println("1");
key=inFile.readLine();
//System.out.println("2");
}
inFile.close();
inFile = new FileInput(name);
ArrayList<String> file = rnd.readFile(inFile);
System.out.println("\nKey is: "+key);
String[] temp = rnd.listToArr(file);
if(choice == 'e'){
temp = rnd.encodeArr(key,temp);
}
else if(choice =='d')
temp=rnd.decodeArr(key,temp);
rnd.exportToFile(key,temp);
//rnd.test();
}
public void test(){
RandomAlpha rnd = new RandomAlpha();
String[] arr = rnd.getAlphabet();
String key = rnd.arrToString(arr);
ConsoleIO sys = new ConsoleIO();
System.out.println("Key is: "+rnd.arrToString(arr));
System.out.println(" abcdefghijklmnopqrstuvwxyz");
System.out.print("Enter the name of the file\n>");
FileInput inFile = new FileInput(sys.readLine());
ArrayList<String> file = rnd.readFile(inFile);
file=rnd.toLower(file);
System.out.println("Lower: "+file);
String[] encoded = rnd.encodeArr(rnd.arrToString(arr),rnd.listToArr(file));
for(int i = 0;i<encoded.length;i++)
System.out.println("Encoded line "+(i+1)+": "+encoded[i]);
String[] decoded = rnd.decodeArr(rnd.arrToString(arr),encoded);
for(int i = 0;i<decoded.length;i++)
System.out.println("Decoded line "+(i+1)+": "+decoded[i]);
exportToFile(key,encoded);
}
public void exportToFile(String key, String[] arr){
FileOutput outFile = new FileOutput("output.txt");
outFile.println(key);
for(int i = 0;i<arr.length;i++){
outFile.println(arr[i]);
}
outFile.close();
}
public String[] encodeArr(String inp, String[] file){
String[] out = new String[file.length];
for(int i = 0; i<file.length;i++){
out[i]=encode(inp,file[i]);
}
return out;
}
public String[] decodeArr(String inp, String[] file){
String[] out = new String[file.length];
for(int i = 0; i<file.length;i++){
out[i]=decode(inp,file[i]);
}
return out;
}
public String encode(String inp,String txt){
char[] key = new char[26];
for(int i = 0;i<26;i++){
key[i]=inp.charAt(i);
}
String temp = "";
for(int i =0;i<txt.length();i++){
char cur = txt.charAt(i);
if(cur>96&&cur<123){
temp+=""+key[cur-'a'];
}
else{
temp+=""+cur;
}
}
return temp;
}
public String decode(String inp,String txt){
char[] key = new char[26];
for(int i = 0;i<26;i++){
key[i]=inp.charAt(i);
}
String temp = "";
for(int i =0;i<txt.length();i++){
char cur = txt.charAt(i);
if(cur>96&&cur<123){
temp+=""+(char)('a'+indexOfArr(key,cur));
//System.out.println("Decoding "+cur+" to "+(char)('a'+indexOfArr(key,cur))+" because index is "+indexOfArr(key,cur));
}
else{
temp+=""+cur;
}
}
//System.out.println("\n");
return temp;
}
public static int indexOfArr(char[] arr, char inp){
int ret = -1;
for(int i =0;i<arr.length;i++){
if(arr[i]==inp){
return i;
}
}
return ret;
}
public ArrayList<String> toLower (ArrayList<String> inp){
ArrayList<String> temp = new ArrayList<String>();
for(int i = 0;i<inp.size();i++){
temp.add(inp.get(i).toLowerCase());
//System.out.println(temp);
}
return temp;
}
public ArrayList<String> readFile(FileInput inFile){
ArrayList<String> out = new ArrayList<String>();
while(inFile.hasMoreLines()){
//System.out.println("hit");
out.add(inFile.readLine());
//System.out.println("err");
}
return out;
}
public String arrToString(String[] inp){
String temp="";
for(int i = 0;i<inp.length;i++){
temp+=inp[i];
}
return temp;
}
public String[] getAlphabet(){
ArrayList<Character> all = new ArrayList<Character>();
ArrayList<String> alpha = new ArrayList<String>();
for(int i = 97;i<123;i++){
all.add((char)i);
}
//System.out.println(all);
while(all.size()>0){
alpha.add(""+all.remove((int)(Math.random()*all.size())));
//System.out.println(all.size());
}
//System.out.println("Returning "+alpha);
//System.out.println(alpha.size());
return listToArr(alpha);
}
public String[] listToArr(ArrayList<String> inp){
String[] ret = new String[inp.size()];
for(int i = 0;i<ret.length;i++){
ret[i]=inp.get(i);
//System.out.println(inp.get(i));
}
//System.out.println(Arrays.toString(ret));
return ret;
}
}