Scrabble Cheat - Unika Repository

  

APPENDIX

  import java.util.ArrayList; import java.io.*; public class ScrabbleCheat { private int hashtablesize = 100; private ArrayList word; private String filename = "word2000.txt"; private HashTable hashtable; private FileWord fileword; private Combination kombinasi; private ScrabbleCheatGui scrabblegui; public ScrabbleCheat() { word = new ArrayList(); hashtable = new HashTable(hashtablesize); fileword = new FileWord(hashtable);

  } public void BacaFile() { fileword.ReadFile(filename); hashtable.DisplayTable();

  } public void PermutationKata(String kata, ArrayList kotakkecil, int noisi) {

  ArrayList hasil; kombinasi = new Combination(kata, hashtable, kotakkecil); kombinasi.Start(); hasil = kombinasi.GetHasil(); scrabblegui.SetHasil(hasil);

  } public void ScrabbleGui() { scrabblegui = new ScrabbleCheatGui(this); } public static void main(String[] args) {

  ScrabbleCheat cheat = new ScrabbleCheat(); cheat.BacaFile(); cheat.ScrabbleGui();

  } }

  Perpustakaan Unika

ScrabbleCheat.java

  class HashTable { private DataItem[] hasharray; private int arraysize; public HashTable(int size) { int j; arraysize = size; hasharray = new DataItem[arraysize]; for(j=0; j<arraysize; j++) hasharray[j] = new DataItem(); } public void DisplayTable() { int j; for (j=0; j<arraysize; j++) { System.out.print(j +". "); hasharray[j].DisplayList(); System.out.println(); }

  } public int HashFunc (String key) { int total = 0; int len = key.length(); char[] ckey = key.toCharArray(); for(int i=0;i<len;i++) { int index = HashFunc2 (ckey[i]); total = total + index;

  } return total % arraysize; } public int HashFunc2 (char ckey) { if( ckey == 'a') return 1; if( ckey == 'b') return 2; if( ckey == 'c') return 3; if( ckey == 'd') return 4; if( ckey == 'e') return 5; if( ckey == 'f') return 6; if( ckey == 'g') return 7; if( ckey == 'h') return 8; if( ckey == 'i') return 9; if( ckey == 'j') return 10; if( ckey == 'k') return 11; if( ckey == 'l') return 12; if( ckey == 'm') return 13; if( ckey == 'n') return 14; if( ckey == 'o') return 15;

  Perpustakaan Unika

HashTable.java

  Perpustakaan Unika

  if( ckey == 'q') return 17; if( ckey == 'r') return 18; if( ckey == 's') return 19; if( ckey == 't') return 20; if( ckey == 'u') return 21; if( ckey == 'v') return 22; if( ckey == 'w') return 23; if( ckey == 'x') return 24; if( ckey == 'y') return 25; if( ckey == 'z') return 26; return 0;

  } public void Insert(String word1) { int hashval1; hashval1 = HashFunc(word1); hasharray[hashval1].Insert(word1);

  } public boolean Search(String word2) { int hashval2; boolean result; hashval2 = HashFunc(word2); result = hasharray[hashval2].Search(word2); return result;

  } }

FileWord.java

  import java.util.ArrayList; import java.io.*; public class FileWord { private HashTable word; public FileWord(HashTable word) { this.word = word; } public void ReadFile(String filename) { try

  { String line = null; FileReader filereader = new FileReader(filename); BufferedReader reader = newBufferedReader(filereader);

  Perpustakaan Unika

  line = reader.readLine(); while( line!=null ) { word.Insert(line); line = reader.readLine();

  } filereader.close(); } catch(Exception ex) { System.out.println( "Error File: " + ex ); }

  } }

DataItem.java

  import java.util.ArrayList; class DataItem { private Link nodeNext; private Link first; public DataItem() { first = null; } public void Insert (String data) {

  Link theLink = new Link(data); theLink.setNext(null); if ( first == null ) { first = theLink; } else {

  Link cursor = first; while( cursor.getNext() != null ) { cursor = cursor.getNext(); } cursor.setNext(theLink);

  } } public void DisplayList() {

  Link cursor = first; while( cursor != null )

  Perpustakaan Unika

  System.out.print( cursor.getData() + " , "); cursor = cursor.getNext(); }

  } public boolean Search (String thedata) {

  Link cursor = first; while( cursor != null ) { if(thedata.equalsIgnoreCase( cursor.getData() ))

  { return true; } cursor = cursor.getNext();

  } return false; }

  }

Link.java

  public class Link { private String data1; private Link next; public Link (String data2) { data1 = data2; } public void setNext( Link next )

  { this.next = next; } public Link getNext()

  { return next; } public String getData() { return data1; }

  }

  Perpustakaan Unika

