Pages

Tampilkan postingan dengan label iseng. Tampilkan semua postingan
Tampilkan postingan dengan label iseng. Tampilkan semua postingan

Minggu, 31 Maret 2013

Angka Romawi

kemarin pernah ada temen yang nanya-nanya tentang gimana cara mengkonversi angka romawi ke dalam angka arab (angka latin) yang biasa kita gunakan. sebetulnya teorinya mudah, cuman ternyata menerapkannya susah juga :D
aturan penulisan romawi pada dasarnya seperti ini :
1. tidak mungkin lebih dari 4 angka sama yang berjajar, maksimal 3 seperti iii, xxx, mmm
2. memiliki urutan sebagai berikut i,v,x,l,c,d,m
3. terdapat aturan pengurangan hanya dengan angka dengan urutan +1 dan +2, misal i dan v, jika digabung iv hasilnya 5-1=4, begitu juga dengan ix, tetapi tidak ada il, ic dst
4. aturan diatas tidak berlaku untuk angka yang bila dikonversi, memiliki kepala 5, misal v=5, l=50 dan d=500, mungkin emang krn menunjukkan nilai 1/2 (nebak aja :D)
5. 1990=mcmxc dan bukan mdcdxc yang berarti prioritas penulisan adalah nilai 5+3 dan bukan 5+4, mudahnya jika kita ingin menuliskan 19 maka bukan dengan 10+5+4 tetapi 10+10-1, tetapi jika kita ingin menuliskan 18 maka 10+5+3. (maaf gak tau cara njelasinnya, pokoke gitu deh :D)

kodingan java ini masih memiliki kekurangan yaitu belum memiliki method validasi apakah penulisannya benar, jadi tidak bisa mendeteksi xix dengan xviv yang sama-sama 19.
sudah aku coba beberapa nilai romawi dan udah benar, gak tau ntar teman2 menemukan bug hasil yang tidak sesuai :D

oke ini kodingan javanya +++++++++++++++++++++++++++

