Implementasi Metode Simple Hill Climbing Pada Game Sederhana Puzzle 8 Blok

Game Puzzle 8 Blok adalah permainan sederhana yang terdiri dari susunan 9 buah kotak/persegi yang mana 8 kotak diantaranya berisikan angka dari 1 hingga 8, 1 kotak sisanya kosong. Kotak kosong ini digunakan untuk memindahkan 8 kotak atau blok-blok hingga mencapai urutan angka yang diinginkan. Mungkin untuk lebih jelasnya silahkan lihat gambar dibawah ini, gambar berikut ini adalah visualisasi permainan tersebut :

Ya seperti itulah, jadi teringat permainan itu di masa lalu ya?? 🙂 Saat ini saya akan coba membuatnya dalam sebuah permainan komputer sederhana, kenapa sederhana, karena untuk bagian pertama ini saya ingin share dulu game versi text nya, atau versi DOS (Command Prompt). Untuk versi GUI nya akan menyusul di posting selanjutnya :).

Disini agar proses pencarian solusi optimal, saya menggunakan algoritma Simple Hill Climbing yang didukung dengan metode Manhattan Distance untuk mengetahui jumlah atau jarak paling minimum dari persoalan menuju posisi blok yang diinginkan. Untuk lebih jelasnya mengenai Manhattan Distance atau Simple Hill Climbing bisa dicari lebih lanjut di website lainnya :mrgreen:. Untuk hasil contoh jalannya program ini adalah sebagai berikut : Continue reading

Contoh Function Di Oracle Menghitung Jumlah Huruf Konsonan Dan Vokal Dari Inputan

Soal ini didapat dari Praktikum Basis Data Lanjut mengenai pembahasan Function dan Procedure di Database Oracle. Okey, berikut ini merupakan sintaks function untuk menghitung karakter selain angka serta membedakan mana yang termasuk huruf vokal dan konsonan berdasarkan inputan user :

CREATE OR REPLACE FUNCTION VOKAL_KONSONAN (KATA IN VARCHAR2)
RETURN VARCHAR2 IS HASIL VARCHAR2(255);
KONSONAN NUMBER;
VOKAL NUMBER;
BEGIN
	IF LENGTH(TRIM(TRANSLATE(KATA, '+-.0123456789', ' '))) IS NULL THEN
		HASIL := 'Teks yang kamu masukkan mengandung karakter angka';
	ELSE
		KONSONAN := LENGTH(REPLACE(TRANSLATE(KATA, 'aAeEiIoOuU', ' '), ' ', NULL));
		VOKAL := LENGTH(REPLACE(KATA, ' ', NULL)) - KONSONAN;
	END IF;
	RETURN HASIL;
END;
/

Untuk menjalankan atau mencoba sintaks diatas setelah dieksekusi dan berhasil membuat function, bisa memakai sintaks atau query berikut ini :

SELECT VOKAL_KONSONAN('Rendra Kurniawan') FROM DUAL;

Semoga bermanfaat 🙂

Praktikum Basis Data (Oracle) – Part 3

Ini merupakan lanjutan dari postingan sebelumnya yaitu Praktikum Basis Data Oracle Part 2. Mohon maaf kepada teman-teman jika upload-nya telat, maklum karena banyak kegiatan di luar :). Oke langsung saja, berikut ini yang bisa aku sharing untuk Part 3 :

  1. Insert record baru dalam jumlah banyak menggunakan 1 query
  2. Merubah date format pada saat eksekusi query
  3. Melihat constraint yang ada pada suatu tabel
  4. Menampilkan seluruh tabel yang ada pada schema tertentu
  5. Menampilkan semua user dan schema yang ada
  6. Menggabungkan data antara 2 tabel menggunakan “Merge” dilengkapi berbagai kondisi (When Matched, Delete When Not Matched, dll)

Pertama (Insert Banyak Record Dengan 1 Query)

Maksudnya adalah jika ingin memasukkan data ke dalam suatu tabel lebih dari 1 record menggunakan 1 query yang bisa dieksekusi dalam 1 waktu. Berikut ini adalah source code nya :

