Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: LeetSpeekDenied

Turatzuro [28.03.2008 22:39:18]

#

Onko kaverisi liian l33t? Haluatko kenties itse olla l33t315tä l33t31n ? Hanki nyt LeetSpeekDenied -- ilman sitä 3t v01 3lää!

Tjooh, /mainonta. Eli tällainen hassuhko softa jolla voi kääntää "leettiä" normaalien ihmisten luettavaan muotoon. Ohjelma voi myös tuottaa HC-tason l33tt1ä irkkikavereidesi .. eh, iloksi.

Ohjelma käyttää tekstitiedostoa, jossa on listattuna kaikki merkkikorvaavuudet. Lisäksi pari luokkaa joissa eroteltuna GUI ja muu roska.

Aijjoo, tuo listatiedosto on tosiaan sitten unicodea, joten jouduin hieman täällä näkyvää listaa karsimaan.

Leet2Readable.java

import java.util.*;
import java.io.*;

/**
 * <p>Title: Leet2Readable</p>
 * <p>Description: Konvertoi L33441ä</p>
 * @author Tuomas Virtanen
 * @version 1.0
 */
public class Leet2Readable {
    private ArrayList <String>vals = new ArrayList<String>();
    private ArrayList <String>keys = new ArrayList<String>();
    private String listFile = "list.txt";

    public Leet2Readable() {
        readFileToMem();
    }

    private void readFileToMem() {
        try {
            // näistä kahdesta valitaan tapa tiedoston lukemiseen
            // Alempi on tarkoitettu tiedoston lukemiseen .jar-containerista
            // Ylempi suoraan tietystä hakemistosta
            //InputStream is = new FileInputStream(new File(listFile));
            InputStream is = Leet2Readable.class.getResourceAsStream(listFile);

            // Luetaan tiedosto talteen. Avaimet toiseen ja arvot toiseen listaan
            // Olisi tämän voinut paremminkin toteuttaa, esim. hashtablella tms.
            // Eipä vaan väsyneenä tullut ajateltua. Ainakin on helppo käyttää.
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"unicode"));
            String line;
            int pos = 0;
            while ((line = reader.readLine()) != null) {
                String[] arr = line.split("\t");
                if(arr.length > 1 && arr[0] != null && arr[1] != null) {
                    vals.add(pos,arr[1]);
                    keys.add(pos,arr[0]);
                    pos++;
                }
            }
        } catch (FileNotFoundException ex) {
        } catch (IOException ex) {}
    }

    private String convert(String text, boolean s) {
        StringBuffer sb = new StringBuffer();
        int charpoint = 0; // Ilmoittaa tarkasteltavan kohdan
        text = text.toUpperCase();
        boolean found = false;

        // Aletaan käymään tekstiä läpi niin kauan kuin juttua riittää
        while(charpoint < text.length()) {
            found = false;

            // Katsotaan löytyykö kohdasta charpoint korvattavaa merkkijonoa
            for(int k = 0; k < vals.size(); k++) {
                // Valitaan halutaanko leet->norm vai norm->leet
                String key = (s) ? vals.get(k) : keys.get(k);
                String val = (s) ? keys.get(k) : vals.get(k);
                int len = key.length();

                // Jos löydettiin korvattava merkki, niin laitetaan korvaavuus uuteen merkkijonoon
                // Liikutetaan samalla charpoint-muuttujaa eteenpäin korvattavan tekstin verran
                if(text.length() > charpoint+len && text.substring(charpoint,charpoint+len).equals(key)) {
                    sb.append(val);
                    charpoint += len;
                    found = true;
                    break;
                }
            }
            // Jos ei löydetty korvaavuutta, niin heitetään vain tarkasteltu merkki
            // palautettavaan merkkijonoon ja liikutaan eteenpäin
            if(!found && text.length() > charpoint) {
                sb.append(text.charAt(charpoint));
                charpoint++;
            }
        }
        // Sitten vaan haetaan merkkijono stringbufferista ja palautellaan se
        return sb.toString();
    }

    public String norm2leet(String text) {
        return convert(text, true);
    }

    public String leet2norm(String text) {
        return convert(text, false);
    }
}

MainLuokka.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 * <p>Title: MainLuokka</p>
 * <p>Description: GUI</p>
 * @author Tuomas Virtanen
 * @version 1.0
 */
public class MainLuokka extends JFrame {
    private JTextField kaannettava;
    private JTextField valmis;
    private JButton nappialas;
    private JButton nappiylos;
    private Leet2Readable converter;

    public static void main(String[] args) {
        // Asetetaan tyyliksi käyttiksen natiivi
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception ex) {
        }

    // Luodaan oliot ja ikkuna
        Leet2Readable lr = new Leet2Readable();
        MainLuokka m = new MainLuokka();
        m.makeGui();
    }

    public void makeGui() {
        // Luodaan komponentit
        converter = new Leet2Readable();
        JPanel p = new JPanel();
        GridLayout lay = new GridLayout(3,2,2,2);
        p.setLayout(lay);
        nappiylos = new JButton("leet2norm");
        nappialas = new JButton("norm2leet");
        kaannettava = new JTextField(25);
        valmis = new JTextField(25);

        // Lisätään komponentit paneeliin
        p.add(new JLabel("Käännettävä teksti"));
        p.add(kaannettava);
        p.add(nappialas);
        p.add(nappiylos);
        p.add(new JLabel("Käännetty teksti:"));
        p.add(valmis);

        // Kiinnitetään paneeli frameen
        getContentPane().add(p);

        // Asetetaan ikkunan nimi, koko, jne
        // Lopuksi julistetaan näkyväksi
        setTitle("LeetSpeakDenied");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);
        setSize(400,96);
        setVisible(true);

        // Asetetaan tuloskentän teksti
        // Eli luetaan syötekenttä -> konvertoidaan -> heitetään tuloskenttään
        nappiylos.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                valmis.setText(converter.leet2norm(kaannettava.getText()));
            }
        });
        nappialas.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              valmis.setText(converter.norm2leet(kaannettava.getText()));
          }
      });

    }
}

list.txt

|\/|	M
|/\|	w
\/\/	W
|-|	H
]-[	H
)-(	H
I-I	H
]-|	H
|-[	H
|\|	N
|_|	U
|V|	M
/.\	A
/-\	A
\/	V
/\	A
|\	A
><	X
|<	K
|_	L
][	I
|)	D
()	O
|2	R
\2	R
|3	B
þ	th
|	I
1	l
0	O
+	T
3	E
4	A
5	S
6	G
7	T
0	O

moptim [14.04.2008 20:29:59]

#

Kauheen lamet noi leettikielen merkit :(

Turatzuro [19.04.2008 14:13:07]

#

Onneksi merkkitiedostoa voi itse muuttaa paremmaksi :)

FooBat [24.04.2008 02:30:43]

#

()nn3k51 f1r3f0x11n 0n |337k3y-3x73n510n n11n 31 pää53 3|1737 hypp1mään 51|m1||3.

muhis91 [07.05.2008 18:45:10]

#

Mahti javaa uskomatoman taitavaa varsinkin tuo jar juttu

Pollapoju [18.05.2008 16:11:14]

#

äl on 1 koska 1337 leet ii on ii

woodoo [03.06.2008 02:24:31]

#

Hah! Joku kerkesi ennen minua tekemään tällaisen leetspeak kääntäjän. :D

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta