Terlalu realistis, melupakan mimpi

Percakapan ketika kecil,

“Nak, kamu kalau sudah besar mau jadi apa?”

“Mau jadi dokter, bu!”

Percakapan saat menjelang kuliah,

“Kamu mau kuliah dimana, nak?”

“Ambil sastra aja kayaknya. Aku mau kedokteran, cuma passing gradenya tinggi.”

Ketika mengingat kembali masa-masa kecil kita, rasanya keren ya bisa ngomong cita-cita pas gedenya tanpa ada beban. Lu bebas mau ngomong apapun cita-cita lu, karena kepolosan masa kecil dulu. Semakin kesana dan kesana, dari TK ke SD, SD ke SMP, SMP ke SMA, dan menjelang lulus SMA mendadak ambisi itu mulai luntur dengan berbagai pemikiran yang memberatkan.

“Passing gradenya tinggi..”

“Rangking gua di kelas gak tinggi-tinggi amet bro”

Dua alasan itu yang umumnya dikeluarkan oleh kita yang sempat merasa tidak pede saat memilih jurusan.

Tadi sewaktu di perjalanan ke Bekasi, terdengar ucapan yang lumayan membuat gua berpikir, yaitu : “Dulu anak diterima di ITB itu bisa dibilang prestasi. Tapi sekarang anak diterima di ITB tuh biasa karena jalurnya banyak”.

Kesimpulan : Banyak jalan menuju Roma bro!

Meskipun gua masih kelas 11, gua udah mulai bikin planning jurusan dari sekarang. Menurut gua, kuliah dimanapun jadi asalkan jurusannya sesuai dengan minat kita. Banyak orang yang masih memiliki mindset, “Kuliah jurusan apa aja yang penting disitu tempatnya”.  Mari kita ubah mindset kita. Mau swasta atau negeri, mau UI atau ITB, mau Binus atau Telkom, pilih yang jurusannya lu minati, bukan tempatnya yang keren atau terpamor se-Indonesia.

“Bro, gua mau masuk FK UI/STEI ITB, tapi nilai rapot gua kecil dan rangking gua rendah banget di kelas. Gua harus gimana?”

Jalur masuk gak cuma SNMPTN kan? Masih ada SBMPTN. Dan untuk UI pun ada jalur SIMAK juga. Bahkan kalo lu berprestasi di kejuaraan nasional/internasional semacam OSN atau Ipho, bisa jadi poin lebih buat diterima disana.

Ayo kawan, semangat buat terus mengejar mimpi kita! 😀

Tantangan di Semester 2

Sekian lamanya gak update di blog ini, dan di postingan ini kembali gua ‘Say Hello’ ke pembaca yang masih setia buka blog ini :). Walaupun blog ini sekarang gak jelas tujuannya nulis apa, baik cerpen, pembahasan soal programming, dan hal lainnya campur aduk semua di blog ini dan gak tertata dengan baik.

Tapi tak apa, namanya juga pemikiran manusia. Kadang berubah-rubah, ya gak? *lho

Itu tadi pembukaan yang kurang baik, maaf. Oke lanjut.

Semester 2 ini banyak liburnya! Emang sih buat siswa-siswi kelas 1 dan 2 masih punya kesempatan menikmati surga ini, terutama siswa sekolah negeri (dari jaman SMP sampai SMA suka kecipratan rezeki ini terus). Tapi hal ini jadi tantangan juga, karena ini artinya lu harus berjuang biar gak ketinggalan pelajaran. Coba bayangkan, misalkan lu libur 1 minggu, dan dalam satu hari ada 6 materi pelajaran. Berarti selama liburan lu udah kehilangan sekitar 36 materi pelajaran! Ya beda sih sama yang bimbel yang tentunya bisa mempelajari pelajaran yang ketinggalan itu di tempat bimbelnya, tapi bagaimana untuk yang gak bimbel?

Pilihannya ada dua : Antara lu mau nyicil hari ini dengan belajar sedikit, atau lu kebutin belajar semua pelajaran yang tertinggal di H-1 sebelum masuk sekolah lagi.

Benar-benar berupa tantangan. Belum yang sekarang SMA, banyak libur termasuk tantangan juga, karena berarti rawan sekali dengan nilai-nilai tugas yang kosong. Padahal rata-rata nilai rapot yang konsisten merupakan salah satu faktor utama pendukung sukses di jalur SNMPTN.