INSERT ALL
INTO MATKUL_04900 VALUES (7, 1, ‘Alpro’, 3, ‘Dosen’)
INTO MATKUL_04900 VALUES (8, 1, ‘English’, 3, ‘Dosen’)
INTO MATKUL_04900 VALUES (9, 1, ‘Agama’, 3, ‘Dosen’)
INTO MATKUL_04900 VALUES (10, 1, ‘PBO’, 3, ‘Dosen’)
INTO MATKUL_04900 VALUES (11, 1, ‘KP’, 3, ‘Ibu Dosen’)
INTO MATKUL_04900 VALUES (12, 1, ‘KKN’, 3, ‘Dosen’)
SELECT * FROM DUAL;

Kedua (Merubah Date Format Query)

Penjelasan singkat dari judul kedua ini adalah, jika pada waktu eksekusi sebuah query entah itu untuk insert record atau select query, jika salah satu field merupakan parameter yang dibutuhkan untuk suatu kondisi, pastinya format tanggal perlu diatur sesuai value parameter yang diinginkan. Misalkan begini, di dalam record mempunyai value seperti “10/31/2012” namun kita ingin merubah formatnya menjadi “31/10/2012” tanpa harus merubah value (semoga bisa paham yang sebenarnya aku maksudkan, :mrgreen:), berikut ini adalah source-nya (Contoh untuk insert record) :

-- Inilah poin pentingnya --
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD';
-- Poin penting --

INSERT ALL
INTO TAB_MOD3_02 VALUES ('1001','Rendra','1990/01/23','P','Surabaya','SMPN 2 Mojosari',100)
INTO TAB_MOD3_02 VALUES ('1002','Kurniawan','1990/02/23','P','Mojokerto','SMPN 2 Mojosari',100)
INTO TAB_MOD3_02 VALUES ('1003','Rain','1990/03/23','P','Sidoarjo','SMPN 2 Mojosari',100)
SELECT * FROM DUAL;

Ketiga (Menampilkan Constraint)

Berikut ini adalah contoh query untuk menampilkan constraint yang ada pada tabel :

SELECT CONSTRAINT_NAME, R_CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME FROM USER_CONSTRAINTS ORDER BY CONSTRAINT_TYPE ASC;

Keempat (Menampilkan Seluruh Tabel Pada Schema)

SELECT TABLE_NAME, COLUMN_NAME FROM USER_TAB_COLUMNS ORDER BY TABLE_NAME ASC;

Kelima (Menampilkan User & Schema)

Berikut adalah contoh query untuk menampilkan daftar user dan schema yang ada pada Oracle :

SELECT SYS_CONTEXT('userenv','db_name') AS NAMA_DB, SYS_CONTEXT('userenv','session_user') AS NAMA_SCHEMA FROM DUAL;

Keenam (Merge Data)

Dibawah ini merupakan contoh query untuk menggabungkan data dari beberapa tabel menggunakan fungsi Merge.

MERGE INTO TAB_MOD3_02 b USING(
SELECT nopes, nmsis, ttl, jk, almtsis,
asalsek, bindo, bing, mat, ipa, poin
FROM TAB_MOD3_01
WHERE nopes = '1001') a ON (b.nopes = a.nopes)
WHEN MATCHED THEN UPDATE SET b.danem = ((a.bindo + a.bing + a.mat + a.ipa + a.poin)/5)
DELETE WHERE (a.nmsis = '') WHEN NOT MATCHED THEN
INSERT (b.nopes, b.nmsis, b.ttl, b.jk, b.almtsis, b.asalsek, b.danem)
VALUES (a.nopes, a.nmsis, a.ttl, a.jk, a.almtsis, a.asalsek,
((a.bindo + a.bing + a.mat + a.ipa + a.poin)/5))
WHERE (a.nopes <> '');

Yap, sekian untuk Part 3 ini, semoga bisa bermanfaat… sampai ketemu di Part 4 selanjutnya 🙂

Praktikum Basis Data (Oracle) – Part 2