public class Romawi {  
    String [] order = {"I","V","X","L","C","D","M"};
    String [] rom;
    int [] nilai; //attribut ini tidak dipakai
    int sum = 0;
    public Romawi(){
        nilai = new int[7];
        for(int i=0; i<7;i++){
            nilai[i]=0;
        }
    }
    public int romawiValue(String x){
        int len = x.length();
        if(len==1){
            return getValue(x);
        }else{
            return getValue(x,len);
        }
        //return 0;
    }
    /*
     * mendapatka nilai satu digit
     */
    private int getValue(String rom){
        String x = rom.toUpperCase();
        if(x.equalsIgnoreCase("I")){
            return 1;
        }else if(x.equalsIgnoreCase("V")){
            return 5;
        }else if(x.equalsIgnoreCase("X")){
            return 10;
        }else if(x.equalsIgnoreCase("L")){
            return 50;
        }else if(x.equalsIgnoreCase("C")){
            return 100;
        }else if(x.equalsIgnoreCase("D")){
            return 500;
        }else if(x.equalsIgnoreCase("M")){
            return 1000;
        }
        return 0;
    }
    /*
     * mendapatkan nilai > 1 digit
     */
    private int getValue(String rom, int length){
        if(length==2){
            if(cekOrder(rom)){
                return getValue(rom.substring(1, 2))-getValue(rom.substring(0, 1));
            }else{
               return getValue(rom.substring(1, 2))+getValue(rom.substring(0, 1));
            }
        }else{
            if(this.romValidate(rom)){
                return this.sum;
            }
        }
        return 0;
    }
    /*
     * hanya berlaku untuk 2 digit angka romawi
     */
    private boolean cekOrder(String rom){
        int len = this.order.length;
        for(int i=0; i<len-2; i++){
            if(rom.substring(0, 1).equalsIgnoreCase(this.order[i]) && rom.substring(1, 2).equalsIgnoreCase(this.order[i+1])){               
                return true;              
            }else if(rom.substring(0, 1).equalsIgnoreCase(this.order[i]) && rom.substring(1, 2).equalsIgnoreCase(this.order[i+2])){
                return true;
            }
        }
        return false;
    }
    private boolean cekOrder(int start){
        int len = this.order.length;           
        for(int i=0; i<len-2; i++){
            if(start<this.rom.length-2){               
                    if(this.rom[start].equalsIgnoreCase(this.order[i]) && this.rom[start+1].equalsIgnoreCase(this.order[i+1])){                       
                        return true;            
                    }else if(this.rom[start].equalsIgnoreCase(this.order[i]) && this.rom[start+1].equalsIgnoreCase(this.order[i+2])){                       
                        return true;
                    }
            }else if(start==this.rom.length-2){
                    if(this.rom[start].equalsIgnoreCase(this.order[i]) && this.rom[start+1].equalsIgnoreCase(this.order[i+1])){                       
                        return true;            
                    }else if(this.rom[start].equalsIgnoreCase(this.order[i]) && this.rom[start+1].equalsIgnoreCase(this.order[i+2])){                       
                        return true;
                    }
            }
        }
        return false;
    }
    private void splitToArray(String rom){
        char[] romchar = rom.toCharArray();
        int jml = romchar.length;
        this.rom = new String[jml];
        for(int i=0;i<jml;i++){
            this.rom[i] = ""+romchar[i];           
        }
    }
    /*
     * 1.validasi apakah huruf romawi benar huruf2nya
     * 2.validasi apakah huruf romawi benar urutannya.
     */
    public boolean romValidate(String rom){
        //pecah dulu menjadi array, biar mudah ngolahnya
        this.splitToArray(rom);
        int jml = this.rom.length;      
        //cek apakah huruf romawi benar per hurufnya
        for(int i=0;i<jml;i++){
            for(int j=0;j<this.order.length;j++){
                if(this.rom[i].equalsIgnoreCase(this.order[j].trim())) {
                    break;
                }
                if(j==this.order.length-1 && !this.rom[i].equalsIgnoreCase(this.order[j].trim())){
                    return false;
                }
            }
        }
        int len = this.order.length;      
        this.sumRom(this.rom, 0, jml);  
        return true;
    }
    public void sumRom(String[] rom, int start, int len){       
        if(start < len-2){          
            if(rom[start].equalsIgnoreCase(rom[start+1]) && rom[start+1].equalsIgnoreCase(rom[start+2])){               
                this.sum += (this.getValue(rom[start])+this.getValue(rom[start+1])+this.getValue(rom[start+2]));
                this.sumRom(rom, start+3, len);             
            }else if(rom[start].equalsIgnoreCase(rom[start+1]) && !rom[start+1].equalsIgnoreCase(rom[start+2])){             
                this.sum += (this.getValue(rom[start])+this.getValue(rom[start+1]));
                this.sumRom(rom, start+2, len);             
            }else if(!rom[start].equalsIgnoreCase(rom[start+1])){
                if(this.cekOrder(start)){                  
                    this.sum += (this.getValue(rom[start+1])-this.getValue(rom[start]));
                    this.sumRom(rom, start+2, len);                 
                }else{                 
                    this.sum += this.getValue(rom[start]);                  
                    this.sumRom(rom, start+1, len);
                }
            }
        }else if(start == len-2){
            if(this.cekOrder(start)){                  
                    this.sum += (this.getValue(rom[start+1])-this.getValue(rom[start]));                   
                }else{                  
                    this.sum += this.getValue(rom[start])+ this.getValue(rom[start+1]);                   
            }
        }
    }
    public static void main(String[] args) {
        // TODO code application logic here      
        Romawi rom = new Romawi();
        String x = "mmmcdxlix";
        System.out.println(x);
        System.out.println(rom.romawiValue(x));       
    }
}

contoh hasilnya :
mmmcdxlix
3449
BUILD SUCCESSFUL (total time: 0 seconds)

mcmxcix
1999
BUILD SUCCESSFUL (total time: 0 seconds)

Jumat, 01 Maret 2013

Russian Roullette ... entah apa namanya

berhubung kemarin sempat iseng-iseng ngobrol sama teman. dapat deh istilah ini, iseng-iseng lagi bikin kodingannya. semoga algo-nya bener
Kelas 

public class Chamber {
    
    private int id;
    private boolean bullet;
    
    public Chamber(){
        this.id=0;
        this.bullet = false;
    }
    
    public Chamber(int id, boolean bullet){
        this.id = id;
        this.bullet = bullet;        
    }
    
    public void setId(int id){
        this.id = id;
    }
    
    public void setBullet(boolean bullet){
        this.bullet = bullet;
    }
    
