Pengalaman Tes Kerja di Bukalapak

Di bulan-bulan terakhir tahun 2018 aku dihubungi salah satu Headhunter berbasis di Bandung, GeekHunter. Kayaknya aku sudah terdaftar di sana sejak 2014, seingetku mereka mengkontakku dari LinkedIn. Tapi belum pernah cocok karena aku memang hanya mau ambil kerjaan di Surabaya, sementara lowongan yang mereka tawarkan sekitaran Jakarta, padahal tawaran gajinya istimewa sekali.

Perwalikan GeekHunter itu, sebut saja Jes, mengabari kalau Bukalapak sedang membuka cabang pengembangan atau apa gitu di Surabaya. Jes menyuruhku memperbarui CV yang pernah kukirim. Dan menunggu email lanjutannya.

Beberapa hari kemudian aku mendapatkan jadwal tes onlinenya. Tes onlinenya memakai codility.com, sebuah platform test programming, mostly, tentang algoritma dan logika. Soalnya “hanya” tiga dan dibatasi waktu 90 menit. Bagusnya di codility (atau bukalapak yang menentukan ya?) disediakan berbagai pilihan bahasa untuk menjawab pertanyaannya. Aku sendiri karena sering pakai PHP maka memilih bahasa tersebut. Dan bisa langsung bisa dijalankan sehingga kita tau benar atau salah jawaban kita.

Berikut ini soal dan jawaban yang aku dapat saat tes.

Soal 1

soalnya kurang lebih tentang format string angka, di mana, angkanya dikelompokkan maksimal 3 dan minimal 2. Berikut jawabannya yang kupisah dengan 2 fungsi biar lebih mudah membacanya.

function solution1($S) {
    $S = preg_replace('/\D/', '', $S); // filter string dan ambil angka saja.
    $length = strlen($S); // hitung panjang string
    $S = sliceAndMerge($S, $length);
    return $S;
}

function sliceAndMerge($S, $length){
    $formatted = '';
    $last2block = $length % 3 === 1 ? true : false; //apakah habis dibagi 3    
    for($i = 1; $i <= $length; $i++){
        $formatted .= $S[$i-1];
        if($last2block && $length-$i == 2){ //jika tidak habis dibagi 3 maka 2
            $formatted .= '-';
        }elseif($i % 3 === 0 && $i !== $length && $length-$i != 1){
            $formatted .= '-';
        }
    }
    return $formatted;
}

Soal 2

Dari suatu array yang diberikan, kita mencari slice terpanjang yang hanya berisi 1-2 angka (bi-value). Contoh di atas slice (0,3) karena hanya berisi angka 4 dan 5. Panjang slice (0,3) adalah 4.

function solution2($A) {
   $length = count($A);
   $bestLength = 0;
   for($i=0; $i < $length; $i++){
        $cekA = $A;     
        for($j=1; $j <= $length; $j++){   
            $sliced = array_slice($cekA, $i, $j);
            $cekLength = count($sliced);
            $unik = array_unique($sliced);
            $unikLength = count($unik);
            if($unikLength <= 2 && $cekLength > $bestLength){
                $bestLength = $cekLength;
            }
        }
   }
   return $bestLength;

Soal 3

Ini adalah soal paling pendek tapi jawabannya paling panjang hha. Jadi kita dikasih bilangan N, kita harus mengenerate array yang berjumlah N yang berbeda dan jika ditotal nilainya 0.

class genArray
{
    private $arr = [];
    private $N = 0;
    function __construct($N)
    {
      $this->N = $N;
    }
    public function xgenArray()
    {
        for($i = 0; $i < $this->N ; $i++){
            $this->arr[] = $this->getUnik();
            if($i === $this->N - 2){
                $sum = array_sum($this->arr);
                $item = $sum * (-1);
                if (in_array($item, $this->arr)) {
                    $this->arr = [];
                    $this->xgenArray();
                } else {
                    $this->arr[] = $item;
                    break;
                }
            }
        }
        return $this->arr;

    }

    function getUnik()
    {
        $randomUnik = random_int (($this->N*-1),  $this->N);
        if (in_array($randomUnik, $this->arr)) {
            $kodeUnik = $this->getUnik();
        } else {
            $kodeUnik = $randomUnik;
        }
        return $kodeUnik;
    }
}

function solution3($N) {
    $arr = new genArray($N);
    return $arr->xgenArray();
}

Saking ribetnya aku harus bikin class. Dan sayangnya ini yang bikin gagal tes wkwk. Karena meskipun sudah menemukan jawaban yang tepat, aku telat meng-copy jawaban tersebut ke codility.com saat waktu yang disediakan habis. Setelah itu aku buru-buru kirim email ke perwakilan Bukalapak yang mengirimi soal tes. Tapi sepertinya karena memang telat ya sudah, aku anggap memang sudah bukan rejeki.

Beberapa hari kemudian, Jes mengonfirmasi kalau aku memang gagal tes. haha. Dan seperti biasa, Jes menawariku untuk kerja di Jakarta saja, karena kesempatannya lebih banyak. Tapi aku tetap begeming, wqwq.

Leave a Comment

Your email address will not be published. Required fields are marked *