AlphaBot 26 sourcecode

AlphaBot ~ Silent Holes ~ Rosetta Stone

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 --------