    public int getId(){
        return this.id;
    }
    
    public boolean getBullet(){
        return this.bullet;
    }    
    
    
} 



yang bawah ni, kelas utamanya :
import java.util.Random;
import java.util.Scanner;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author aisyah
 */
public class Pistol {
    
    private Chamber[] roller;
    public final int numHole = 7;
    //private int startPoint;
    private Chamber currentChamber;
    private Random random = new Random();
    public String[] player;
    public int numPlayer;
    
    
    
    public Pistol(int player){
        this.numPlayer = player;
        this.roller = new Chamber[this.numHole-1];        
        this.player = new String[player];
        for(int i=0;i<this.numHole-1;i++){
            this.roller[i] = new Chamber();
            this.roller[i].setId(i);
            this.roller[i].setBullet(false);
        }
        this.currentChamber = this.roller[0];
    }
    
    public void setPlayer(int player, String name){
        if(player<this.numPlayer-1 && player>-1){
            this.player[player] = name;
            //System.out.println(this.player[player]);
        }else{
            System.out.println("nomor pemain tidak sesuai jumlah pemain");
        }
        
    }
    
    public void fillBullet(int chamber){
        if(chamber>this.numHole-1){
            System.out.println("chamber hanya enam buah");            
        }else{
            this.roller[chamber].setBullet(true);
        }
        
    }
    
    /*
     * memutar roller
     */
    public boolean spinRevolver(){
        int current = this.randNum(this.numHole);        
        while(true){
            current = (current == 0) ? this.randNum(this.numHole) : current;
            if(current>0){
                this.setCurrentChamber(current);
                return true;
            }
        }  
    }
    
    public void initChamber(int i){
            this.roller[i] = new Chamber(i,false);
            //this.roller[i].setId(i);
            //this.roller[i].setBullet(false);
       
    }
    
    /*
     * memicu pemantik
     */
    public void strikeFire(int player){
        //this.spinRevolver();
        int current = this.currentChamber.getId();
        this.currentChamber = (current==5)?this.roller[0]:this.roller[current+1];
        if(this.currentChamber.getBullet()==true){
            System.out.println("BAM!! player : "+this.player[player]+ " die!");
            System.out.println("Permainan selesai!");
            System.exit(0);
        }else{
            System.out.println("klik!! you are still safe!");
        }
        
    }
    
    /*
     * random number, untuk memutar roller
     * @param titik mulai, 
     * @param nomor lubang di roller
     */
    private int randNum(int numChamber){
        
        return this.random.nextInt(numChamber);
    }
    
    /*
     * titik mulai pada hole yg selaras dengan pemantik.
     * default titik 0. setelah berputar akan berubah
     */
    private Chamber getCurrentChamber(){
        
        return this.currentChamber;
    }
    
    /*titik mulai
     * set titik mulai
     */
    private void setCurrentChamber(int current){
        for(int i=0; i<this.roller.length; i++){
          int j = i+1;
          if((j == current)) this.currentChamber = this.roller[i];
        }
        
        
    }
    
    public static void main(String[] args){
        
        int player = 6;
        Pistol pispot = new Pistol(player);
        /*for(int b=0;b<6;b++){
            //System.out.println(b);
            pispot.initChamber(b);
        }*/
        Scanner scanner = new Scanner(System.in);
        //======= isi peluru di chamber
        System.out.println("Isi peluru dulu !");
        int bull = scanner.nextInt();
        pispot.fillBullet(bull);
        //======= set pemain
        System.out.println("\nSet nama pemain dulu !");
        
        for(int c=0; c<player;c++){
            //System.out.println(c);
            String pemain = scanner.next();
            pispot.setPlayer(c, pemain);
        }
        
        //======= permainan dimulai
        int i = 0;
        while(i < player ){
            System.out.println("\nPilihan :"+i);
            System.out.println("1. puter revolver");
            System.out.println("2. tarik pemicu");
            System.out.println("Giliran pemain ke-"+(i+1)+" : "+pispot.player[i]);
            int pilihan = scanner.nextInt();
            
            switch(pilihan){
                case 1:
                    pispot.spinRevolver();
                    break;
                case 2:
                    pispot.strikeFire(i);
                    i++;
                    break;
                default:
                    System.out.println("pilihan tidak ada\n\n");
                    break;
            }
            
            
            if(i==player){
                i=0;
            }
        }
    }
    
}

