Membuat Anagram dengan C# .Net


Intermezzo

Anagram adalah salah satu jenis permainan kata, di mana huruf-huruf di kata awal biasa diacak untuk membentuk kata lain atau sebuah kalimat. Anagram sering dipakai sebagai kode. Permainan yang menggunakan anagram antara lain adalah Scrabble dan Boggle. Dalam kedua permainan ini, pemain berusaha membentuk kata-kata dari huruf yg disediakan.

Anagram sesungguhnya adalah semua kombinasi yang mungkin untuk suatu kata / kalimat.

Misalkan kita mencoba mendefinisikan secara manual suatu kalimat yang dispesifikasikan oleh user. Kita akan kesulitan jika suatu kata atau kalimat yang dispesifikasikan oleh user sangat panjang. Untuk itu, manusia membutuhkan komputer dengan aplikasi yang berguna untuk menyelesaikan masalah yang di hadapi.

Contoh kita pakai kata Susilo Bambang Yudoyono

  • YANG SUSUN BOM BALI YOHODO
  • OOO YHD YANG SUSUN BOM BALI
  • YAHUDI US NOLO YANG BOS BOM
  • SOAL BOM NY YAHUDI US BOONG
  • NU BOY SOAL YAHUDI SOMBONG
  • SOMBONG BOLONYA YAHUDI US
  • BUSH NYANYI LAGU MOSO BODO
  • DI US BUSH OBAMA YO NYOLONG
  • DONYO UOLING BY BUSH OSAMA
  • MOU SBY BUDIONO SAYANG LHO
  • SAMBUNG BUDIONO SYAH LOYO
  • MOSO YANG ULAH SBY BUDIONO
  • O SAYANG SBY BUDIONO LUMOH
  • OH BU BANGSA IND SOYO MULYO
  • MBUUH BANGSA IND SOYO LOYO
  • OO SBY, BUDOYO ILANG MUSNAH
  • BUDOYO BILANG SOYO MUSNAH
  • BUDOYO BONGSO MALAH SUNYI
  • SU DHON SUNAMI YOGYA BOBOL

Logika Program

Dalam dunia programming, awal dari membuat suatu program / aplikasi adalah mendefinisikan algoritma program yang akan dibuat. Dalam kasus ini kita akan membuat program Anagram, lalu bagaimana logika nya?

Dengan memanfaatkan teknik rekursif, kita akan membuat program ini, algoritma nya adalah sebagai berikut :

1. Lakukan Anagramisasi, adalah proses pembentukan anagram untuk huruf-huruf di sebelah kanan huruf yang pertama. Jika kalimat yang dimasukkan pengguna memiliki n buah huruf, tentu saja kita perlu melakukan anagramisasi sebanyak n-1 buah huruf sisanya. Dalam program ini, kita namakan method doAnagram() sebagai method yang mengolah anagram nya.

2. Lakukan perputaran huruf, untuk sejumlah n huruf. Rotasi ini berarti melakukan pergeseran semua huruf satu posisi ke sebelah kiri, kecuali huruf yang paling kiri .

3. Lakukan langkah di atas seperti sebanyak jumlah huruf dalam kata / kalimat yang di masukkan oleh user (n kali).

Pertanyaan berikutnya adalah bagaimana melakukan anagramisasi huruf-huruf di sebelah kanan dari huruf pertama. Dengan teknik rekursif, method doAnagram() dalam program ini mengambil ukuran kata atau kalimat (newSize) yang akan dianagramisasi sebagai parameternya. Dengan demikian setiap kali method doAnagram() memanggil dirinya sendiri, ia pasti akan bekerja dengan kata / kalimat yang ukuran nya satu huruf lebih kecil dari pemanggilan metode doAnagram() sebelumnya.

Dalam kasus ini, kondisi berhenti untuk method doAnagram() tentu saja adalah satu huruf yang tersisa adalah 1. Selanjutnya, seperti terlihat pada method doAnagram(). Method rotate() yang secara sederhana melakukan pergeseran huruh-huruf tersisa ke sebelah kiri dengan logika dasar huruf yang paling kiri akan diletakan di bagian kata / kalimat yang paling kanan, sementara method displayWord() berfungsi untuk menuliskan (menampilkan) setiap langkah anagramisasi ke layar output.

Source Code

Langsung aje kita ngoding

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplicationAnagram
{
class Program
{
static int size;
static int count;
static char[] arrChar = new char[100];

static void Main(string[] args)
{
// Mendapatkan kalimat dari pengguna.
Console.Write("Masukkan kalimat : ");
String input = Console.ReadLine();
Console.Write("\n\n");
// Mendapatkan ukuran kalimat.
size = input.Length;
count = 0;
for (int j = 0; j < size; j++)
// Menaruh kalimat di array.
arrChar[j] = input[j];
doAnagram(size); // Menyusun anagram.
Console.ReadLine();
}

// Metoda yang melakukan anagramisasi.
private static void doAnagram(int newSize)
{
// Jika ukuran terlalu kecil
// (dasar rekursif).
if (newSize == 1)
return;
// Untuk tiap posisi.
for (int j = 0; j < newSize; j++)
{
// Sisa anagram.
doAnagram(newSize - 1);
// Jika selesai, tampilkan!
if (newSize == 2)
displayWord();
// Lakukan rotasi kalimat.
rotate(newSize);
}
}

// Melakukan rotasi.
private static void rotate(int newSize)
{
int j;
int position = size - newSize;
// Simpan huruf pertama.
char temp = arrChar[position];
for (j = position + 1; j < size; j++)
// Geser huruf yang lain ke kiri.
arrChar[j - 1] = arrChar[j];
// Meletakkan huruf pertama ke kanan.
arrChar[j - 1] = temp;
}

// Menampilkan ke layar Console.
private static void displayWord()
{
if (count < 99)
Console.Write(" ");
if (count < 9)
Console.Write(" ");
Console.Write(++count + " ");
for (int j = 0; j < size; j++)
Console.Write(arrChar[j]);
Console.Write(" ");
if (count % 6 == 0)
Console.Write("");
}
}
}

Output

Jika kalimat yang di masukkan ada n huruf, maka hasil anagram nya adalah n! (n faktorial).

Jika anda merasa kesulitan, bisa di donlot source code nya di sini .

, , , , ,

  1. Tinggalkan komentar

Tinggalkan komentar