Pada tutorial ini, saya akan mencoba membahas salah satu soal pemrograman yang saya dapatkan ketika saya masih semester 3 dulu. Menurut saya soalnya cukup lumayan sulit jadi, bagi Anda yang belum paham benar tentang ilmu dasar pemrograman saran saya belajar dulu. Berikut ialah soalnya. Buat program yang...

Enkripsi Karakter - Soal Lomba Pemrograman

Pada tutorial ini, saya akan mencoba membahas salah satu soal pemrograman yang saya dapatkan ketika saya masih semester 3 dulu. Menurut saya soalnya cukup lumayan sulit jadi, bagi Anda yang belum paham benar tentang ilmu dasar pemrograman saran saya belajar dulu. Berikut ialah soalnya.

Buat program yang mengenkrip karakter berdasarkan tabel di bawah ini:

Dengan pengecualian substring yang diapit tanda (‘...’) tidak akan di enkrip. Input baris pertama berupa jumlah test case N, N baris berikutnya berupa sebaris string lower case. Output string hasil enkrip 1 baris tiap input. Dimana 1 < N < 100.

 

Okay, gimana sudah baca soalnya kan? Kira – kira Anda sudah bisa membayangkan bagaimana teknik untuk menyelesaikan soal di atas. Berikut ialah sampel input dan sampel outputnya.

Sampel Input:
1
this is (‘cool’)

Sampel output:
gsrh rh (‘cool’)

Diatas adalah sampel inputnya, dimana pada baris pertama ialah jumlah case / jumlah kasus yang ada dan di baris berikutnya ialah teks yang akan di enkrip.

 

Pembahasan

  • Pertama, Anda bisa membuat sebuah 2 buah array yang berisi huruf alphabet dari a..z dan z..a
  • Kedua, buatlah sebuah inputan menggunakan pustaka Scanner (Di sarankan menggunakan Scanner karena, lebih mudah dalam proses pembacaannya jika inputan tidak mengandung case string).
  • Ketiga, lakukan perulangan sebanyak jumlah case yang ada untuk melakukan inputan teks yang akan di enkrip.
  • Keempat, buatlah sebuah perulangan dimana, perulangan ini akan membaca setiap karakter yang ada pada teks dan kemudian akan mengenkripnya yang akan di simpan di variabel baru(Buat variabel baru sebagai tempat menyimpan hasil enkrip).
  • Kelima, dalam proses pembacaan karakter tadi(langkah sebelumnya) buat sebuah pengkondisian jika karakter itu mengandung “ ( “ dan “ ‘ “ maka, karakter yang didalamnya akan di loss kan atau dilewatkan begitu saja karena tidak akan di enkrip.

Sebelum Anda mengerjakan soal diatas, mari kita coba buat program sederhananya saja terlebih dahulu. Dimana, program ini akan menampilkan huruf alphabet dari a sampai z dan z sampai a. Berikut source codenya.

import java.util.Arrays;

/**
 * 
 * @author Yudi Setiawan
 * 
 * Alphabet
 *
 */

public class Alphabet
{
	public static void main(String[] args)
	{
		String[] az = {"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"};
		String[] za = new String[az.length];
		
		//	Mengisi nilai za
		int index = az.length-1;
		for(int i = 0; i < za.length; i++)
		{
			za[index] = az[i];
			index--;
		}
		
		//	Menampilkan nilai az dan za
		System.out.println("A sampai Z : "+Arrays.toString(az));
		System.out.println("Z sampai A : "+Arrays.toString(za));
	}
}

 

 

Dan berikut ialah program percobaan sederhana untuk enkripsi karakter yang di inputkan oleh user.

import java.util.Scanner;

/**
 * 
 * @author Yudi Setiawan
 * 
 * Percobaan Enkripsi
 *
 */

public class PercobaanEnkripsi
{
	public static void main(String[] args)
	{
		//	Objek Scanner;
		Scanner scan = new Scanner(System.in);
		
		//	Arrays
		String[] az = {"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"};
		String[] za = new String[az.length];
		
		//	Mengisi nilai dari z..a
		int index = za.length-1;
		for(int i = 0; i < za.length; i++)
		{
			za[i] = az[index];
			index--;
		}
		
		//	Input sebuah kata atau kalimat dan tekan ENTER untuk mengakhiri
		System.out.println("Masukkan sebuah Kata atau Kalimat:");
		String input = scan.nextLine();
		
		//	Proses Enkripsi
		String enkrip = "";
		for(int a = 0; a < input.length(); a++)
		{
			String baca = String.valueOf(input.charAt(a));
			if(baca.equals(" "))
			{
				enkrip += " ";
					continue;
			}
			
			for(int b = 0; b < za.length; b++)
			{
				if(baca.equals(az[b]))
					enkrip += za[b];

			}
		}
		
		//	Menampilkan hasil Enkripsi
		System.out.println("Hasil Enkrip : "+enkrip);
	}
}

 

 

Dan berikut ialah source code program Enkrip untuk soal diatas.

import java.util.Scanner;

/**
 * 
 * @author Yudi Setiawan
 * 
 * Enkrip
 *
 */

public class Enkrip
{
	public static void main(String[] arguments)
	{
		//	Objek Scanner
		Scanner scan = new Scanner(System.in);
		
		//	Array
		String[] az = {"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"};
		String[] za = new String[az.length];
		
		//	Mengisi nilai za
		int index = az.length-1;
		for(int i = 0; i < za.length; i++)
		{
			za[i] = az[index];
			index--;
		}
		
		//	Input jumlah case
		int jlh_case = scan.nextInt();
		
		//	Input kata atau kalimat sesuai dengan jumlah case yang di inputkan
		String[] input = new String[jlh_case];
		for(int a = 0; a < jlh_case; a++)
		{
			input[a] = scan.nextLine();
			
			//	Untuk menghindari Null Pointer Exception
			if(input[a].isEmpty())
				input[a] = scan.nextLine();
		}
		
		//	Proses Enkripsi
		String[] output = new String[jlh_case];
		for(int a = 0; a < jlh_case; a++)
		{
			//	Deklarasi awal output
			output[a] = "";
			
			//	Proses pembacaan tiap karakter pada kata atau kalimat
			for(int b = 0; b < input[a].length(); b++)
			{
				String baca = String.valueOf(input[a].charAt(b));
				if(baca.equals(" "))
					output[a] += " ";
				
				else if(baca.equals("("))
				{
					for(int c = b; c < input[a].length(); c++)
					{
						String baca2 = String.valueOf(input[a].charAt(c));
						if(baca2.equals(")"))
						{
							output[a] += ")";
							b = input[a].indexOf(")");
								break;
						}
						output[a] += baca2;
					}	
				}
				
				else
				{
					for(int c = 0; c < az.length; c++)
					{
						if(baca.equalsIgnoreCase(az[c]))
						{
							output[a] += za[c];
								break;
						}
					}
				}
			}
		}
		
		//	Tampilkan Output
		for(int a = 0; a < jlh_case; a++)
			System.out.println(output[a]);
		
		
	}
}

 


About Author

Yudi Setiawan


Comment & Discussions

    Please LOGIN before if you want to give the comment.