Pernah denger yang namanya Jolly Jumper?
Kayaknya emang gak ada hubungannya sama progamming, lha wong pas nyari referensi aja sampe nyasar ke web yang isinya all ’bout popok bayi segala.
Kebetulan minggu ini afwan dapet tugas bikin program buat solving Jolly Jumper problem. Nah, alhamdulillah dapet algoritma maknyuss dari programmer Cina (gak tau sapa namanya), pokok e matursuwun mas .. Chiang kai sek .. mao tse tung ling guan ning pit 😀
Ceritanya gini :
ada input suatu baris bilangan berjumlah n, dengan syarat bilangan pertama merupakan jumlah dari seluruh bilangan dikurangi 1 (n-1)
Terus tugas kita ngecek apakah angka-angka setelah angka pertama mempunyai beda berurutan?
Misalnya ada conto niy:
4 1 4 2 3 adalah Jolly Jumper, karena jumlah n-1 = 4 (angka pertama) dan beda angka kedua dst berurutan, yaitu 3, 2 dan 1 (tapi gak harus 3, 2, 1 kok …2, 1, 3 juga gakpapa .. 1, 2, 3 apalagi)
Gitu doang kok simple banget (ciee). Nah terus gimana penyelesaiannya?
Gini algoritmanya:
a. Like the other -> baca inputan
b. Baca karakter pertama .. lewat -> dianggep bener jare dosenne
c. Baca karakter kedua dan ketiga, cari selisihnya ..
d. Selisihnya ini dijadikan index array, beri nilai 1
e. Baca dua karakter selanjutnya, cari selisihnya lagi .. ulangi langkah (d) sampe input habis
f. looping array ..
g. bila nilainya 1 lanjutkan looping, beri nilai benar untuk booleannya.
h. bila nilainya bukan 1 break beri nilai salah untuk booleannya.. kukut
Kebetulan lagi niy program harus pake operasi file (mana udah lupa lagi sama Java .. buset dah) input kudu baca dari file, outputnya juga harus ditulis ke file
Wa kebanyakan teori .. ni implementasinya

/* Tugas 1 Desain dan Analisa Algoritma
* Afwan Badru Naim
* 5105100169
* */
import java.io.*;
import java.util.*;

public class JollyJumper
{
public static void main(String[] args)throws IOException, FileNotFoundException
{
/*buat baca file*/
FileReader inputFile = new FileReader(“Input.txt”);
BufferedReader bufferedReader = new BufferedReader(inputFile);

/*buat nulis file*/
FileWriter outputFile = new FileWriter(“Output.txt”);
PrintWriter printWriter = new PrintWriter(outputFile);

/*variabel*/
StringTokenizer stringTokenizer;
String inputLine = null,
result = “”;
Boolean isJolly = true;
int size,
a,
b,
beda;
inputLine = bufferedReader.readLine();

while(inputLine!=null)
{
stringTokenizer = new StringTokenizer(inputLine);

size = Integer.parseInt(stringTokenizer.nextToken()); /*dapatkan jumlah input*/
a = Integer.parseInt(stringTokenizer.nextToken()); /*dapatkan angka pertama*/

int difference[] = new int [3010];

/*cari beda tiap angka*/
for(int index=1;index<size;index++)
{
b = Integer.parseInt(stringTokenizer.nextToken()); /*dapatkan angka kedua*/
difference[Math.abs(a-b)] = 1; /*isi array dengan nilai 1*/
a = b; /*geser angka kedua menjadi angka pertama*/
}

/*cek apakah bedanya sequence*/
for(int check=1;check<size;check++)
{
if(difference[check] != 1) /*jika beda tidak sequence*/
{
isJolly = false; /*beri nilai false untuk boolean isJolly*/
break; /*hentikan pengecekan*/
}
else /*jika beda sequence*/
isJolly = true; /*lanjutkan pengecekan dan beri nilai true*/
}
if(isJolly == true)
result = “Jolly True”;
else
result = “Not Jolly”;

printWriter.println(result); /*tulis result ke file output*/
inputLine = bufferedReader.readLine(); /*baca baris selanjutnya*/
difference = null; /*bersihkan array*/
}
inputFile.close();
bufferedReader.close();
outputFile.close();
printWriter.close();

}
}

Berhubung ngumpulinnya besok, so gak ada waktu buat bikin error handling atau checking error atau apalah namanya pokoke biar gak error. Maka dari itu afwan mohon buat mas2, mbak2, adek2 bapak2 ibu2 buat ngoreksi kesalahannya. Hehehe

Advertisements