Title : Kupas Tuntas Challenges "Rekrutmen Bank Jateng" Part 1 - Cara Legal
Released : 2016-02-11 02:01:50 -0500
Viewed : 1569

Sebenarnya artikel ini pengen ditulis setelah deadline penerimaan dari Bank Jateng yang "berbau" challenges ini selesai. Tapi kayaknya udah banyak yang berhasil deh. Jadi kalo codingannya dishare sekarang pun sudah menjadi "Rahasia Publik", dan kalo disharenya nanti, malah bisa jadi udah basi sebelum berperang :D

Challenges dari cara "Rekrutmen" pegawai di bidang IT ini adalah menyelesaikan soal yang diberikan dalam bentuk codingan yang masih mentah. Contohnya bisa dilihat pada gambar diatas. Atau mari kita hurufkan :p

var z="Nomor KTP";
var x=array();
var j=0;
var k=0;
for(i=0;i<strlen(z);i++){
	if(j>=4){
		if(k<4){
			x[i]=z[i-4];
			k++;
		}
		else{
			x[i]=z[i+4];
			j=0;
			k=0;
		}
	}
	else x[i]=z[i+4];
	j++;
}

Melihat sintaks-sintaksnya, ini kayak setengah javascript, setengah PHP. Karena ada fungsi strlen() disana, mari kita anggap sintaks diatas adalah PHP (walaupun di php gak ada var :p). Yarp, pertama kita porting terlebih dahulu code diatas menjadi PHP:

<?php
$z="1122334455667788";
$x=array();
$j=0;
$k=0;
for($i=0;$i<strlen($z);$i++){
	if($j>=4){
		if($k<4){
			$x[$i]=substr($z,$i-4,1);
			$k++;
		} else {
			$x[$i]=substr($z,$i+4,1);
			$j=0;
			$k=0;
		}
	} else {
		$x[$i]=substr($z,$i+4,1);
		$j++;
	}
}
echo "\n";
echo implode('',$x);

Execute! dan hasilnya "334411227788566" dan submit. dan hasilnya "Salah!" :D

Yarp, mari kita bandingkan hasil antara input dan outputnya:

1122334455667788
334411227788566

Apa yang beda? Yarp, jumlah karakter output kurang 1 digit. Euhm, mari kita lihat output dari array $x sebelum di implode().

Array
(
    [0] => 3
    [1] => 3
    [2] => 4
    [3] => 4
    [4] => 1
    [5] => 1
    [6] => 2
    [7] => 2
    [8] => 7
    [9] => 7
    [10] => 8
    [11] => 8
    [12] =>
    [13] => 5
    [14] => 6
    [15] => 6
)

Nah loh, index ke-12 missing. Mari kita lihat index ke-12 berada pada kondisi apa?

0. 1 j=0; k=0
1. 1 j=1; k=0
2. 2 j=2; k=0
3. 2 j=3; k=0
4. 3 j=4; k=0
5. 3 j=4; k=1
6. 4 j=4; k=2
7. 4 j=4; k=3
8. 5 j=4; k=4
9. 5 j=0; k=0
10. 6 j=1; k=0
11. 6 j=2; k=0
12. 7 j=3; k=0
13. 7 j=4; k=0
14. 8 j=4; k=1
15. 8 j=4; k=2

[12] j=3; k=0;

Perhatikan aturan "KONDISI" pada soal

KONDISI 1
if(j>=4) Jika "j" lebih dari atau sama dengan 4

KONDISI 2
if(k<4) Jika "k" kurang dari 4

KONDISI 3
if(k>=4) Jika "k" lebih dari atau sama dengan 4

KONDISI 4
if(j<4) Jika "j" kurang dari 4

dan jika "j" = 3 dan "k" = 0, maka index ke-12 berada pada KONDISI 4 dan akan mengabaikan "k=0" pada KONDISI 2.

Pada KONDISI 4 ini berarti index ke-12 adalah

x[i]=z[i+4]
x[12] = z[12+4]

berarti index ke-12 adalah huruf ke-16 dari "Nomor KTP" yang kita inputkan. Tapi? Yarp, tidak ada digit dengan index ke-16 jika kita memulai index dari 0. Perhatikan masing-masing index "Nomor KTP" yang kita inputkan:

0 1 2 3 4 5 6 7 8 9 10	11	12	13	14	15
1 1 2 2 3 3 4 4 5 5 6 	6 	7 	7 	8 	8

See? Tidak ada index ke-16. Itulah kenapa array diatas menampilkan EMPTY STRING yang mengakibatkan jumlah digit output kurang 1.

Entahlah dengan bahasa pemrograman lain, tapi di PHP fungsi substr() pada sintaks x[i]=z[i+4] atau $x[$i]=substr($z,$i+4,1) akan menghasilkan EMPTY STRING.

Kembali ke prasangka awal, jangan-jangan soal ini ditulis menggunakan JavaScript. Kali aja fungsi semacam substr() dengan mengambil karakter ke-n yang melebihi jumlah string akan menghasilkan sesuatu. So, kita porting kembali alur logika gambar diatas dengan JavaScript code:

var z="1122334455667788";
var x=[];
var j=0;
var k=0;
for(i=0;i<z.length;i++){
	if(j>=4){
		if(k<4){
			x[i]=z[i-4];
			k++;
		} else {
			x[i]=z[i+4];
			j=0;
			k=0;
		}
	} else {
		x[i]=z[i+4];
		j++;
	}
}
console.log(x.join(""));

Dan eh, hasilnya sama aja dengan PHP. Euhm, baiklah mari kita coba substr() dengan ruby, kali aja nemu sesuatu

#!/usr/bin/ruby

str="abcd"
p str[4]

Nil

Heuheu... udah pake 3 bahasa pemrograman tetep aja gak nemu hasilnya. Tapi kalo kita "submit" disistem rekruitmen dan aplikasi bisa mendeteksi otomatis, berarti memang codingannya ada. Dan entah bahasa pemrograman apa yang mereka pake, dan dengan asumsi kalo "output" karakter dari index ke-n diluar jumlah karakter kemungkinan akan menghasilkan index ke-0 atau index ke-terakhir, jadi kita tambahkan saja codingan kita dengan me-replace index ke-12 dengan index ke-0 atau index ke-15.

var z="1122334455667788";
var x=[];
var j=0;
var k=0;
for(i=0;i<z.length;i++){
	if(j>=4){
		if(k<4){
			x[i]=z[i-4];
			k++;
		} else {
			x[i]=z[i+4];
			j=0;
			k=0;
		}
	} else {
		x[i]=z[i+4];
		j++;
	}
}
x[12]=z[0];
console.log(x.join(""));

Output: 3344112277881566

Submit!

dan tara...

Tapi masih penasaran nih sama codingan teman-teman lain yang berhasil lolos. Share yuk dikomentar :)