Jangan mager yuk, buka buku lu sekarang, dan mulai kejar materi yang tertinggal selama liburan! 😀

2013 selesai, 2014 muncul, apa yang ingin kau capai?

2013 telah berakhir, dan muncullah 2014! Satu tahun umur kita telah berkurang, dan satu tahun telah kita lalui. Tentunya banyak target-target 2013 kita yang sudah kita dapatkan, dan kemungkinan terburuknya belum kita dapatkan atau tidak kita dapatkan. Tidak apa, apabila belum dapat, berarti masih ada di kesempatan lainnya. Tetapi apabila tidak dapat, carilah target lain di 2014 dan dapatkan!

Apabila kita sudah mendapatkan target kita, ataupun tidak mendapatkannya, tentunya kita harus menggantinya dengan resolusi-resolusi lainnya yang baru di 2014 ini. Siapkan juga strategi-strategi untuk mendapatkannya. Meskipun mimpi berada 5 cm di atas kita, tetapi apabila tanpa usaha, tetap saja mimpi itu berada 5 cm diatas kita dan tidak datang menghampiri kita.

Sebelum menentukan target kita, marilah kita terlebih dahulu bersyukur karena masih dikasih hidup hingga hari ini. Jika kita bersyukur, maka akan menambah semangat kita untuk mendapatkan resolusi-resolusi kita di tahun ini.

Apapun target kita, apapun resolusi kita, ayo kejar asalkan itu baik. Yuk, berusaha kejar target kita di tahun ini! 🙂

Mengubah String menjadi Integer di C++

Iseng googling tentang ini, ternyata artikel tentang mengubah string ke integer di C++ tidak ada yang berbahasa Indonesia. Karena itu saya akan menuliskannya kali ini.

Berbeda dengan Pascal yang cukup menuliskan val(), dalam C++ mengubah nilai string menjadi integer membutuhkan beberapa library, yaitu :

  • <cstring> = untuk mengaktifkan fungsi .c_str()
  • <cstdlib> = untuk mengaktifkan fungsi atoi()

Nah, atoi() inilah sintaks utama untuk mengubah string menjadi integer. Untuk mengubah char atau satu karakter, cukup ketikkan atoi(variabel_string.c_str());. Implementasinya :

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main() {
	string a="1234"; //string a bernilai 1234
	int aa=atoi(a.c_str()); //mengubah string a menjadi integer,lalu ditampung di variabel integer aa
	cout << aa << endl; //1234
	cout << aa*2 << endl; //aa x 2 = 2468
	}

Sekian dari postingan ini, semoga bermanfaat 😀

Referensi

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 😀

Rajin.. (Cerita 7)

Roro sontak menengok karena ada yang tiba-tiba memanggilnya dan menawarkan bantuan. Kaget juga, sepagi ini ada aja yang sudah datang ke sekolah.

“Boleh deh, itu tolong gantungin snack-snack ke atas itu ya!” kata Roro.

“Oke sip” balas Dika.

Setengah enam pagi jelas pagi sekali untuk sekolah macam itu. Jam masuk saja jam 7 pagi, maka siswa jam setengah 6 aneh sekali, kecuali Roro karena ia memang membantu ibunya menyiapkan dagangan di sekolah. Tapi Dika?!

“Lo kok datengnya pagi banget? Bel masuk aja jam 7, rajin banget” kata Roro.

“Eng.. itu, bukan apa-apa kok, udah biasa dateng jam segini. Oh iya, ngomong-ngomong gua belum tahu nama lo, lo siapa? Gua Dika!” kata Dika mengalihkan pembicaraan dan mengajaknya berkenalan. Ia tak mungkin bercerita tentang rencana date-nya dengan Syifa yang gagal total dan dia datang pagi-pagi karena ingin menenangkan diri.

“Serius? Gua setiap hari dateng jam segini buat bantu siapin dagangan ibu gua, dan gua rasa anak-anak sekolah gak ada yang dateng jam segini” kata Roro tidak percaya, tanpa balas mengenalkan diri.

“Ah, gua juga biasa dateng jam segini kali, tapi langsung ke kelas. Gak ke kantin dulu,haha” kata Dika terus ngeles.

