/**
 * @author (Alfred Hermes) 
 * @version (2003, dec)
 */
public class Regel 
{
	private String[] muster = {"111","110","101","100","011","010","001","000"};
    private byte[] ersetzung={0,0,0,0,0,0,0,0};
    
	public Regel(){};
	public Regel(int nr){
	    waehleRegel(nr);
	}
 
    public void waehleRegel(int nr){
    nr = nr % 256;
    int stellenwert = 128;
    for (int k = 0; k <8; k++){
      if (nr >= stellenwert){
         ersetzung[k] = 1;
         nr = nr - stellenwert;
      }
      else{
         ersetzung[k] = 0; 
      }
      stellenwert = stellenwert / 2;
    }
    /*
         String s = Integer.toBinaryString(nr);
	     while (s.length() < 8) {
	       s = "0"+s;
	     }
	     for (int k = 0; k < 8; k++){
	         if(s.charAt(k) == '0')
	           ersetzung[k]=0;
	           else ersetzung[k]=1;
	     }
	     
	     */
    }
    
    private byte liesErsetzungZu(int zahl){      
	       if(zahl>=0 && zahl <=7){
	         return ersetzung[7-zahl];
	       }
	     else {
	         System.out.println("Fehler bei der Mustersuche"); 
	         return -1;
	     }
    }  
   
   /*
	public byte[] wendeAn(byte[] s0){
	   byte[] s1=new byte[s0.length];
	   byte wert=0;
	    for (int k=1; k < s0.length-1; k++){
	        wert = liesErsetzungZu(4*s0[k-1]+2*s0[k]+s0[k+1]);
	        if(k==1) s1[0]=wert;
	        s1[k] = wert;
		}
		s1[s0.length-1]=wert;
        return s1;
	 }
	*/
    public byte[] wendeAn(byte[] s0){
	   byte[] s1=new byte[s0.length];
	   for (int k=1; k < s0.length-1; k++){
	        int index = 7-(4*s0[k-1]+2*s0[k]+s0[k+1]);
	        s1[k] = ersetzung[index];
	     }
         s1[s0.length-1] = s1[s0.length-2];
         s1[0] = s1[1];
        return s1;
	 }

	
	//-----------
	public byte[] liesErsetzungen(){return ersetzung;}
	public String[] liesMuster(){ return muster;}
}