Pembahasan Soal Matriks String

Kepengen nulis pembahasan soal programming lagi. Kali ini temanya tentang matriks string. Jujur sebelumnya saya lemah sekali, bahkan ketika final compfest kemarin pun saya tidak tahu apa-apa tentang implementasi matriks yang berupa string, makanya soal termudah final compfest 2013 (yang berupa matriks string) tidak bisa saya kerjakan :(. Oleh karena itu saya ingin sedikit sharing beberapa soal matriks string yang sudah saya kerjakan, yaitu soal pertama final compfest kemarin dan soal qualification round facebook hacker cup 2014.

Oke, langsung aja. Berikut pembahasannya

1. Laser Ajaib – Soal Final Compfest 2013

Soal :

Di masa depan, tepatnya tahun 20XX, polisi memiliki senjata canggih untuk menumpas kejahatan. Senjata tersebut diberi nama “laser ajaib”. Tidak seperti laser pada masa kini yang
hanya bisa menembak lurus, laser ajaib bisa menembak secara berbelok-belok. Akan tetapi, kelemahan dari laser ajaib ini adalah lasernya bisa terputus di tengah jalan sehingga tidak kena sasaran. Pak Chanek, sebagai seorang polisi di masa depan, ingin mengetahui apakah laser
ajaib miliknya kena sasaran atau tidak.

Diberikan sebuah pemetaan dari hasil tembakan laser ajaib. Pemetaan dari laser ajaib tersebut
memenuhi aturan sebagai berikut:
• Terdiri dari N baris dan M kolom
• Karakter ‘-‘ menyatakan daerah kosong, dan karakter ‘#’ menyatakan daerah yang ada
dalam pengaruh laser ajaib
• Dalam satu kolom, dijamin hanya ada satu karakter ‘#’, atau tidak ada sama sekali
• Dijamin terdapat setidaknya satu karakter ‘#’ pada suatu pemetaan
Laser di suatu kolom dianggap “menyambung” apabila setelah karakter ‘#’ di kolom itu, ada karakter ‘#’ lain yang berada tepat di kolom berikutnya (boleh pada baris yang sama, satu baris di atasnya, atau satu baris di bawahnya, selama masih belum keluar dari pemetaan).
Pengecualian pada kolom terakhir, yang selalu akan dianggap menyambung. Laser ajaib dianggap kena sasaran apabila seluruh kolom di pemetaan itu memiliki karakter ‘#’, dan
menyambung.
Tugas Anda adalah memeriksa apakah hasil tembakan itu kena sasaran atau tidak!

Format Masukan

Baris pertama berisi sebuah bilangan bulat T, yaitu banyaknya kasus uji.
Untuk setiap kasus uji:
Baris pertama berisi dua buah bilangan bulat yang dipisahkan oleh spasi, yaitu N dan M.
N baris berikutnya berisi M karakter, yang merupakan pemetaan dari laser ajaib.

Format Keluaran

Untuk setiap kasus uji, keluarkan “KENA” jika pada kasus tersebut tembakan laser ajaib kena
sasaran. Jika tidak, keluarkan “TIDAK KENA”.

Contoh Masukan

2
10 10
———-
———-
———-
-#–##—-
#-##–#—
——-##-
———#
———-
———-
———-
5 20
—##—##–##-#####
-##–###–##–#—–
——————–
——————–
——————–

Contoh Keluaran

KENA
TIDAK KENA

Yang bisa ditangkap dari soal ini adalah, menentukan apakah dari x awal sampai x akhir ‘#’ tidak putus. Solusinya adalah menentukan terlebih dahulu dari titik x=0, cari dari y awal sampai y akhir apakah ada char ‘#’. Jika tidak ada, maka outputkan langsung TIDAK KENA, tapi apabila ada, lalu pindah lagi ke koordinat x selanjutnya, dan y menjadi 0. Cari lagi tanda ‘#’. Jika ketemu, maka selisihkan antara koordinat y sekarang dengan y sebelumnya. Jika nilainya lebih besar dari 1 atau lebih kecil dari -1, maka outputkan program dengan TIDAK KENA dan program berhenti. Jika tidak, maka lanjutkan hingga nilai x==n. Jika nilai x==n, maka program berhenti dan kena=benar. Maka outputkan KENA.

Kode :

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int t;
	cin >> t;
	for (int i=1;i<=t;i++) {
		int n,m;
		cin >> n >> m;
		string s[n];
		for (int j=0;j<n;j++) cin >> s[j];
		int x=0,y=0;
		bool ketemu,kena;
		ketemu=false,kena=false;
		while (!ketemu && y<n) {
			if (s[y][x]=='#') ketemu=true;
			else y++;
			}
		bool kelar,dapet;
		if (ketemu) {
			kelar=false;
			x++;
			int ybef=y;
			y=0;
			while (!kelar) {
				dapet=false;
				while (!dapet && y<n) {
					if (s[y][x]=='#') dapet=true;
					else y++;
					}
				if (!dapet) kelar=true;
				else {
					if (y-ybef>1 || y-ybef<-1) kelar=true;
					else {
						x++;
						ybef=y;
						y=0;
						}
					}
				if (!kelar && x==m) {
					kelar=true;
					kena=true;
					}
				}
			}
		else kena=false;
		if (kena) cout << "KENA" << endl;
		else cout << "TIDAK KENA" << endl;
		}
	}

2. Square Detector – Qualification Round Facebook Hacker Cup 2014

Soal :

You want to write an image detection system that is able to recognize different geometric shapes. In the first version of the system you settled with just being able to detect filled squares on a grid.

You are given a grid of N×N square cells. Each cell is either white or black. Your task is to detect whether all the black cells form a square shape.

Input

The first line of the input consists of a single number T, the number of test cases.