Well well,,, kali ini aku mau share lanjutan dari post sebelumnya yaitu Praktikum Basis Data Oracle Part 1 dimana sebelumnya membahas mengenai pembuatan user, tablespace dan syart-syarat awal yang diperlukan untuk memulai pembahasan/pembelajaran pada umumnya mengenai Oracle Database.

Di Part 2 ini aku ingin share mengenai beberapa hal, diantaranya adalah :

  1. Membuat sebuah tabel dilengkapi dengan constraint
  2. Mengubah nama tabel (rename table)
  3. Merubah nama field/kolom dari sebuah tabel
  4. Menghapus tabel
  5. Menambahkan index, menambah constraint pada tabel
  6. Membuat tabel dengan meng-copy / berdasarkan struktur dari tabel lain
  7. Melihat constraint yang ada pada suatu tabel

Yah,,, lumayan poin yang akan dibahas kali ini, semoga bisa bermanfaat bagi semua 🙂

Pertama (Membuat Tabel Dilengkapi Constraint)

Berikut ini contoh untuk membuat suatu tabel dengan nama TaMod2 dengan 5 field/kolom, lihat script query berikut :

CREATE TABLE TaMod2 (
kode_user INT,
nama_user VARCHAR(30) NOT_NULL,
telepon VARCHAR(12),
email VARCHAR(25),
alamat VARCHAR(100),
CONSTRAINT pk_user PRIMARY KEY(kode_user));

Kedua (Merubah Nama Tabel)

Misalkan dari tabel diatas, kita akan merubah namanya dari TaMod2 menjadi TabMod2, maka bisa menggunakan query seperti berikut ini :

RENAME TaMod2 TO TabMod2;

Ketiga (Merubah Nama Kolom & Merubah Tipe Data Field/Kolom)

-- Query untuk merubah nama field / kolom
-- Contohnya untuk merubah kolom nama_user menjadi nama_pengguna
ALTER TABLE TabMod2 RENAME COLUMN nama_user TO nama_pengguna;

-- Query untuk merubah tipe data dari field tertentu pada tabel
-- Contoh berikut adalah merubah tipe data dari field kode_user
-- yang mana awalnya bertipe data INT, dirubah menjadi VARCHAR
ALTER TABLE TabMod2 MODIFY (kode_user VARCHAR(10));

Keempat (Menghapus Tabel)

Untuk menghapus tabel di Oracle, ada 2 metode yang perlu diketahui, yaitu dihapus secara biasa tapi masih tersisa di Recycle Bin-nya Oracle, atau benar-benar dihapus tanpa bekas. Berikut ini adalah query yang bisa kalian pakai, pertama adalah menghapus secara biasa dan query yang kedua untuk benar-benar menghapus tabel tanpa sisa di BIN (Recycle Bin Oracle).

DROP TABLE TabMod2;

Dengan query diatas (Drop), kita masih bisa mengembalikan atau meng-undo agar tabel bisa kembali lagi, gag jadi terhapus, bisa pakai query ini :

FLASHBACK TABLE TabMod2 TO BEFORE DROP;

Dan berikut ini query untuk melihat isi RECYCLE BIN-nya Oracle, jika ada tabel yang dihapus dengan query DROP pasti masuk disini.

SELECT * FROM RECYCLEBIN;

Dan ini adalah query untuk menghapus Tabel tanpa masuk di RECYCLE BIN, hampir sama dengan fungsi Shift+Del, querynya adalah :

PURGE TABLE TabMod2;
-- Contoh untuk menghapus tabel di RECYCLE BIN
PURGE TABLE "BIN$KIkRl/BNTzmEdg9BW4Z3Pg==$0";
-- Dan beberapa pengetahuan lain yang hampir sama dengan PURGE ALL
PURGE RECYCLEBIN;
PURGE DBA_RECYCLEBIN;
PURGE USER_RECYCLEBIN;

Kelima (Menambahkan Index / Constraint di Suatu Tabel)

CREATE INDEX FK_EMAIL ON TabMod2 (email ASC);