klo tampilannya masih gini :
Pilihan :2
1. puter revolver
2. tarik pemicu
Giliran pemain ke-3 : d
2
BAM!! player : d die!
Permainan selesai!

Jumat, 17 Februari 2012

Setting Modem AC682 Ubuntu

bagi yang berlangganan smartfren memakai modem AC682 mungkin pernah mengalami masalah seperti yang saya alami. kesulitan melakukan konfigurasi di linux, khususnya keluarga ubuntu dan turunannya. permasalahannya tidak adanya driver yang langsung mengenali perangkat tersebut. sehingga kita tidak bisa menambahkan koneksi internet melalui software network connection yang ada di ubuntu.

salah satu solusinya adalah menggunakan ppp configuration, kemudian melakukan pengaturan usb melalui perintah modprobe, setelah itu dengan menjalankan file hasil konfigurasi sebelumnya. cek link di bawah ini :

setting modem smartfren AC682

Selasa, 28 Desember 2010

Segitiga Sierpinski

gb. fraktal mandelbrot

Fraktal merupakan benda geometris yang kasar pada segala skala, dan terlihat dapat "dibagi-bagi" dengan cara yang radikal. beberapa fraktal bisa dipecah menjadi beberapa bagian dimana bagian tersebut mirip dengan fraktal aslinya. Fraktal memiliki detil tak hingga dan memiliki struktur yang sama ketika kita melihatnya dengan perbesaran yang berbeda. sebagian besaar kasus pembuatan fraktal, gambar geometris ini dibuat melalui pola penggambaran secara berulang dengan aturan tertentu, perulangan seperti ini lebih dikenal sebagai proses rekursif atau iterasi.

Istilah fraktal pertama kali diperkenalkan oleh  Benoît Mandelbrot pada tahun 1975 dari kata Latin fractus yang artinya "patah", "rusak", atau "tidak teratur", walaupun begitu fraktal telah dipelajari jauh sebelum itu.

Kelas Main (MERGESORT)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mergesort;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

/**
 *
 * @author aisyah
 */
public class Main {