Combination.java

  import java.util.ArrayList; public class Combination { private int alphabetlength; private String alphabet; private String kombinasi; private ArrayList list; private ArrayList hasil; private HashTable hash; private Permutation permutasi; public Combination(String kata, HashTable hashtable, ArrayList kotakkecil) { hash = hashtable; alphabet = kata; list = new ArrayList(); hasil = new ArrayList(); alphabetlength = alphabet.length(); permutasi = new Permutation(hasil, hashtable, kotakkecil);

  } public ArrayList GetHasil() { return hasil; } public void Start() { int i; for(i=2;i<=alphabetlength;i++) { kombinasi = "";

  FindCombinations(0,i); }

  } public void FindCombinations(int awal, int batas) { int i,j,start;

  String sementara=""; String angka =""; if( awal == batas ) { sementara = IndexToHuruf(kombinasi); permutasi.FindPermutations(sementara, list);

  Perpustakaan Unika

  return; } for(j = 0; j<alphabetlength; j++) { sementara = kombinasi; angka = Integer.toString(j); if( kombinasi.indexOf(angka) >= 0) return; kombinasi = kombinasi + angka; start = awal + 1; FindCombinations(start, batas); kombinasi = sementara;

  } } public String IndexToHuruf(String word) {

  String indexhuruf, kata=""; char huruf; int i, j; int panjangindex = word.length(); list.clear(); for(i=0;i<panjangindex;i++) { indexhuruf = "" + word.charAt(i); j = Integer.parseInt(indexhuruf); huruf = alphabet.charAt(j); kata = kata + huruf; list.add(i, huruf);

  } return kata; } }

Permutation.java

  import java.util.ArrayList; import java.math.BigInteger; import java.lang.String; public class Permutation { private int alphabetlength; private String alphabet; private ArrayList list; private ArrayList hasil; private ArrayList kotak; private HashTable hash; private int[] a; private BigInteger numLeft; private BigInteger total; public Permutation(ArrayList ahasil, HashTable hashtable, ArrayList kotakkecil) { hash = hashtable; list = new ArrayList(); hasil = ahasil; kotak = kotakkecil;

  } public void FindPermutations(String kata, ArrayList listing) { int[] indices; boolean display; String str; char[] elements; int n; elements = kata.toCharArray(); n =elements.length; a = new int[n]; total = getFactorial (n); reset (); while (hasMore ()) { str = ""; indices = getNext (); for (int i = 0; i < indices.length; i++) { str = str + elements[indices[i]]; } display = hash.Search(str); if(display) { if( ! hasil.contains(str) )

  { if(PencocokanKotakKecil(str)) { hasil.add(str); }

  } }

  } } private boolean PencocokanKotakKecil(String str)

  { String temp, huruf; int i;

  Perpustakaan Unika

  Perpustakaan Unika

  { temp = (String) kotak.get(i); if(i<str.length()) huruf = "" + str.charAt(i); else huruf=""; if(!temp.equals(huruf) && !temp.equals("")) { return false; }

  } return true; } public void reset ()

  { for (int i = 0; i < a.length; i++) { a[i] = i; } numLeft = new BigInteger (total.toString ()); } public BigInteger getNumLeft () { return numLeft; } public BigInteger getTotal () { return total; } public boolean hasMore () { return numLeft.compareTo (BigInteger.ZERO) == 1; } private static BigInteger getFactorial (int n) { BigInteger fact = BigInteger.ONE; for (int i = n; i > 1; i--) { fact = fact.multiply (new BigInteger (Integer.toString(i))); } return fact; } public int[] getNext () { if (numLeft.equals (total)) { numLeft = numLeft.subtract (BigInteger.ONE); return a; }

  Perpustakaan Unika

  int temp; int j = a.length - 2; while (a[j] > a[j+1]) { j--; } int k = a.length - 1; while (a[j] > a[k]) { k--; } temp = a[k]; a[k] = a[j]; a[j] = temp; int r = a.length - 1; int s = j + 1; while (r > s) { temp = a[s]; a[s] = a[r]; a[r] = temp; r--; s++; } numLeft = numLeft.subtract (BigInteger.ONE); return a; } }