Each test case starts with a line containing a single integer N. Each of the subsequent N lines contain N characters. Each character is either “.” symbolizing a white cell, or “#” symbolizing a black cell. Every test case contains at least one black cell.

Output

For each test case i numbered from 1 to T, output “Case #i: “, followed by YES or NO depending on whether or not all the black cells form a completely filled square with edges parallel to the grid of cells.

Example Input

5
4
..##
..##
....
....
4
..##
..##
#...
....
4
####
#..#
#..#
####
5
#####
#####
#####
#####
.....
5
#####
#####
#####
#####
#####

Example Output
Case #1: YES
Case #2: NO
Case #3: NO
Case #4: NO
Case #5: YES

Sebenarnya kode ini belum disubmit karena telat submit (batas submit cuma 6 menit dan saya kelamaan bikin file output), jadi gak tahu bener apa enggak. Tapi di testcase contoh, semuanya benar.

Lanjut. Jadi inti dari soal ini adalah menentukan apakah tanda ‘#’ membentuk persegi atau tidak. Solusinya, pertama kita cari dulu titik kiri atas (x awal dan y awal) dari ‘#”. Jika ketemu, lalu cari x akhir dan y akhir. Setelah itu, jika x akhir – x awal != y akhir – y awal, hentikan program dan outputkan NO karena sudah pasti bukan persegi. Jika tidak, maka ada beberapa kasus. Yang pertama adalah apabila ditengah-tengah persegi terdapat char ‘.’, dan kasus yang kedua adalah apabila ada tanda ‘#’ lain diluar persegi.

Kode :

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int t;
	cin >> t;
	for (int i=1;i<=t;i++) {
		int n;
		cin >> n;
		string s[n];
		bool kotak[n][n];
		for (int j=0;j<n;j++) {
			for (int k=0;k<n;k++) {
				kotak[j][k]=false;
				}
			}
		for (int j=0;j<n;j++) cin >> s[j];
		bool ketemu=false,kelar=false;
		int x=0,y=0; //koordinat
		while (!ketemu && !kelar) {
			if (y==n-1 && x==n-1) kelar=true;
			if (s[y][x]=='#') ketemu=true;
			else if (y==n-1) {
				x=0;;
				y++;
				}
			else x++;
			}
		int xx=x,yy=y; //xx = x akhir,yy = y akhir
		while (s[y][xx]=='#') xx++;
		xx--;
		while (s[yy][x]=='#') yy++;
		yy--;
		for (int k=y;k<=yy;k++) {
			for (int l=x;l<=xx;l++) {
				kotak[k][l]=true;
				}
			}
		bool benar=false;
		if (xx-x==yy-y) {
			//ngecek apa tengahnya kosong
			bool muncul=false,sudah=false;
			int tx=x,ty=y;
			while (!muncul && !sudah) {
				if (ty==yy && tx==xx) sudah=true;
				if (s[ty][tx]=='.') muncul=true;
				else if (tx==xx) {
					tx=x;
					ty++;
					}
				else tx++;
				}
			if (!muncul) benar=true;
			}
		//cari '#' yang nyampah di petak lain
		bool nyampah=false,tamat=false;
		int cariy=0,carix=0;
		while (!nyampah && !tamat) {
			if (cariy==n-1 && carix==n-1) tamat=true;
			if (s[cariy][carix]=='#' && !kotak[cariy][carix]) nyampah=true;
			else if (carix==n-1 && cariy!=n-1) {
				carix=0;
				cariy++;
				}
			else carix++;
			}
		if (nyampah) benar=false;
		if (benar) cout << "Case #" << i << ": YES" << endl;
		else cout << "Case #" << i << ": NO" << endl;
		}
	}

~~~

Sekian dari pembahasan ini. Kritikan, masukan, dan saran sangat ditunggu. Terimakasih 😀

Membuat Kalkulator Sederhana dengan VB6

Iseng gak ada kerjaan, tiba-tiba kepikiran buat bikin suatu kalkulator sederhana, kali ini dari VB6. Oke langsung aja,

Pertama-tama siapkan objek-objeknya terlebih dahulu, yaitu :

  • Command1 – Command17 sebagai tombol kalkulator
  • Label1 – Label5 sebagai penampil output hasil

Lalu setkan semua command menjadi seperti berikut :

  • Command1.Caption = “1”
  • Command8.Caption = “2”
  • Command3.Caption = “3”
  • Command7.Caption = “4”
  • Command2.Caption = “5”
  • Command4.Caption = “6”
  • Command5.Caption = “7”
  • Command6.Caption = “8”
  • Command9.Caption = “9”
  • Command10.Caption = “+”
  • Command17.Caption = “0”
  • Command12.Caption = “x”
  • Command15.Caption = “mod”
  • Command11.Caption = “:”
  • Command13.Caption = “-“
  • Command14.Caption = “=”
  • Command16.Caption = “ULANGI”

Lalu setkan semua label menjadi seperti berikut

  • Label1.Caption = “”
  • Label2.Caption = “”
  • Label3.Caption = “”
  • Label4.Caption = “”
  • Label5.Caption = “=”

Susun semuanya hingga menjadi seperti berikut :

seluruhSetelah itu, ketiklah kode berikut :

Private Sub Command1_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command1.Caption
Else
Label4.Caption = Label4.Caption + Command1.Caption
End If
End Sub

Private Sub Command10_Click()
Label2.Caption = Command10.Caption
End Sub

Private Sub Command11_Click()
Label2.Caption = Command11.Caption
End Sub

Private Sub Command12_Click()
Label2.Caption = Command12.Caption
End Sub

Private Sub Command13_Click()
Label2.Caption = Command13.Caption
End Sub

