LINQPad In Action : Studi kasus Palindrome


PALINDROME ialah kata, frasa, atau kalimat yang jika dibaca dari depan atau belakang.
Misalnya:

  1. Lutfi –> bukan palindrom karena lutfi tidak sama jika dibaca dari belakang iftul
  2. onno –> merupakan palindrom karena dibaca dari depan atau belakang sama

Pertanyaannya, bagaimana cara mendeteksi apakah kata itu berupa palindrom atau bukan?

SOLUSI

[bahasa manusia] tinggal dibalik saja katanya, jika sama maka palindrom
[algoritma]

  • tentukan index min (0) dan max(panjang string dikurangi 1)
  • ulangi sampai minimum > maksimum
  •  – jika karakter dengan index min tidak sama dengan karakter index max maka bukan palindrom
  • – nilai min ditambah 1 dan max dikurangi 1
  • kata tersebut ada lah palindrom

[bahasa C#]

public static bool IsPalindrome(string value)
{
	int min = 0;
	int max = value.Length - 1;
	while (true)
	{
	    if (min > max)
	    {
		return true;
	    }
	    char a = value[min];
	    char b = value[max];
	    if (char.ToLower(a) != char.ToLower(b))
	    {
		return false;
	    }
	    min++;
	    max--;
	}
}

Mudah bukan? biar lebih seru pertanyaannya diganti. Misalnya ada suatu paragraf dan sebagai programmer anda ditugaskan untuk mencari kata-kata yang palindrom dengan ketentuan sebagai berikut:

  • tidak memperdulikan huruf kecil atau kapital, Onno
  • tanda baca di akhir kata dihiraukan, contoh: “Itu pak onno.”, “onno.” dibaca “onno” saja.
  • tanda petik (‘) ditengah karakter tetap dianggap menyatu dengan kata
  • tampilkan tiap palindrom dan berapa kali muncul

Contoh paragraf sebagai berikut:

“Otto wants to have a dog. He walks up the street and is about to step into the pets store when he sees a sign that reads ‘Step on no pets’ hanging on the door. Otto sees a lot of animals at the pets store. He sees the birds. He sees the squirrels. He sees the chameleons. He sees the dogs. “How much does the dog cost?” Otto says. “Ten dollars,” the man says. Otto gives the man ten dollars. Otto buys the dog. The dog walks home with Otto. Now Otto has a dog. “Thank God now I have a dog,” he says to himself.”

Bagaimana? lebih seru bukan? Kali ini saya akan menyelesaikan kasus tersebut dengan menggunakan LINQ di LINQPad.

var stringData = "Otto wants to have a dog. He walks up the street and is about to step into the pets store when he sees a sign that reads ‘Step on no pets’ hanging on the door. Otto sees a lot of animals at the pets store. He sees the birds. He sees the squirrels. He sees the chameleons. He sees the dogs. “How much does the dog cost?” Otto says. “Ten dollars,” the man says. Otto gives the man ten dollars. Otto buys the dog. The dog walks home with Otto. Now Otto has a dog. “Thank God now I have a dog,” he says to himself.";
//pisahkan kata dari paragraf dan ubah kedalam huruf kecil semua
var data = from word in stringData.ToLower().Split()
//filter karakter yang tidak perlu menggunakan REGEX
select Regex.Replace(word,@"([^a-zA-Z0-9 ])$", "", RegexOptions.IgnoreCase);
var result = from x in data where (x==(new String(x.Reverse().ToArray())))
group x by x into g
select new { Word = g.Key, Count = g.Count() };
result.Dump();

Outputnya seperti gambar dibawah ini, taraaa…:)

Hasil pencarian palindrom
Hasil pencarian palindrom

Semoga bermanfaat🙂

2 thoughts on “LINQPad In Action : Studi kasus Palindrome

  1. Halo. Saya tidak ngerti algoritma bahasa program. Cuma mau tanya: kalau digabung dengan database kamus (Indonesia) memungkinkan atau tidak ya? Maksudnya supaya bisa untuk merancang sebuah ‘kalimat palindrom’, misalnya. Terima kasih.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s