ScrabbleCheatGui.java

  import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; public class ScrabbleCheatGui extends JFrame {

  // Variables declaration private JLabel label; private JTextField t1; private JTextField t2; private JTextField t3; private JTextField t4; private JTextField t5; private JTextField t6;

  Perpustakaan Unika

  private JTextField t8; private JTextField t9; private JTextField t10; private JTextField inputwords; private JTextArea searchresult; private JScrollPane jScrollPane1; private JButton buttonsearch; private JButton buttonclear; private JPanel contentPane; private String teks; // End of variables declaration private ScrabbleCheat scrabble; public ScrabbleCheatGui(ScrabbleCheat scrabble) { super(); this.scrabble = scrabble; initializeComponent(); this.setVisible(true);

  } private void initializeComponent() { label = new JLabel(); t1 = new JTextField(); t2 = new JTextField(); t3 = new JTextField(); t4 = new JTextField(); t5 = new JTextField(); t6 = new JTextField(); t7 = new JTextField(); t8 = new JTextField(); t9 = new JTextField(); t10 = new JTextField(); inputwords = new JTextField(); searchresult = new JTextArea(); jScrollPane1 = new JScrollPane(); buttonsearch = new JButton(); buttonclear = new JButton(); contentPane = (JPanel)this.getContentPane(); // // label // label.setText("Input Words"); // // t1 // t1.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t1.getText(); if(teks.compareTo("") != 0) t1.setText(teks.charAt(0)+ ""); }

  });

  Perpustakaan Unika

  // t2 // t2.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t2.getText(); if(teks.compareTo("") != 0) t2.setText(teks.charAt(0)+ ""); }

  }); // // t3 // t3.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t3.getText(); if(teks.compareTo("") != 0) t3.setText(teks.charAt(0)+ ""); }

  }); // // t4 // t4.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t4.getText(); if(teks.compareTo("") != 0) t4.setText(teks.charAt(0)+ ""); }

  }); // // t5 // t5.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t5.getText(); if(teks.compareTo("") != 0) t5.setText(teks.charAt(0)+ ""); }

  }); // // t6 // t6.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t6.getText(); if(teks.compareTo("") != 0) t6.setText(teks.charAt(0)+ ""); }

  Perpustakaan Unika

  // // t7 // t7.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t7.getText(); if(teks.compareTo("") != 0) t7.setText(teks.charAt(0)+ ""); }

  }); // // t8 // t8.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t8.getText(); if(teks.compareTo("") != 0) t8.setText(teks.charAt(0)+ ""); }

  }); // // t9 // t9.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t9.getText(); if(teks.compareTo("") != 0) t9.setText(teks.charAt(0)+ ""); }

  }); // // t10 // t10.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent evt) { teks = t10.getText(); if(teks.compareTo("") != 0) t10.setText(teks.charAt(0)+ ""); }

  }); // // seachresult // // // jScrollPane1 // jScrollPane1.setViewportView(searchresult); //

  Perpustakaan Unika

  // buttonsearch.setText("Search"); buttonsearch.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)

  { buttonsearch_actionPerformed(e); }

  }); // // buttonclear // buttonclear.setText("Clear"); buttonclear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)

  { buttonclear_actionPerformed(e); }

  }); // // contentPane // contentPane.setLayout(null); addComponent(contentPane, label, 25,64,73,18); addComponent(contentPane, t1, 26,20,25,24); addComponent(contentPane, t2, 58,20,25,24); addComponent(contentPane, t3, 90,20,25,24); addComponent(contentPane, t4, 122,20,25,24); addComponent(contentPane, t5, 152,20,25,24); addComponent(contentPane, t6, 182,20,25,24); addComponent(contentPane, t7, 211,20,25,24); addComponent(contentPane, t8, 242,20,25,24); addComponent(contentPane, t9, 273,20,25,24); addComponent(contentPane, t10, 305,20,25,24); addComponent(contentPane, inputwords, 120,60,200,22); addComponent(contentPane, jScrollPane1,15, 150, 340,

  300); addComponent(contentPane, buttonsearch, 50, 100, 100, 28); addComponent(contentPane, buttonclear, 200, 100, 100, 28);

  // // ScrabbleCheatGui // this.setTitle("Scrabble Cheat - by Sisca"); this.setLocation(new Point(167, 53)); this.setSize(new Dimension(380, 500));

  } private void addComponent(Container container,Component c,int x,int y,int width,int height)

  { c.setBounds(x,y,width,height); container.add(c);

  Perpustakaan Unika

  private void buttonsearch_actionPerformed(ActionEvent e) { int i, noisi;

  String kata, temp; ArrayList kotakkecil = new ArrayList(); kata = inputwords.getText(); kotakkecil.add(0,t1.getText()); kotakkecil.add(1,t2.getText()); kotakkecil.add(2,t3.getText()); kotakkecil.add(3,t4.getText()); kotakkecil.add(4,t5.getText()); kotakkecil.add(5,t6.getText()); kotakkecil.add(6,t7.getText()); kotakkecil.add(7,t8.getText()); kotakkecil.add(8,t9.getText()); kotakkecil.add(9,t10.getText()); noisi = -1; for(i=0;i<kotakkecil.size();i++){ temp = (String) kotakkecil.get(i); if(!temp.equals("")){ kata = kata + temp; if(noisi == -1) noisi = i;

  } } if(kata.length() > noisi) { scrabble.PermutationKata(kata,kotakkecil,noisi); }else { searchresult.setText("Error : jumlah input words lebih kecil dibandingkan posisi huruf yang dipasang.");

  } } private void buttonclear_actionPerformed(ActionEvent e) { t1.setText(""); t2.setText(""); t3.setText(""); t4.setText(""); t5.setText(""); t6.setText(""); t7.setText(""); t8.setText(""); t9.setText(""); t10.setText(""); inputwords.setText(""); searchresult.setText("");

  }

  Perpustakaan Unika

  { int i,resultlength; String kata; resultlength = result.size(); kata = ""; if(resultlength == 0){ kata = "Result not found.";

  } for(i=0;i<resultlength;i++) { kata = kata + (String) result.get(i)+ "\n"; } searchresult.setText(kata);

  } }