Private Sub Command14_Click()
If Label2.Caption = "x" Then
Label3.Caption = Val(Label1.Caption) * Val(Label4.Caption)
ElseIf Label2.Caption = "+" Then
Label3.Caption = Val(Label1.Caption) + Val(Label4.Caption)
ElseIf Label2.Caption = "-" Then
Label3.Caption = Val(Label1.Caption) - Val(Label4.Caption)
ElseIf Label2.Caption = ":" Then
Label3.Caption = Val(Label1.Caption) / Val(Label4.Caption)
ElseIf Label2.Caption = "mod" Then
Label3.Caption = Val(Label1.Caption) Mod Val(Label4.Caption)
End If
End Sub

Private Sub Command15_Click()
Label2.Caption = Command15.Caption
End Sub

Private Sub Command16_Click()
Label1.Caption = ""
Label2.Caption = ""
Label3.Caption = ""
Label4.Caption = ""
End Sub

Private Sub Command17_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command17.Caption
Else
Label4.Caption = Label4.Caption + Command17.Caption
End If
End Sub

Private Sub Command2_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command2.Caption
Else
Label4.Caption = Label4.Caption + Command2.Caption
End If
End Sub

Private Sub Command3_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command3.Caption
Else
Label4.Caption = Label4.Caption + Command3.Caption
End If
End Sub

Private Sub Command4_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command4.Caption
Else
Label4.Caption = Label4.Caption + Command4.Caption
End If
End Sub

Private Sub Command5_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command5.Caption
Else
Label4.Caption = Label4.Caption + Command5.Caption
End If
End Sub

Private Sub Command6_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command6.Caption
Else
Label4.Caption = Label4.Caption + Command6.Caption
End If
End Sub

Private Sub Command7_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command7.Caption
Else
Label4.Caption = Label4.Caption + Command7.Caption
End If
End Sub

Private Sub Command8_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command8.Caption
Else
Label4.Caption = Label4.Caption + Command8.Caption
End If
End Sub

Private Sub Command9_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command9.Caption
Else
Label4.Caption = Label4.Caption + Command9.Caption
End If
End Sub

Setelah itu, coba dites

hasil

~~~

Sekian dari pembahasan super singkat ini, semoga bermanfaat 🙂

Pembahasan OSN 2010 dan BNPCHS 2009

Kegiatan belajar semester 2 kelar juga, fiuh. Hari-hari kosong gini enaknya diisi sama coding. Bener-bener ngerasain coding sebebas ini,haha. Setelah selama KBM di sekolah, coding cuma bisa dilakuin pas gak ada guru atau pas malam hari setelah belajar buat sekolah (baca:jam 10-12). Well, di post ini gw mau bahas sedikit soal OSN 2010 sesi 2 dan BNPCHS 2009. Masing-masing kontes akan gw bahas satu soal, enjoy it guys! 😀

OSN 2010 sesi 2 – Pecahan Uang

Ide dari soal ini yaitu greedy, cuma dimodifikasi sedikit. Rada mirip sama soal IPSC yang gw bahas di post sebelumnya. Yang ngebedain cuma di soal ini kita ga nampilin jumlah uang yang kosong. Tampilin jumlah uang yang tersedia aja.

Kode :

#include <iostream>
using namespace std;
int main() {
int uang[10]={1000,500,200,100,50,20,10,5,2,1};
int tampung[10];
int k;
for (int i=0;i<10;i++) {
tampung[i]=0;
}
cin >> k;
for (int i=0;i<10;i++) {
int count=0;
while (k>=uang[i]) {
count++;
k-=uang[i];
}
tampung[i]=count;
}
for (int i=0;i<10;i++) {
if (tampung[i]!=0)
cout << uang[i] << " " << tampung[i] << endl;
}
}

BNPCHS 2009 – BeSaR DaN KeCiL

Ide dari soal ini yaitu ngubah masing-masing char dari string huruf yang diinput ke dalam ASCII. Dalam ASCII, perbedaan antara huruf besar dan huruf kecil sebanyak 32. Misal nilai ASCII huruf A=65, maka nilai ASCII huruf a sebanyak 97. Begitu juga untuk B, C , dst.

Kode :

#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n;
cin >> n;
for (int i=0;i<n;i++) {
string huruf;
cin >> huruf;
for (int j=0;j<huruf.length();j++) {
int tampung=0;
if ((j+2)%2==0) {
tampung=(int)huruf[j]-32;
huruf[j]=(char)tampung;
}
}
cout << huruf << endl;
}
}

Sekian dari pembahasan kali ini, semoga berguna untuk semuanya. Let’s fighting together for IOI! 😀

Hope I can join it someday, aamiin.

Pembahasan IPSC 2013

Welcome June! Finally exam had done! *fiuh

Lega, karena beban sudah lepas (gak juga sih, masih banyak remedial dan kawan-kawan). Tetapi dibalik itu udah lega dan ga sabar karena sebentar lagi naik ke kelas XI! Yang berarti bakal nentuin jurusan nanti.

Oke lanjut, kembali ke bahasan postingan. Baru-baru ini gw ikutan kontes lagi yang bernama IPSC 2013 atau Internet Problem Solving Contest 2013 (soal bisa dilihat disini). Jadi kontes ini sifatnya online dan formatnya tim. Awalnya yang ngajakin gw buat ikutan kontes ini adalah Faisal (OSK 2013, SMAN 2 Bandung) buat gabung sama team dia. Nah, satu anggota team lagi yaitu Muhammad Alif Mi’raj Jabbar (OSK 2013, SMAN 5 Bandung). Nama teamnya Anu, cuma nama itu yang kepikiran karena Anu itu maknanya luas =))

Kembali ke kontes. Hmm menurut gw (karena baru pertama kali ikut), kontesnya unik. Jadi problemnya ga cuma ngetik source code, tapi ada kalanya cuma ngirim file output, bahkan di kontes ini gw nemu task yang nyuruh kita buat maen game =))

