Pembahasan Soal WIFI Utama 2013

bannerr

Lama gak nulis pembahasan, jadi pengen nulis ini lagi sekarang. Nama kontesnya yaitu WIFI Utama 2013, yang diselenggarakan oleh Universitas Widyatama. Ini salah satu kontes yang bikin kesel, karena saya salah belajar materi. Dibilangnya materi yang keluar aritmatika, ternyata hampir 100% materi yang keluar operasi string semua yang mana waktu itu saya belum belajar string sama sekali -_-

Makanya pas itu skor saya 0, ditambah waktu itu saya lagi migrasi dari Pascal ke C++, jadi pas itu codingnya masih setengah-setengah antara Pascal dan C++, kacau dah. Tapi sekarang saya otak-atik lagi soalnya, dan mau ditulis pembahasannya sekarang, mungkin mau balas dendam tahun depan buat ngejar juara 1 lagi,hehe, amin.

Soal bisa didownload disini

Pembahasan :

1. LalalaYeyeyeAllayYee

Inti dari soal ini menghitung jumlah huruf besar dan huruf kecil pada suatu string. Waktu kontes, solusi yang saya pikirkan yaitu membuat array ‘A’-‘Z’ dan ‘a’-‘z’, tetapi tidak optimal. Solusi sederhananya yaitu melalui perbandingan nilai ASCII nya. Nilai ASCII huruf a-z yaitu 97-122 dan A-Z yaitu 65-90. Pokoknya kalo ASCII nya antara segitu, langsung increment jumlah besar atau kecilnya.

Untuk yang biasa pake library <iostream> di C++, jangan menggunakan cin >>. Karena cin >> hanya membaca satu string tanpa spasi. Jadi setelah spasi akan dianggap sebagai null.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int n;
	cin >> n;
	string a;
	getline(cin,a);
	for (int i=0;i<n;i++) {
		string s;
		getline(cin,s);
		int kecil=0,besar=0;
		for (int j=0;j<s.length();j++) {
			if ((int)s[j]>=97 && (int)s[j]<=122) kecil++;
			else if ((int)s[j]>=65 && (int)s[j]<=90) besar++;
			}
		cout << besar << " " << kecil << endl;
		}
	}

2. Kata yang ditukar

(skipped for a moment :p)

3. Bolak-Balik, Aku Maju, Kamu Mundur.

(skipped for a moment :p)

4. ++2

Inti dari program ini adalah mengubah suatu huruf menjadi 2 di depannya. Misal A jadi C, a jadi c, dan sebagainya. Tapi jika membaca soal lebih teliti, huruf yang diubah hanyalah huruf dengan indeks genap (indeks dimulai dari 0). Solusinya adalah dengan mencari ASCII dari huruf itu, lalu ditambah 2, dan dijadikan huruf lagi.

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

5. StZ

Solusinya brute force aja, pokoknya kalo nilai a ditambah b dikurang c sama dengan 0, tulis aja.

#include <iostream>
using namespace std;
int main() {
	int n,count=0;;
	cin >> n;
	for (int i=0;i<n;i++) {
		int arr[3];
		cin >> arr[0] >> arr[1] >> arr[2];
		cout << arr[0] << " + " << 0 << " - " << arr[0] << " = " << 0 << endl;
		count++;
			if (arr[0]+arr[1]-arr[2]==0 && arr[0]!=0 && arr[1]!=0 && arr[2]!=0) {
				cout << arr[0] << " + " << arr[1] << " - " << arr[2] << " = " << 0 << endl;
				count++;
			}
			cout << arr[0] << " + " << 0 << " - " << arr[0] << " = " << 0 << endl;
			count++;
		}
		cout << count;
	}

~~~

Oh iya, sebelumnya thanks buat salah satu peserta WIFI 2013, Benget Immanuel Nata yang berbaik hati mengajarkan saya soal nomor 1, dan membuka pengetahuan saya tentang ASCII, hehe.

Yak sekian pembahasan saya kali ini, semoga bermanfaat. Tidak terasa sebentar lagi Compfest 2013, doakan semoga saya dapat hasil yang terbaik, amin😀

One thought on “Pembahasan Soal WIFI Utama 2013

Leave a Reply

Please log in using one of these methods to post your comment:

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