ALTER TABLE TabMod2
	ADD CONSTRAINT FK_EMAIL FOREIGN KEY (KD_EMAIL)
		REFERENCES TB_EMAIL (ID_EMAIL);

Keenam (Membuat Tabel Dengan Copy Struktur Tabel Lain)

Sebelumnya, misalkan kita buat tabel baru dengan nama Tab_Nama_01 dengan query berikut ini :

CREATE TABLE Tab_Nama_01 (
nomor_peserta varchar(12) PRIMARY KEY NOT NULL,
CONSTRAINT nopes CHECK(LENGTH(nomor_peserta)=12),
nama_siswa varchar(50) NOT NULL,
t_lahir varchar(20) NOT NULL, ttl DATE NOT NULL,
gender char(1) NOT NULL, nama_ayah varchar(50) NOT NULL,
nama_ibu varchar(50) NOT NULL,
nama_wali varchar(50) NOT NULL,
telepon varchar(15) NOT NULL,
almt_sis varchar(150) NOT NULL, kota varchar(50) NOT NULL,
kab varchar(50) NOT NULL, n_b_indo NUMBER NOT NULL,
n_b_ingg NUMBER NOT NULL, n_mat NUMBER NOT NULL,
n_ipa NUMBER NOT NULL, asal_sek varchar(70) NOT NULL,
tahun NUMBER(4) NOT NULL,
CONSTRAINT th CHECK(LENGTH(tahun)=4));

Kemudian, kita akan membuat tabel baru dengan nama Tab_Nama_02 dengan beberapa field yang meniru struktur dari tabel pertama yaitu Tab_Nama_01, berikut ini contoh querynya :

CREATE TABLE Tab_Nama_02 AS SELECT
a.*,
((a.n_b_indo + a.n_b_ingg + a.n_mat + a.n_ipa)/4) danem,
TO_DATE(a.TTL, 'MONTH') bulan,
TO_DATE(a.TTL, 'DD') tanggal,
TO_DATE(a.TTL, 'YYYY') tahun_lahir,
SUBSTR(nama_siswa,1, INSTR(nama_siswa,',')-1) nama_depan,
SUBSTR(nama_siswa,(INSTR(nama_siswa,',')+1),LENGTH(nama_siswa)) nama_belakang
FROM TAB_NAMA_01 a;

Ketujuh (Melihat Constraint Dari Tabel)

Beriku ini adalah contoh query untuk melihat atau menampilkan constarint apa aja pada table yang udah pernah kita buat sebelumnya. Ada beberapa cara :

-- 1
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'Tab_Nama_02';
-- 2
SELECT * FROM ALL_CONSTRAINTS WHERE TABLE_NAME = 'Tab_Nama_02';
-- 3
SELECT CONSTRAINT_NAME, COLUMN_NAME FROM USER_CONS_COLOM WHERE TABLE_NAME = 'Tab_Nama_01';

Yap… akhirnya sampai ujung juga. Capek juga ya, haha.. oke deh semoga bermanfaat bagi teman-teman. Sampai jumpa lagi ya di PART 3.

Praktikum Basis Data (Oracle) – Part 1

Dengan dimulainya tahun ajaran baru untuk Praktikum Basis Data Semester ini, aku punya ide untuk share pengalaman tentang hal terkait yang mana sudah pernah aku jalani di semester sebelumnya. Aku harap bisa bermanfaat khususnya bagi yang sedang Praktikum Basis Data Oracle atau bagi teman-teman lainnya yang lagi belajar mengenai Oracle 🙂

Pada bagian pertama ini, aku ingin share mengenai beberapa hal berikut :

  1. Membuat User baru di Oracle
  2. Membuat Tablespace untuk User tertentu di Oracle
  3. Memberikan hak akses agar user bisa login, bisa membuat Table, user bisa membuat Tablespace,  user dapat membuat View, Store Procedure, Trigger dan komponen DBMS lainnya.
  4. Contoh sederhana untuk membuat tabel baru dan insert record baru pada tabel tersebut.

Pertama (Membuat Tablespace Oracle)