“Gak gak, udah lupain,hehe. Oh iya, nama gua Roro!”

“Roro? Roro Jonggrang? Kok bisa kabur ke sekolah ini ya?”

“Wah kampret lo, baru kenalan udah ngeledek aja” kata Roro sambil melempar bungkusan snack ke muka Dika.

“Bercanda doang kok,hehe. Oh iya, ngomong-ngomong lo dateng sepagi ini, apa gak keteteran tuh sama pr-pr? Sekolah ini kan pr-nya parahnya naudzubillah deh, kalo ketinggalan satu pr aja bakal keteteran sama pr yang estafet datengnya.” tanya Dika.

“Gak kok, sama sekali gak kesulitan kok. Gua sih nyantai aja kalo ada pr yang dateng.” kata Roro.

“Wah serius? Masa gua males banget sama pr. Bawaannya kalo ada pr, langsung pengen tidur”

“Nah itu yang salah. Kalo gua sih, kalo dikasih satu pr langsung dikerjain saat itu juga gak pake ditunda-tunda, biar gak numpuk juga.” kata Roro.

“Hmm bener juga.” kata Dika.

Hmm, benar juga. Kadang kita suka menumpuk-menumpuk tugas, dan ketika sudah mendekati batas, kita keteteran untuk menghadapinya. Sebenarnya sebanyak apapun tugas, sebanyak apapun pr yang dikasih itu tidak akan terasa berat apabila langsung dikerjakan pada saat itu juga dan tidak ditumpuk-tumpuk. Benar juga.

Handphone Dika tiba-tiba bergetar. Siapa nih? pikir Dika. Karena sedang asyik mengobrol, sontak panggilan di handphonenya langsung ia tutup. Ganggu orang ngobrol aja, pikirnya.

“Wah gak kerasa udah kelar nih. Makasih ya udah bantu-bantu” kata Roro.

“Sama-sama, gua cabut ke kelas dulu ya.”

Di tempat lain, Syifa masih terbingung sendirian, “Duh, Dika masih marah sama gua ya? Kenapa gak diangkat?!”

Satu Orang Baru (Cerita 6)

Gadis berkedudung itu datang pagi-pagi. Bukan karena dia rajin, dan bukan karena dia memang suka berangkat pagi-pagi. Setibanya di sekolah, dia tidak langsung menuju ke kelas, tetapi ke kantin terlebih dahulu. Tidak, tidak berarti dia belum sarapan ketika di rumah, dan tidak juga karena dia malas ke kelas.

“Ibu, ini aku udah bawa bungkusan-bungkusan makanannya”

“Oh iya nduk, taruh saja di meja itu. Kamu tolong bantu tata meja ini ya.”

Ternyata itu ibunya. Gadis berkerudung yang rajin sekali berangkat ke sekolah pagi subuh, ternyata untuk membantu ibunya menyiapkan dagangan di kantin sekolahnya. Dia termasuk murid yang cerdas, beruntung sekali dia bisa bersekolah di sekolah yang katanya ‘susah sekali masuknya’, dan mendapat beasiswa secara langsung dari pihak sekolah.

Roro.. nama gadis itu, teringat akan perkataan kepala sekolah kepadanya, “Kamu itu pintar, kamu itu cerdas, kemauan kamu itu kuat, jangan sampai karena masalah biaya kamu jadi kehilangan segalanya, ya nak”

Beberapa menit kemudian, datanglah lelaki itu. Seperti biasa, rambutnya kusut, baju dikeluarkan. Tetapi kali ini beda, ia jauh lebih kusut dan pakaiannya jauh lebih kacau dari sebelumnya. Mungkin karena pertemuannya yang hampir sedikit lagi dengan orang itu, sedikit lagi, tapi ternyata gagal.

“Bener-bener ga mood, ke kantin dulu ah” pikirnya.

Setibanya di kantin, ia melihat sesosok gadis berkerudung, itu. Sontak ia kaget. Pikirnya, biasanya dia yang paling pagi datang ke sekolah, ternyata ada lagi orang lain yang datang jauh lebih pagi darinya. Dika melihat gadis itu sedang menata meja dengan makanan-makanan ringan yang masih berceceran di meja.

“Eh, maaf, ada yang bisa gua bantu gak?”