    public static void main(String[] args) {
        MergeSort sorting = new MergeSort();
        int x = 0;

        Scanner pilihan = new Scanner(System.in);
        Scanner direktori = new Scanner(System.in);
        Scanner tampil = new Scanner(System.in);
        Scanner tampil2 = new Scanner(System.in);
        String dir = null;

Kelas MergeSort

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mergesort;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.StringTokenizer;
//import java.io.InputStreamReader;

/**
 *
 * @author bapake-aisyah
 */
public class MergeSort {

    String[][] nama = new String[220][3];
    String temp[];
    private Scanner z;

    public MergeSort() {
    }

    public void setNama(String[] nama) {

    }

Contoh Penyelesaian Kasus Merge Sort dengan Java

Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945. (id.wikipedia.org)

Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide and conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian kemudian menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok.

Selasa, 21 Desember 2010

MENARA HANOI

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MenaraHanoi;

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author bapake-aisyah
 */
public class MenaraHanoi {

    private int cakram;
    private String n = "";

    public MenaraHanoi(int cakram) {
        this.setCakram(cakram);
    }

    private MenaraHanoi() {
    }

    public void setCakram(int cakram) {
        this.cakram = cakram;
    }

    public int getCakram() {
        return cakram;
    }

Minggu, 12 Desember 2010

Contoh Kelas Penambahan dan Pengurangan Digit Banyak upto 2000 digit (bag 2)

Kelas Pengurangan dan Tampilan



script java kelas pengurangan :


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */Terbitkan Entri
package BigHitung;

/**
 *
 * @author bapake-aisyah
 */
public class BigKurang {

    String aPertama;
    String aKedua;

    public void setPertama(String a) {
        this.aPertama = a;
    }

    public void setKedua(String a) {
        this.aKedua = a;
    }

    public String getPertama() {
        return this.aPertama;
    }

    public String getKedua() {
        return this.aKedua;
    }

Contoh Kelas Penambahan dan Pengurangan Digit Banyak upto 2000 digit (bag 1)

Kelas Penambahan.



Script java :


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BigHitung;

/**
 *
 * @author bapake-aisyah
 * alhamdulillah dapat inspirasi dari BigAdder praktikum II
 */
public class BigJumlah {

    String aPertama;
    String aKedua;

    public void setPertama(String a) {
        this.aPertama = a;
    }

    public void setKedua(String a) {
        this.aKedua = a;
    }

    public String getPertama() {
        return this.aPertama;
    }

Rabu, 08 Desember 2010

SPIRAL NUMBER 3-10, dari array [0][n-1]

spiral number, angka muter-muter mbulet mbulet, kayak ular lagi mlungker, dari sisi bawah kiri ke arah bawah kanan dan seterusnya muter sampai tengah, untuk dimensi 3 x 3 sampai 10 x 10, begini hasilnya :

untuk dimensi 5 x 5

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SpiralenNumber;

import javax.swing.JOptionPane;

/**
 *
 * @author bapake-aisyah
 */
public class SpiralNumber {

    public static void main(String[] args) {

        String n = "";

        try {
            String input = JOptionPane.showInputDialog("mang lebetaken sembarang ongko, kangge sisi "
                    + "angka muter-muter :)" + "\n" + "ongko kedah langkung kaleh sakngandape sewelas");
            int a = Integer.parseInt(input);
            int kubusAngka[][] = new int[a][a];
            int batas = a * a;
            int sisi = a, x = sisi - 1, y = 0, nilai = 1;
            while (nilai <= batas) {
                if (a > 2 && a < 11) {
                    for (int j = 0; j < sisi; j++) {
                        kubusAngka[x][y++] = nilai++;
                    }

                    x--;
                    y--;

KONVERSI ANGKA - HURUF SAMPE 999

silaken dikopi untuk kepentingan pendidikan... :) (english version)

tampilannya kayak gini :
kosongan...

misal diisi angka 234

hasilnya...
maaf klo dalam bahasa jawa, iseng aja...yg ndak tau, tombol "ngganti" itu terjemahannya "merubah", tombol "metu" artinya "keluar".

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SpiralenNumber;

//import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author bapake-aisyah
 */
public class KonversiAngka extends JFrame implements ActionListener {
    //private static ActionListener eventclick;

    private String hasilKonv;

    public String convert1Digit(int x) {

        String array[] = {"zero", "one", "two", "three", "four", "five", "six",
        "Seven", "eight", "nine"};

        return array[x];
        /*switch (x) {
            case 0:
                return "zero";
            case 1:
                return "one";
            case 2:
                return "two";
            case 3:
                return "three";
            case 4:
                return "four";
            case 5:
                return "five";
            case 6:
                return "six";
            case 7:
                return "seven";
            case 8:
                return "eight";
            case 9:
                return "nine";
            default:
                return "";
        } */
    }

Minggu, 21 November 2010

my own binary search

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package binarysearch;


//import java.util.Scanner;
import javax.swing.JOptionPane;


/**
 *
 * @author mashtree
 */
public class BinarySearch {


    static int[] f = {23, 32, 34, 37, 42, 45, 67, 74, 78, 86, 89, 90, 92, 94, 96, 97, 101, 103, 199};
    //public int v = 32;


    static void cari(int v) {
        int atas = (f.length + 1);
        int bawah = 1;
        boolean ketemu = false;


        for (int i = atas; i >= bawah; i--) {
            int tengah = (atas + bawah) / 2;
            if (v == f[tengah]) {
                //System.out.println("data " + v + " ada diurutan ke-" + (tengah + 1));
                JOptionPane.showMessageDialog(null, "data " + v + " ada diurutan ke-" + (tengah + 1));
                ketemu = true;
                break;
                //} else if (v != f[tengah]) {
                //JOptionPane.showMessageDialog(null, "data tidak ditemukan");
                // break;
            } else if (v < f[tengah]) {
                atas = tengah - 1;
            } else if (v > f[tengah]) {
                bawah = tengah + 1;
            }
        }


        if (ketemu == false) {
            JOptionPane.showMessageDialog(null, "data tidak ditemukan");
        }


        // JOptionPane.showMessageDialog(null, "data tidak ditemukan");
        //System.out.println("data tidak ditemukan");
    }


    public static void main(String[] args) {
        String input = JOptionPane.showInputDialog("masukkan nilai yang akan dicari!");
        int x = Integer.parseInt(input);
        cari(x);
    }
}