Tablespace yang dibuat tersendiri ini nantinya berguna untuk user tertentu sebagai lokasi penyimpanan datanya, seperti tabel, view dan lain sebagainya. Tablespace ini berupa suatu file dengan ekstensi / bertipe file “.ora“, yang disimpan pada lokasi sesuai pilihan kita. Misalkan kita akan membuat suatu tablespace dengan nama praktikum yang disimpan pada file praktikum.ora, berikut ini query-nya :

CREATE TABLESPACE praktikum DATAFILE 'D:\Oracle\praktikum.ora'
SIZE 1M
AUTOEXTEND ON NEXT 500K
MAXSIZE 3M;

Script diatas bisa dijalankan melalui SQL Plus atau Interface lainnya yang mendukung operasi database Oracle. Keterangan dari script diatas adalah sebagai berikut :

  1. Baris pertama adalah untuk membuat tablespace dengan nama tersebut yang disimpan pada Drive D:/ dengan path tersebut.
  2. Baris kedua untuk menentukan berapa besar kapasitas file tablespace ini
  3. Baris ketiga merupakan ketentuan untuk file tablespace tersebut jika kapasitas penyimpanan melampaui batas yang ditentukan di baris kedua, istilahnya akan membengkak sebesar 500Kb tiap kali terjadi pembengkakan
  4. Baris terakhir adalah ketentuan berapa besar maksimal ukuran tablespace ini (Tidak bisa bengkak lagi).

Kedua (Membuat User Baru di Oracle)

Berikut ini contoh query untuk membuat user baru di Oracle menggunakan tablespace yang sudah dibuat pada poin pertama tadi.

CREATE USER rendra IDENTIFIED BY kurniawan DEFAULT TABLESPACE praktikum;

Ketiga (Memberi Hak Akses Pada User Oracle)

Setelah berhasil membuat user baru, sekarang diberi hak akses agar bisa melakukan beberapa hal seperti, login, membuat table, membuat view dan membuat tablespace. Sintaks yang bisa digunakan adalah sebagai berikut :

GRANT CONNECT, RESOURCE TO rendra;
GRANT CREATE VIEW TO rendra;
GRANT TRIGGER TO rendra;

Konsep untuk memberi hak akses adalah seperti script diatas, jika pemberian hak akses diatas masih kurang, bisa ditambahkan sendiri sesuai format seperti tersebut diatas.

Keempat (Membuat Table Baru & Insert Record)

Setelah pemberian hak akses, silahkan coba masuk/login sebagai user yang baru dibuat tadi dengan perintah conn rendra kemudian masukkan passwordnya. Setelah berhasil masuk/login, mencoba untuk membuat 2 buah tabel yaitu tabel mhs dan jurusan. Contoh perintahnya seperti ini :

CREATE TABLE MHS(NPM VARCHAR(15) NOT NULL,NAMA_LENGKAP VARCHAR(70),GENDER CHAR(1) NOT NULL,
TTL VARCHAR(50),
PRIMARY KEY(NPM) USING INDEX);

CREATE TABLE JURUSAN(
KD_JURUSAN INT NOT NULL,
NM_JURUSAN VARCHAR(50),
CONSTRAINT NM_JURUSAN_U PRIMARY KEY(KD_JURUSAN) USING INDEX);

Dan script dibawah ini adalah untuk insert data di tabel yang barusan dibuat tadi :

INSERT INTO MHS VALUES ('06.2009.1.04900', 'Rendra Kurniawan', 'L', 'Mojokerto, 23 Mei 1990', 1);

Bonus, script ini adalah contoh untuk membuat View di Oracle :

CREATE VIEW lihat_mhs AS
SELECT MHS.NPM, MHS.NAMA_LENGKAP, JURUSAN.NM_JURUSAN
FROM MHS INNER JOIN
JURUSAN ON MHS.KD_JURUSAN = JURUSAN.KD_JURUSAN
ORDER BY MHS.NPM ASC;

Okelah,,, sekian semoga bermanfaat… sampai ketemu di PART selanjutnya ya…
Thanks