/**
* Klasi sem les decoded orð og skilar því encoded.
* Snjallt væri að hafa orðabók til að bera saman orðin og hætta
* þegar gáfulegt orð finnst, en íslenskan hefur svo margar
* beygingar að það væri ansi stór orðabókaskrá.
* Þess vegna puðrar klasinn bara út öllum mögulegum útgáfum af * orðinu og notandinn finnur gáfulegt orð og sér hliðrunina við * hlið þess.
*
* Sem dæmi, þá er þrautin að finna “Lqjinqjlotq” sem kemur út
* sem: gledilegjol 21
*
* Þarna má sjá að hliðrunin er 21 stafur, þ.e. a->v, l->g
* o.sv.fr.
*/
public class CMain {
// Breyta sem geymir stafrófið í array ( vantar að gera ráð
//fyrir stafabili :-)
public char[] m_Chars = {'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'};
/**
* Sækir staðsetningu stafs í stafrófinu. -1 er skilað ef
* stafurinn finnst ekki. Aldrei neitt gert í því. Oh well.
*/
public int getIndex( char c ){
for(int i = 0; i < m_Chars.length; i++)
if( m_Chars == c )
return i;
return -1;
}
/**
* Færir til hægri gildi stafs. Ef færslan fer yfir 26ta staf,
* þá byrjum við frá byrjun (hringur).
*/
public void moveRight( char[] decoded, int offs ){
int index = 0;
for( int i = 0; i < decoded.length; i++){
index = getIndex(decoded);
decoded = m_Chars[(( index + offs) > 25)?(index+offs-26):(index+offs)];
}
}

/* Smiður */
public CMain() {}

/**
* Main fallið.
* Notkun: CMain [orðtilaðleysa] [hliðrun]
* Eða enga parametra.
*/
public static void main(String[] args) {
CMain encoder = new CMain();
char[] ciph = (args.length == 0)?
“Lqjinqjlotq”.toLowerCase().toCharArray():
args[0].toLowerCase().toCharArray();
// Prófum allar 25 tilfærslurnar. Ein er rétt
if( args.length < 2){
for( int i = 0; i < encoder.m_Chars.length; i++ ){
// Færum um 1 í einu, en ekki i vegna pass by ref.
encoder.moveRight( ciph, 1);
System.out.print(ciph);
System.out.println(“ ” + (i+1));
}
}
// Notandi hefur sent inn hliðrunina. Engin villutékk :þ
else{
encoder.moveRight( ciph, Integer.parseInt(args[1]) );
System.out.println( ciph );
}
}
}