AlphaBot 26 sourcecode
Main Entry: AlphaBot System
Function: public class xorart_alphabotx (java)
Description: The xorart_alphabotx class implements executable softwarecode
which converts words (base 27) to their base-10 numerical equivalents and back.
Author: Baker, Baker & Baker ©2000 H.MM 2K, Baker Baker Omnia Baker
Date: OCT 2K8
/*
the xorart bignumber alphabot class
©2K Baker Baker Omnia Baker
(alpha) versie notes (dutch)
Alphabot bewerkt alleen alphabetische input. ("wordReals")
andere tekens worden onveranderd doorgegeven in de outputstream;
de xorart_alphabotx class zoekt strings met begin en eind gemarkeerd door een spatie " "
deze 'string-stukken', bijvoorbeeld woorden uit een input tekst,
kunnen uit een mix van letters, cijfers en leestekens bestaan
alle 'woorden' worden char voor char bekeken en
chunks binnen string-stukken die onafgebroken uit letters bestaan
worden naar 26-digit alphabotwoorden omgezet.
Alphabot is extreem 'greedy'; een (chunk van) cijfer(s) of leesteken(s) wordt
onveranderd opgenomen in de outputstring.
"b89" = "b" + "89" = 2 + 89 = 289 //greedy
Nb. de verwerking van mixed words is niet omkeerbaar in deze versie:
"b3" = "b" + 3 = 2 3
"b3" wordt 23, maar 23 terug wordt "w", niet "b3" // ....
SOLUTION/FEATURE...tag de chunks in "MIXED-WORDS"
... aangeven waar chunks *numeric of ^alphabot zijn:
"de25b" = ^113*25^2 // dit is omkeerbaar
wordReals bestaan volledig uit letters en zijn dus altijd omkeerbaar:
"az" -> 53 -> "az"
"ba" -> 55 -> "ba"
Nb. 54 in alphabot komt niet voor. //gap
below: de java code.
*/
import java.math.*;
import java.io.*;
public class xorart_alphabotx {
//--- mainfunctie, 2 methods:
public static void main(String[] args) throws IOException {
String ourIntext = readSfile( "ascii.txt" ); // INPUT FILE: ASCII.TXT
String mysTapout = ""; // deze string collects alles voor de output
mysTapout += "\n The xorart_alphabotx class implements the executable program";
mysTapout += "\n in order to convert words to their base-10 numerical equivalents.";
mysTapout += "\n Baker Baker, Omnia Baker (2000)";
mysTapout += "\n ---------------------------------------------------------------------\n";
int ourIntextLen = ourIntext.length() -1; //fix last substr 4 use
BigInteger bimine = new BigInteger("0");
LookupWord myOOLookupWord = new LookupWord(bimine); // objectcode see below
String mywoord = "";
String mynonwoord = "";
String zonderboldzeroes = "";
String metboldzeroes = "";
int i = 0;
int b = 0;
String d = ourIntext.substring(0,1); // eerste substr
int u = myOOLookupWord.getLutidx(d); // returns -1 als geen letter
while ( i < ourIntextLen ) { // mainloop
mywoord = "";
metboldzeroes = "";
mynonwoord = mywoord; // i like this
// ===== OPT 1: NONWOORD
while ( u == -1 && i < ourIntextLen) {
mynonwoord += d;
i++;
d = ourIntext.substring(i, i+1); // 1 letter tegelijk
u = myOOLookupWord.getLutidx(d); // returns LUT-idx, of -1 als geen letter
}
mysTapout += mynonwoord;
// ===== OPT 2: WOORD
while ( u != -1 && i < ourIntextLen) {
mywoord += d;
i++;
d = ourIntext.substring(i, i+1); // 1 letter tegelijk
u = myOOLookupWord.getLutidx(d); // returns LUT-idx of -1 als geen letter
}
//
bimine = myOOLookupWord.getBigNumWord(mywoord); // convert 27dig to 10dig
zonderboldzeroes = bimine.toString();
//
for (b=0; b < zonderboldzeroes.length(); b++) {
if ( zonderboldzeroes.substring(b, b+1).equals("0") ){
metboldzeroes += "<B>" + zonderboldzeroes.substring(b, b+1) + "</B>";
} else {
metboldzeroes += zonderboldzeroes.substring(b, b+1); //default
}
}
//
mysTapout += metboldzeroes;
}
mysTapout += "\n\n...einde.\n";
String ourOuttext = writeSfile( "writtenout.txt" , mysTapout ); // OUTPUT FILE: WRITTENOUT.TXT
System.out.println(ourOuttext);
} // einde mainfunctie...
//--- METHOD readSfile:
public static String readSfile(String f) {
String lineSep = System.getProperty("line.separator");
String allLinesstrg = "";
try {
String aLine = "";
BufferedReader br = new BufferedReader(new FileReader(f));
while(null != (aLine = br.readLine()))
allLinesstrg += aLine + lineSep;
br.close();
}
catch(Exception e) {
e.printStackTrace();
} finally {
return allLinesstrg;
}
}
//--- METHOD writeSfile
public static String writeSfile(String g, String mySdat) {
String tip="";
try {
BufferedWriter out = new BufferedWriter(new FileWriter(g));
out.write(mySdat);
out.close();
tip="\n\t no (io)exceptions \n";
}
catch(IOException e) {
tip="\n\t ohoh io exception! \n";
e.printStackTrace();
} finally {
return tip;
}
}
} // -------- eind class xorart_alphabotx --------
// LookupWord code:
class LookupWord extends xorart_alphabotx {
public BigInteger hj = new BigInteger("0");
// fill lookuptables:
public String[] radixLo =
{"leeg","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
public String[] radixUp =
{"LEEG","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
//--- CONSTRUCTOR
public LookupWord(BigInteger inzt) {
this.hj = inzt; // just any (BigInteger) to init obj ?
}
//--- METHOD
public int getLutidx(String singlekarakt) {
// returns the [id] of one single char, as an int, eg z -> 26.
int li = 0;
int re = -1; // geen match
for (li=0; li < this.radixLo.length; li++) {
if ( singlekarakt.equals(this.radixUp[li]) || singlekarakt.equals(this.radixLo[li]) ){
re=li;
break;
}
}
return re; // 1-26 (A-Z); ...of -1, als geen match
}
//--- METHOD
public BigInteger getBigNumWord(String abcwoord) {
// returns Alphabot word as BI eg "ae"->32 , calls getLutidx() inside
String tletter = "";
int m = abcwoord.length();
int i = 0;
int j = m-1-i;
int u = 0;
long v = 0L;
BigInteger grondtal = new BigInteger("27"); // what radix u want
BigInteger bp = new BigInteger("0");
BigInteger bk = new BigInteger("0");
for (i=0; i<m; i++) {
tletter=abcwoord.substring(i, i+1);
u=this.getLutidx(tletter); // returns int ...
v=u; // ... int u need it long: v
bk = BigInteger.valueOf(v); // ... long v ... BigInteger bk ...
//bp = bp.add(bk.multiply(grondtal.pow(i))); // letters vlnr: i als exponent.
j = m-1-i;
bp = bp.add(bk.multiply(grondtal.pow(j))); // vrnl zoals NUMMERS; j=m-1-i; j als exponent
}
return bp; // returns a BigInteger
}
} // -------- eind class LookupWord --------