Skip to content

Instantly share code, notes, and snippets.

@ianmustafa
Last active June 1, 2021 02:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ianmustafa/c1f975bb33cb9a595fa36a1319440f04 to your computer and use it in GitHub Desktop.
Save ianmustafa/c1f975bb33cb9a595fa36a1319440f04 to your computer and use it in GitHub Desktop.
Tantangan PHP Indonesia for Student: Cari Bilangan Duplikat dalam List

Tantangan PHP Indonesia for Student: Cari Bilangan Duplikat dalam List

Sebelumnya, terima kasih kepada om Nur Hidayat (@hidayat365, Pojok Programmer) untuk tantangannya di grup Telegram PHP Indonesia for Students. Tantangan ini saya kerjakan karena iseng dan nungguin deploy app. πŸ˜‚

Latar Belakang

Misalkan kita mempunyai list berisikan bilangan bulat antara 1 sampai n sebanyak n + 1 angka. Yang pasti kita ketahui adalah minimal ada satu bilangan yang duplikat dalam list tersebut.

Contohnya jika n = 3 maka bisa jadi isi List tersebut adalah 3, 1, 1, 3 atau bisa juga 1, 2, 3, 3.

Tugas

Cari bilangan duplikat dalam list tersebut.

Ketentuan

  • Cukup satu bilangan saja, jadi untuk contoh diatas, jawabannya boleh 1 atau 3.
  • n boleh berupa konstanta atau input dari user. (Disini saya pilih input dari user)
  • Isi list boleh generate pakai random.

Sedikit Curhat

Solusi ini hanya bisa solving hingga n sebesar sejutaan. Diatas itu rawan terjadi
memory limit. Mungkin lain kali akan saya improve (kalau ada yang request). 😊

Ada pertanyaan?

Silakan hubungi saya via Facebook @iianmustafa, Twitter @iianmustafa atau Telegram @ianmustafa.

<?php
// Kita ambil nilai n dulu
$n = readline('Masukkan nilai n [5]: ');
// Jika tidak diisi, kita set n = 5 secara default
$n = $n === '' ? 5 : $n;
$break = false;
// Disini masalahnya, rawan terjadi memory limit ketika
// n terlalu besar
foreach (range(0, $n) as $a)
$list[] = rand(0, 9);
// Disini ktai buat pengecekan
foreach ($list as $i => $x) {
// Simpan angka dari urutan bersangkutan ke $temp
$temp = $x;
// Lalu cek dalam list apakah ada angka yang sama
foreach ($list as $j => $y) {
// Jika angka yang sama ditemukan DAN tidak berada
// di posisi yang sama, hentikan loop dan simpan
// angka tersebut untuk output
if ($i !== $j && $temp === $y) {
$duplicate = $temp;
// Set $break ke true untuk menghentikan loop
$break = true;
// Break 😊
if ($break) break;
}
}
// Break 😊
if ($break) break;
}
// Output πŸ‘
echo 'List: ' . implode(', ', $list) . "\n";
// Untuk pengguna PHP < 7, gunakan kode berikut: isset($duplicate) ? $duplicate : 'tidak ada'
echo 'Nomor kembar: ' . ($duplicate ?? 'tidak ada') . "\n";
// Yay πŸŽ‰
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment