Hari ini kita akan berbicara tentang jenis masalah sederhana, masalah “ad hoc”.
Tujuan
Tujuan Anda adalah mengenal beberapa jenis masalah yang muncul, dan beberapa hal yang ingin Anda ingat ketika menyelesaikannya. Ada beberapa poin penting yang bisa Anda pelajari dari menyelesaikan masalah ini.
Apa itu Masalah Ad-Hoc?
Ketika kami mengatakan “ad hoc”, kami biasanya berarti bahwa Anda tidak perlu menerapkan algoritma yang canggih untuk menyelesaikan masalah; alih-alih Anda akan menulis sesuatu yang spesifik untuk masalah yang dihadapi. Seringkali masalah ini melibatkan simulasi permainan atau pemodelan semacam proses. Banyak dari masalah ini akan terasa seperti “ikuti saja petunjuknya”.
Apa yang dapat membuat masalah ini menantang adalah bahwa edge case nya bisa sangat rumit.
Ada banyak jenis masalah ad-hoc, beberapa di antaranya memang melibatkan lebih banyak pengetahuan algoritmik, tetapi hari ini kita akan berbicara tentang empat kategori dasar. Itu adalah permainan, simulasi, string dan yang lainnya.
Permainan
Permainan kartu
Satu jenis masalah akan melibatkan penggunaan kartu bermain, terutama poker dan varian lainnya.
Jika Anda tidak terbiasa dengan kartu, mereka memiliki dua fitur yang menarik. Yang pertama adalah simbol mereka. Mereka berfungsi sedikit seperti warna, kecuali mereka memiliki simbol untuk mewakili mereka. Keempat simbol itu adalah hati, berlian, keriting (yang menggunakan simbol seperti semanggi), dan sekop (semacam sekop runcing dengan ujung runcing mengarah ke atas).
Fitur kedua adalah peringkat mereka, atau nilai mereka. Ada angka dari 2 hingga 10, kartu “Ace” yang bisa menjadi “1” kecuali menggunakan huruf A sebagai gantinya, dan tiga kartu “royalti” Jack, Queen, dan King.
Beberapa sistem juga memiliki kartu yang disebut Joker, dan biasanya tidak memiliki simbol. Tergantung pada gimnya, Ace adalah kartu dengan nilai tertinggi atau terendah.
Masalah-masalah ini menarik karena kombinasi kartu dan kartu membuat pasangan, dan ada banyak cara untuk menentukan peringkat kartu individu maupun kombinasi kartu. Ini dapat menyebabkan masalah simulasi, serta masalah kombinatorial.
Hampir selalu, pemecah masalah tidak akan membuat asumsi besar tentang permainan kartu apa yang Anda ketahui, tetapi Anda mungkin akan terbantu untuk membaca aturan permainan seperti 5 Card Draw Poker, karena jenis kombinasi kartu yang terjadi hampir dianggap sebagai pengetahuan umum. . Ini daftar untuk memulai.
Catur
Aturan catur hampir merupakan pengetahuan umum juga, dan kadang-kadang ada masalah yang mengasumsikan Anda tahu aturan dan bagaimana bidak bergerak. Ksatria, khususnya, muncul dalam banyak masalah. Saya tidak akan membahas peraturan di sini, karena kemungkinan besar Anda sudah mengetahuinya. Tetapi jika Anda belum terpapar Catur, ada baiknya luangkan waktu beberapa menit untuk mempelajari aturan sehingga mereka tampak akrab ketika masalah muncul.
Sekali lagi, biasanya pembuat masalah akan menjelaskan aturan yang relevan dengan masalah tersebut, tetapi akan lebih cepat bagi Anda jika Anda terbiasa dengan permainan.
String dan semacamnya
String
Ada banyak masalah manipulasi string dan algoritma yang menarik, tetapi dua tipe masalah string sederhana melibatkan anagram dan palindrom. Anagram adalah penyusunan ulang kata atau kalimat untuk membentuk yang lain. Sebagai contoh, rekaman terbaru untuk acara “Doctor Who” diberi label dengan anagram “Torchwood” untuk mencegah orang mencuri mereka. Palindrome hanyalah sebuah kata yang dieja sama maju dan mundur, seperti contoh kalimat “Nyonya, aku Adam”. Satu hal yang rumit dengan palindrom adalah bahwa kita sering tidak menganggap tanda baca atau spasi sebagai bagian dari palindrom, jadi membalikkan string mungkin tidak cukup.
Tanggal
Jika Anda bekerja dengan tanggal, Anda harus menghafal banyak algoritma kalender, atau beralih ke Python atau Java. Penting untuk mengetahui bahasa-bahasa ini, atau setidaknya memastikan seseorang di tim Anda melakukannya, karena alasan ini, dan juga karena keduanya mendukung bilangan bulat besar secara asli.
Pembuang Waktu
Beberapa masalah tampaknya dirancang untuk memakan waktu programmer. Jika Anda mendapatkan salah satunya, solusi Anda akan menguji lebih banyak perhatian Anda terhadap detail dan efisiensi pembuat kode Anda – siapa yang dapat mengimplementasikan solusi rumit secara akurat dalam batasan waktu?
Tim Anda harus memiliki strategi untuk menangani masalah seperti ini. Jika Anda hanya ingin mendapatkan skor bagus dalam kontes, pertimbangkan untuk menyimpan masalah itu untuk yang terakhir. Waktu yang Anda habiskan untuk masalah ini juga akan menambah waktu untuk semua masalah lain yang tidak terpecahkan. Tentu saja, jika tujuan Anda adalah untuk menang, maka Anda harus menyelesaikannya.
Manfaat Masalah Adhoc
Yang utama adalah bahwa mereka mengajarkan Anda untuk memperhatikan detail dengan cermat. Masalah-masalah ini tidak rumit karena pengetahuan algoritmik yang Anda butuhkan, tetapi karena jika Anda tidak hati-hati dengan mereka, Anda bisa mendapatkan jawaban yang salah hanya karena presentasi Anda salah atau Anda memiliki asumsi yang salah tentang sesuatu.
Saat kemampuan pengkodean Anda meningkat, Anda akan melihat bahwa Anda memecahkan masalah seperti ini dengan lebih cepat dan lebih akurat.
Satu rekomendasi yang saya miliki: jadikan tujuan Anda bahwa Anda tidak pernah mendapatkan kesalahan kompilasi ketika Anda berkompetisi. Kedengarannya gila, tetapi memiliki sikap itu akan menghemat waktu nanti karena Anda tidak perlu membuka kembali editor untuk memperbaiki titik koma di suatu tempat. Keterampilan yang Anda butuhkan adalah sama: ajari diri Anda untuk memperhatikan detail, dan itu akan menghemat waktu Anda pada akhirnya.