Btw, di kontes ini kita cuma solve 1 soal :(, itupun yang game. Sebenernya kita bisa solve 2 task lagi, tapi sayang untuk problem A gw ngebug parah, dan baru nyadar bugnya itu pas kontes selesai T.T

Langsung saja ke pembahasan

Problem A : Advice for Olivia

Solusi yang kepikiran dari gw untuk task ini yaitu greedy. Intinya ngambil nilai yang paling besar, jika si variabel sudah tidak memenuhi untuk nilai yang paling besar, maka dibandingkan ke nilai yang lebih kecil. Setelah didiskusiin, ternyata ada yang bilang pake dp, ada juga yang bilang gausah pake greedy.

(Note : karena di task ini dimintanya file output, maka memakai fin dan fout. Jika kalian ingin melihat output di layar, maka untuk fin>> dan fout<< bisa diubah dengan cin dan cout untuk mengecek output)

Berhubung gw pake greedy, ini source codenya,


#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main() {
ifstream fin("a1.in");
ofstream fout("a1.out");
int m[13]={10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
int t;
fin >> t;
for (int i=1;i<=t;i++) {
//inisialisasi array buat jumlah uang
int z[13];
for (int s=0;s<=t;13;s++) {
z[s]=0;
}
//ngebaca nilai euro sama sen
int e,c,tot,a;
fin >> e >> c;
a=e*100;
tot=a+c;
//ngitung jumlah uang
if (tot>=0) {
for (int j=0;j<13;j++) {
while (tot>=m[j]) {
z[j]=z[j]+1;
tot=tot-m[j];
}
}
}
//nulis jumlah pecahan uang yang digunakan
for (int j=13-1;j>=0;j--) {
fout << z[j] << " ";
}
fout << endl;
}
}

Problem J : Labyrinth

Soal yang unik yang beda dari kontes lainnya, yaitu GAME. Jadi intinya kita mainin game yang nyuruh player di game itu buat nemu jalan finish. Langkahnya ga boleh lebih dari 1.000.000 kali. Kalo udah nyampe, dicopas langkah-langkah tadi ke file output tersendiri. Antara stage 1 dan stage 2 langkah-langkahnya dipisah dengan enter 2 kali.

Btw, gw hanya bisa solve untuk problem easynya aja. Untuk problem hard susah banget. Gw lihat ada satu tim yang bisa solve problem hard, rajin amet –”

~~~

Mungkin sekian dari pembahasan gw kali ini. Untuk soal lain kalo ada yang bisa bantu logikanya, bisa dikomen di post ini dan didiskusiin bareng, thanks! 😀

Dari iseng beli menjadi kesukaan

5 April 2013

Waktu menunjukkan pukul 10 malam. Agak jenuh juga, selama 4 jam sejak pukul 6 sore tadi belajar coding, ya otodidak sih dari bundel-bundel soal yang ada. Tapi sejak aku baca suatu tulisan di TOKI News, ternyata jam terbang belajar pemrograman yang optimal itu sekitar 10.000 jam. Dan mulai detik ini aku bertekad akan menghabiskan jam terbang tersebut! Karena yang aku tahu, selama ini aku belajar pemrograman hanya saat aku mau saja atau saat aku mood saja. Inilah yang membuat belajarku tidak optimal. Kubulatkan tekadku, pokoknya aku harus bisa mendapatkan mimpiku di IOI dan TOKI, I believe God give miracles to me, amin.

Sejenak melepas jenuh, kuputar lagu melalui VLC Media Player di laptopku yang beroperating system Ubuntu 12.10. Mengapa bukan Windows? Sebenarnya laptop ini kupasang dual OS yaitu Windows XP SP 2 dan Ubuntu 12.10 ini, tetapi entah mengapa aku lebih suka dan sering menggunakan Ubuntu daripada Windows. Aku hanya menggunakan Windows di saat aku mengerjakan tugas sekolah, walaupun sebenarnya aku berharap bahwa penggunaan operating system di sekolahku menggunakan Linux, haha, seems impossible. 😀

Melenceng di topik, oke tapi lanjut aja deh. Saat ini aku semakin suka memakai operating system Linux. Aku jadi ingat pertama kali mencoba OS Linux, waktu itu kelas 9 SMP saat iseng beli buku Ubuntu Untuk Pemula. Padahal aku memilih buku itu hanya random (dan murah + dapet bonus kaset :3) karena buku komputer lainnya cukup membosankan untuk dibaca mengingat waktu itu aku habis mengerjakan soal UAS SMP sehingga membaca kode pemrograman cukup membuat jenuh bagiku saat itu. Berawal dari mencoba, akhirnya terinstalllah OS Linux pertamaku : Ubuntu 11.10, tadaa!

Dari tulisan-tulisan yang aku baca di internet, banyak orang yang enggan memakai Linux karena harus memakai terminal jika ingin melakukan sesuatu seperti menginstall dan sebagainya. Tapi tidak kok, bisa juga install manual melalui Software Center yang tersedia tanpa harus membuka terminal (walaupun sekarang aku lebih suka menginstall melalui terminal karena mengasyikkan :3). Seseram apapun Linux bagi kalian, pasti akan terkalahkan oleh tampilannya yang menyamai OS Mac (dan ternyata saya baru tahu kalau Mac dan Linux itu sama-sama dari UNIX sehingga efek-efek di Linux mirip sama Mac).

Perjalanan berlanjut ke SMA. Aku mempunyai teman segugus sewaktu MPLS yang juga penggemar Linux sehingga kita suka otak-atik Linux bareng. Dan ada suatu kejadian yang mempertemukanku dengan suatu komunitas linux yang serius. Waktu itu sedang ada pameran expo di Gedung Sabuga di samping ITB (my future campus, maybe :p). Kebanyakan yang ngisi stand pameran tuh anak-anak SMK (dan salut sama anak SMK 4 karena aplikasinya keren dan mainannya udah OOP C++ aja, hebat!). Puas melihat stand-stand dari anak SMK 4, perhatianku tertuju pada satu meja di samping panggung. Ada kakak mahasiswa ITB yang menampilkan angklung yang bisa dimainin di komputer. Jadi angklung kayu asli yang dioperasikan dari komputer melalui software. Biasa saja sih sebenarnya karena banyak juga yang membuat aplikasi semacam itu, tetapi yang membuat aku kagum itu.. wait wait, itu OS di laptopnya apa? What? Bukan, bukan Windows 7. Tetapi kaka itu menggunakan OS Ubuntu! Yap, bikin aplikasi secanggih itu menggunakan OS Ubuntu. Wah hebat, aku saja coding masih pakai windows, pake Ubuntu hanya sebatas untuk dengerin lagu + mainin terminal.

Langsung saja aku hampiri dia, tanya-tanya dan kenalan.. ternyata dia ka alvin mahasiswa TF ITB. Wah hebat, melenceng jauh dari dugaanku yang mengira dia anak IF atau SI. Ngobrol-ngobrol, dan dia berkata, “Kamu sudah tahu IGOS belum?” “IGOS? Apa itu kang?” “IGOS itu semacam komunitas. Kalau kamu mau main, dateng aja ke Labtek VI ITB”.

igos4

Karena aku masih belum menanggapi serius, jadi waktu itu aku hanya mengiyakan saja. Tetapi aku sempat meminta nomor handphone kaka itu, jadi kalau aku mau main kesana bisa ngabarin.

Fase waktu berganti ke (aku lupa kapan, bodo amat ah, haha), waktu itu lagi di perpustakaan ITB, iseng baca-baca disana karena bukunya bagus. Setelah puas, lalu aku berjalan keluar dari perpustakaan. Perhatianku tertuju pada pintu POSS IGOS yang terbuka. Perlahan-lahan, akhirnya aku tiba di depan pintunya. Kuketuk.. tok tok tok! Ternyata ada 4 orang kaka-kaka yang sedang berdiskusi. Ada ka alvin juga. Yaudah aku masuk, dan kenalan sama kaka-kaka disana yang ternyata kaka-kaka mahasiswa semua. 1 dari UPI dan 2 orang dari UNIKOM. Ditanya ngapain kesini, aku jawab saja,”Iseng aja, mau main”

Sejak saat itu, aku jadi suka main ke POSS IGOS. Kalau buka, aku bisa sekalin tanya-tanya soal Ubuntu sama kaka-kaka disana. Kalau tutup, aku bisa memanfaatkan hotspot dari IGOS untuk mendownload ISO-ISO Linux,haha. Kenceng loh, bisa sampai 2.5 Mbps karena servernya langsung dari ITB, asyiknya juga bisa buka website Kambing UI yang ISO nya jauh lebih lengkap daripada Mirror ITB. Karena banyak ISO untuk dicoba, akhirnya laptopku sering dijadikan kelinci percobaan buat buka ISO Linux lewat Virtualbox 😀

Fase waktu berganti lagi ke hari pertama pelatihan IGOS. Pelatihan berlangsung di salah satu ruang kelas di Labtek VI ITB. Alhamdulillah ngerasain juga sensasi masuk ke ruang kelas di ITB, hehe. Layar proyektornya keren, tinggal pake remote bisa langsung turun, haha, beda sama 5. Pelatihan pertama dimulai dan dijelaskan paket-paket materinya, yaitu :

1. Intro + Instalasi

2. Install Paket + Pengenalan Desktop Environment

3. CLI (Command Line Interface)

4. CLI + Bash

5. Troubleshooting

6. Networking basic + konsep

7. Server : File Sharing

8. Server : Web + Programming HTML, PHP, MySQL

9. (lanjutan dari 8)

10. Programming Java

11. (lanjutan dari 10)

12. Programming Android

13. (lanjutan dari 12)

14. Remastering

15. (lanjutan dari 14)

16. Ujian

1 course itu setiap hari sabtu per minggunya. Jadi 16 minggu atau 4 bulan akan kulalui untuk materi IGOS sebelum ke ujian. Yang ikut pelatihan untuk tahun ini kebanyakan anak mahasiswa, haha. Anak SMA cuma 2 orang, yaitu aku dan temen segugus waktu MPLS, Ahmad Chandra. Semua siswa pelatihan dibagi lagi perkelompok, dan kelompok aku anak kuliah semua (STEI ITB dan UNIKOM), wahaha kacau dah.

Buat yang tertarik ikut pelatihan ini, bisa langsung datang ke POSS IGOS ITB setiap hari sabtu jam 10.00, walaupun tidak ikut materi pertama kemarin, tidak apa-apa. Datang saja, nanti ada kaka-kaka yang siap membantu. */ Ini kenapa jadi promosi ya? Biarin ._. /*

Mungkin ini sepotong ceritaku tentang ketertarikan dengan Linux. Aku tak peduli meskipun banyak yang menyindirku karena aku pemakai Linux sendiri di kalangan sekolah. Yang penting ini gratis dan pastinya legal! 😀

My Ubuntu Desktop
My Ubuntu Desktop

Seleksi Olimpiade Wilayah : Fail :)

Udah lama ga nulis di blog ini, mohon maaf karena selain sibuk buat ngurus expo kemarin (gatau sukses apa enggak.haha), saya juga sibuk sama pelajaran dan sedikit waktu saya untuk latihan olim. Tapi karena dari bulan-bulan yang lalu saya sudah menyisihkan sedikit waktu saya buat latihan soal OSK (makanya sekarang saya lebih gila,mainannya latihan soal Sesi 1 OSN,kacau dah,wahaha) Dan setelah pelaksanaan olimpiade tingkat wilayah pada tanggal 24 Maret kemarin, unlucky I’m fail!

Well, seharusnya I accept this fail. But, ada beberapa hal janggal yang saya rasakan. Sebelumnya mohon maaf untuk panitia olimpiade komputer wilayah Bandung, ini hanya sebatas opini saya selaku peserta,hehe 😀

Oke, saya ceritain dulu deh dari awal. Nah waktu itu H-1 bulan OSK. Di grup fb olimpiade informatika Ka Brian Marshal tiba-tiba ngupload berkas peraturan OSK-OSP 2013. Langsung saja saya upload dan saya pelajari. Untuk persyaratan ya alhamdulillah saya lolos, nilai matematika di rapot tidak dibawah 70, buta warna tidak juga :D, dan masih siswa kelas 10. Untuk pelaksanaan, saya membaca peraturan bahwa masing-masing sekolah mengirimkan perwakilannya sekitar 3 orang untuk OSK. Nah, semacam keuntungan untuk saya mengingat di Bandung ada beberapa sekolah yang alumnusnya banyak yang TOKI (sekolah saya tidak termasuk di salah satunya), saingannya jadi dikitlah. Untuk sistem minus sudah klasik, jadi tidak terlalu kaget. Optimis lah buat OSK nanti.

H-8 Olimpiade Wilayah, dipanggil sama pembina saya buat ngurus suatu seleksi. Saya pikir seleksi ulang tingkat sekolah karena yang lolos seleksi sekolah awal sekitar 7 orang, mungkin diseleksi ulang biar 3 orang bisa lolos buat ikut OSK nanti. Gak taunya seleksinya tingkat wilayah se-Bandung. Yaudah saya bantu bikin form pendaftarannya karena pembina saya lagi sibuk juga ngawas tryout kelas 12. Selesai formnya, dan dikirim ke panitia. Ada beberapa hal yang terlintas di benak saya :

  1. Seleksi ini tujuannya menyaring perwakilan dari masing-masing sekolah menjadi 3 orang/sekolah. Yang menyeleksi ini MGMP Kota Bandung biar fair, kalo yang menyeleksi dari masing-masing sekolah takutnya ada kecurangan.
  2. Ada sistem minus.
  3. Lembar jawaban mengikuti OSK, dengan pulpen dan disilang di Lembar Jawaban Manual, bukan diurek dengan LJK yang rawan akan kesalahan koreksi.

Oke, ketiga hal tadi bisa saya maklumi. Langsung saja ke tanggal 24. Seleksi berlangsung di Universitas Widyatama. Karena saya gak pengen telat, saya datengnya pagi-pagi. Jam 6.30 saya tiba di kampus megah tapi mini tersebut (dan upacaranya dimulai jam 8). Di upacara, seperti biasa sambutan dari panitia dan perwakilan dari UTama. Untuk yang lolos di seleksi ini 80 orang dari 240 orang. Jadi peluangnya 1/3.

Langsung saja ke seleksi. Seleksi dimulai jam 9. Dibacakan peraturannya, ternyata tidak ada sistem minus! Semacam benefit juga buat saya, alhamdulillah. Dan ternyata lembar jawaban menggunakan LJK. Ini hal yang saya takutkan. Karena takutnya urekan saya yang sedikit keluar garis padahal jawaban saya betul. Padahal sejujurnya saya lebih setuju pake lembar jawaban manual karena keakuratan koreksinya tinggi. Soal-soalnya banyak yang mengadop dari OSK tahun sebelumnya.

Langsung saja dikerjakan. Saya pakai sarannya anak TOKI 2013 yang saya tanyain di fb, kerjain soal algoritmika dulu. Dan benar, dengan cepat dan pede soalnya saya kerjakan. Setelah selesai algoritmika, saya lanjut ke soal logika. Untuk logika, susah sih, tapi ada beberapa soal yang sudah pernah saya kerjain jadi tidak terlalu sulit juga. Setelah saya kerjakan dan saya koreksi ulang, akhirnya lembar jawaban saya kumpulkan dengan perasaan berdebar-debar. Hmm, lolos gak ya? Karena lembar jawaban boleh dibawa pulang, akhirnya pas pulang saya koreksi ulang. Untuk algoritmika alhamdulillah hampir semuanya benar. Tetapi untuk logika, little little I can do it. Dan benarlah, hanya 40% yang betul. Karena saya masih mengira bahwa penilaiannya itu diseleksi 3 orang dari masing-masing sekolah, masih ada harapan bahwa saya lolos.

Langsung saja ke tanggal 26 (Penghitungan skornya quick count pake komputer, jujur agak ga setuju juga). Dan ternyata saya tidak lolos. Oke tidak masalah, saya bisa menerimanya. Tetapi ada beberapa hal yang masih saya tidak paham :

  1. Di upacara, disebutkan bahwa peserta yang lolos 80 orang. Tetapi yang disebutkan lolos di website SMAN 4 Bandung cuma 76 orang.
  2. Yang lolos tidak merata, sesuai dugaan saya dan yang paling saya takutkan. Untuk sekolah-sekolah yang langganan TOKI seperti SMAK 1 dan SMA Alloysius yang lolos diatas 3 orang, SMA tetangga saya yang lolos juga sama diatas 3 orang, dan sekolah saya yang lolos hanya 1 orang. (Congrats ya Alif, semoga bisa bawa nama SMAN 5 sampai OSN :D)

Itu sih beberapa hal yang masih saya heran. Jika dihubungkan dengan peraturan OSK dan OSP, (mohon maaf) terlihat tidak fair karena ada beberapa sekolah yang mengirimkan perwakilannya lebih dari 3 orang sedangkan dalam peraturan setiap sekolah mengirimkan perwakilannya 3 orang per bidang lomba untuk OSK nanti.

Hmm, sudahlah. Masih ada tahun depan. Dan lomba ga cuma Olimpiade kok. Masih ada Compfest,BNPC,ITBPC, dan lainnya. Dan yang pastinya, masih ada Olimpiade Informatika Terbuka meskipun peluang dapet medalinya jauh lebih kecil. Tapi, tidak ada yang tidak mungkin. Tidak ada! Kitaaa pastiii bisaaa! (Ngikutin kata di film OKK UI 2012 yang di saya tonton di youtube :D)

Pokoknya saya akan terus mengejar target saya : be TOKI and join IOI. Semoga bisa terwujud,amiin.

Terimakasih, Allah bless you all! 🙂

Pelajaran : Saat terkuat justru kita temukan saat kita berada di keadaan terbawah 😀

Long Time No See~

Hello, long time no see. Setelah seminggu terisi dengan ulangan harian, dan hari minggunya lomba (yang sangat mendadak), akhirnya bisa juga menulis di blog tercinta ini (ceilah), hehe. Udah pada kangen sama tulisan terbaru saya kan? Iya kan? Ngaku aja. *oke, ini maksa*

Lanjut, seminggu ulangan, otomatis ga nekunin coding. Karena ga nekunin coding, otomatis udah lupa codingan. Yang namanya bubble sort, algoritma pangkat n, dan algoritma aneh lainnya udah mulai lupa,hehe. Rumus fisika, kimia, matematika itu tidak bisa dihapalkan beriringan dengan codingan pascal. Oke, mau cerita nih soal lomba yang baru aja saya jalani. Jadi waktu hari jumat kemarin, sepulang  dari sholat jum’at, saya dapet sms dari seseorang. Tininit, saya buka aja smsnya. Isinya, “Kepada seluruh peserta KPXI Unpar, diharap besok kehadirannya untuk daftar ulang di kampus Unpar”. Oke, saya waktu itu terlihat nyantai. Saya pikir cuma daftar ulang, belum sampe lomba, karena yang saya tahu, lombanya itu sekitar bulan maret.

Nyampe di kos, buka laptop dan cek website KPXI Unpar, terlihat di clock nya, “12 hours again”. Apa?! 12 jam lagi? Begitu saya cek websitenya ternyata bener, LOMBANYA TANGGAL 16 FEBRUARI 2013. WHAT?! Saya sama sekali belum belajar buat lomba. Yaudah dengan segenap kemampuan yang ada akhirnya saya belajar. Inget-inget algoritma yang ada, wah ini bener-bener belajar mendadak banget.

Besok lomba. Udah pasrah, lolos ke final aja udah alhamdulillah banget. Lolos final juga pasti dijamin nilai saya 0 karena ga sempet belajar coding. Oke jam 8 caw ke Unpar bareng Fikry, ini pertama kali kesana. Jadi masih was-was takut nyasar, haha.

Nyampe di Unpar (dan masih tercengang karena kampusnya adem banget, keren dah), akhirnya dianterin sama panitianya. Ditanyain, “Kalian kelas berapa?” Kami berdua menjawab,”Kelas 10 kak” “Wah hebat, kelas 10 udah berani ikut lomba ini”. Kita berdua diam aja, dan ngeduga pasti yang ikut lomba ini veteran kelas 11 sama 12 semua.

Dan ternyata bener, pas sampe disana kita dikasih tas KPXI yang berisikan buku panduan dan kaos (yang saya incer di lomba sebenernya kaosnya :p). Saya cek aja data sekolahnya, wah sekolah-sekolah yang ikut kebanyakan sekolahnya alumni TOKI semua. Ada SMA Alloysius, SMAK Penabur, SMA Xaverius, dalem hati saya, “Impossible deh gw lolos”. Kata saya ke Fikry, “Geus lah fik, kita paling cuma bawa pulang kaos”.

Dan saya sempet kenalan sama 2 orang dari SMA Xaverius 1 Jambi, namanya Ricky dan Alva (dan saya ga nyadar saya sedang berkenalan sama 2 orang dewa, karena mereka akhirnya dapet juar a 1 dan 2 di lomba itu,ckck). Dan benar, mereka kelas 11, dan orang yang ikut lomba itu umumnya kelas 11 sama 12 semua.

Oke, setelah pembukaan, akhirnya lomba dimulai. Saya bersyukur karena penyisihan berbentuk PG.Karena kalo penyisihannya berbentuk soal programming, dijamin nilai saya 0 karena ga sempet belajar. Akhirnya saya buka soalnya, saya mulai ngerjain. Pas saya tanya sama kakaknya, “Kak, boleh buka FreePascal gak?” “Boleh”, wah jujur pas itu saya udah seneng banget, jarang ada lomba yang ngebolehin beginian :D. Tapi tetep saya pake FPC cuma buat soal yang susah banget, sisanya saya kerjain sendiri buat latihan OSK nanti.

Terus ada soal logika yang pake bilangan biner dengan operasi AND, OR, XOR, dan lainnya. Sebenarnya ada PDF panduannya dan disitu ada daftar tabel biner, tetapi saya ngerjain soal itu mentah-mentah tanpa melihat panduannya, haha, jujur bangga banget. Dan pas lagi makan selesai penyisihan, saya nanya ke Fikry, “Fik, eta panduan teh isina naon?” “Eta sat, aya penjelasan operasi XOR,AND,OR, sama tabel binerna oge” “Wanjir, urg ngerjain eta tanpa ngeliat panduanna” “Wanjir, maneh hafal bilangan biner kitu?” Well, ada rumus untuk mencari bilangan biner sebenarnya, hehe. :p

Oke, selesai ngerjain soal penyisihan (dan ga yakin bener apa enggak), akhirnya saya pasrahin yang terbaik karena saya juga ikut lomba ini tanpa belajar sama sekali. Dan bener, saya ga lolos penyisihan, dan Ricky dan Alva lolos. Saya salamin aja mereka, selamat ya akhirnya kalian dapet juara 1 dan 2 di kontes ini, congrats!

Well, gausah berlarut-larut ke dalam kesedihan, masih ada Compfest sama ITBPC kok. KPXI Unpar boleh gagal, tapi tidak boleh gagal di OSK nanti, semangat! 😀

Pembahasan soal algoritmika OSK 2006

Udah lama ga nulis pembahasan nih. Bingung mau nulis apa lagi di blog. Oke langsung saja,

54. Perhatikan potongan program berikut
for i := 1 to n do begin
for j := 1 to n do begin
for k := 1 to n do begin
writeln(‘*’);
end;
end;
end;
dengan sembarang harga n > 0, keluaran ‘*’ akan
dicetak berulang-ulang dalam sejumlah baris
yang
(A) merupakan fungsi kubik (pangkat 3)
dari n
(B) merupakan fungsi kuadrat dari n
(C) merupakan fungsi linier dari n
(D) merupakan konstanta
(E) merupakan fungsi pangkat empat dari n

Jawab

Pada algoritma di atas, menggunakan nested loop sebanyak 3 kali. Karena kita tahu fungsi for a=1 to n itu berarti mengkalikan sebanyakan n kali, maka jika perulangannya bersarang, maka akan menjadi berpangkat.

Untuk algoritma code tadi, maka yang akan dihasilkan ada pangkat tiga, maka jawabannya adalah (B).

55. Perhatikan potongan program berikut
for i := 0 to 4 do
begin
for j := 5-i downto 1
begin
write(„*‟);
end
writeln();
end
Apakah output program di atas?
(A)
*****
*****
*****
*****
*****
(B)
*
**
***
****
*****
(C)
*
**
***
****
*****
(D)
*****
****
***
**
*
(E)
*****
****
***
**
*

Jawab

Untuk algoritma tadi menggunakan nested loop sebanyak dua kali. Loop pertama untuk menunjukkan jumlah i, yang kedua menggunakan loop untuk mencetak lingkaran sebanyak 5-i sampai 1.

Dalam loop pertama dimasukkan nilai i adalah 1 sampai dengan 4, maka kemungkinan hasil yang tercetak adalah dari besar menurun sampai ke yang paling kecil. Jawaban yang tepat adalah (D).

60. Perhatikan program berikut
type ari = array[1..5] of byte ;
var x : ari ;
var i : byte;
……………….
for i := 1 to 5 do x[i] := 10 div i ;
for i := 4 downto 1 do x[5] := x[5] + x[i] ;
writeln( x[5] ) ;
Berapakah output yang dihasilkan program
tersebut :
(A) 22.8
(B) 5
(C) 20.8
(D) 20
(E) 22

Jawab

Soal ini mulai pake array, salah satu materi yang sepenuhnya belum gw kuasai :D. Oke, langsung saja. Di program ini ada sedikit bug menurut gw, untuk type sebenernya tidak perlu dimasukkan. Padahal bisa langsung didefinisikan dengan var x:=array[1..5] of integer;.

Oke, menggunakan looping (lagi). Looping pertama untuk memasukkan nilai array dari x[i] yang berupa nilai dari 10 div i. Maksud dari operasi div adalah pembagian yang dibulatkan ke bilangan bulat. Setelah looping pertama, looping kedua untuk menjumlahkan bilangan x yang berada di array ke 5 dijumlahkan dengan x array bilangan-bilangan keempat, ketiga, sampai kesatu.

x[5] bernilai 2, jika dijumlahkan dengan 2,3,5,10 (nilai x[4]..x[1]), maka akan ketemu jawaban (E).

Joomla vs WordPress : Plus and Minus

joomla-vs-wordpress-logo

Udah lama gak pernah lagi ngotak ngatik Joomla! dan WordPress karena lebih fokus ke OSK dan tokilearning. Dan pada suatu hari saya mendapatkan 2 project website. Oke, yang satu website forum fanbase, dan satunya lagi website organisasi. Karena ingin tidak hanya stuck ke satu CMS aja (yup, saya ngerjainnya pake CMS untuk mempersingkat waktu dan meningkatkan keamanan website), maka saya menggunakan dua CMS, yaitu Joomla! dan WordPress.

Hitung-hitung jadi flashback lagi, karena terakhir make Joomla! pas kelas 8 SMP (waktu itu ngurus website pramuka SMP) dan terakhir make WordPress (CMS) itu pas kelas 8 juga, iseng bikin blog pribadi pake domain [dot]co[dot]cc. Tua banget deh rasanya, ga nyadar Joomla! udah nyampe versi 3.0 dan WordPress udah nyampe versi 3.5.

Setelah 2 minggu mengerjakan, saya menemukan plus dan minus dari dua CMS tersebut.

Mulai dari Joomla! terlebih dahulu.

Kelebihan :

-Batasan size untuk mengupload plugin lumayan besar.
-Keamanannya terjaga banget.
-Mudah untuk diedit templatenya
-Pluginnya bervariasi

Kekurangan :

-Tidak semua template cocok untuk joomla versi yang kamu pakai. Contohnya template a, bisa saja cocoknya hanya untuk Joomla! 3.0 dan 2.5, tetapi TIDAK untuk versi 1.5
-Plugin pun seperti itu
-WYSIWYG awalnya kurang bagus, jadi harus searching dulu yang cocok.
-Masih kurang dalam upload image
-Karena fiturnya banyak, jadi agak ribet menunya.

Lalu WordPress.

Kelebihan :

-Menunya simpel, ga ribet.
-SEO Friendly.
-Templatenya bervariasi, ga bergantung kepada versi wordpressnya.
-Untuk upload image sangat mudah,ga kaya joomla!
-dan lainnya..

Kekurangan :

-batasan upload plugin hanya 2 MB, kalo mau lebih harus edit .htacess nya dulu
-kalo download theme dari luar, menu pengaturannya ribet.
-dan lainnya..

Mungkin kalo kalian mau nyoba, bisa dicoba dari sekarang, siapa tahu bisa nemu kekurangan atau kelebihannya lagi 😀