diff --git a/tugas_4_2_mk_daa_natasya_poetri_hanyoro (1).py b/tugas_4_2_mk_daa_natasya_poetri_hanyoro (1).py new file mode 100644 index 0000000..68ce9ce --- /dev/null +++ b/tugas_4_2_mk_daa_natasya_poetri_hanyoro (1).py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +"""TUGAS-4.2-MK-DAA-NATASYA-POETRI-HANYORO.ipynb + +Automatically generated by Colab. + +Original file is located at + https://colab.research.google.com/drive/1DWetqHFchbLDWOHU4-6hrccYi2FII2e2 + +"PROGRAM URUTAN TERPANJANG MENGGUNAKAN PHYTON" + +### Program untuk Mencari Urutan Angka Identik Berurutan Terpanjang + +Program ini akan mencari segmen berurutan terpanjang dalam daftar angka input di mana semua angka dalam segmen tersebut adalah sama. Input angka akan dipisahkan oleh spasi. +""" + +# String input yang berisi angka-angka (dapat Anda modifikasi) +# Angka dipisahkan oleh spasi. +input_str = "10 20 20 20 20 5 15 25 30 1 2 3 4 4 4 4 4 4 4 5 6 7 8 9 9 9 10 9 8 7 6 5 4 100 100 101 102 103" + +# Mengurai string input menjadi daftar bilangan bulat +# strip().isdigit() digunakan untuk menangani potensi spasi ganda +numbers = [int(num) for num in input_str.split() if num.strip().isdigit()] + +print("Daftar angka input:", numbers) + +def find_longest_identical_contiguous_subsequence(arr): + """ + Mencari urutan berurutan terpanjang dari angka yang identik dalam sebuah list. + + Args: + arr (list): Daftar bilangan bulat. + + Returns: + tuple: Sebuah tuple berisi (longest_sequence, length), + di mana longest_sequence adalah list urutan terpanjang yang ditemukan, + dan length adalah panjangnya. + """ + if not arr: + return [], 0 + + max_length = 0 + longest_sequence = [] + + current_length = 0 + current_sequence = [] + + for i in range(len(arr)): + # Jika ini elemen pertama atau elemen saat ini sama dengan elemen sebelumnya + if i == 0 or arr[i] == arr[i-1]: + current_length += 1 + current_sequence.append(arr[i]) + else: + # Urutan angka identik terputus. Periksa apakah urutan saat ini lebih panjang dari yang terpanjang sejauh ini. + if current_length > max_length: + max_length = current_length + longest_sequence = current_sequence + # Reset untuk memulai urutan baru + current_length = 1 + current_sequence = [arr[i]] + + # Setelah loop selesai, periksa urutan terakhir (jika itu yang terpanjang) + if current_length > max_length: + max_length = current_length + longest_sequence = current_sequence + + return longest_sequence, max_length + +# Memanggil fungsi untuk menemukan urutan terpanjang +longest_sequence, length = find_longest_identical_contiguous_subsequence(numbers) + +print(f"Urutan identik berurutan terpanjang: {longest_sequence}") +print(f"Panjang urutan: {length}") + +""""PROGRAM URUTAN TERPANJANG MENGGUNAKAN C++""" + +# Commented out IPython magic to ensure Python compatibility. +# %%writefile longest_sequence.cpp +# #include +# #include +# #include +# #include +# #include +# +# // Fungsi untuk mencari urutan berurutan terpanjang dari angka yang identik dalam sebuah vector. +# std::pair, int> find_longest_identical_contiguous_subsequence(const std::vector& arr) { +# if (arr.empty()) { +# return {{}, 0}; +# } +# +# int max_length = 0; +# std::vector longest_sequence; +# +# int current_length = 0; +# std::vector current_sequence; +# +# for (size_t i = 0; i < arr.size(); ++i) { +# // Jika ini elemen pertama atau elemen saat ini sama dengan elemen sebelumnya +# if (i == 0 || arr[i] == arr[i-1]) { +# current_length++; +# current_sequence.push_back(arr[i]); +# } else { +# // Urutan angka identik terputus. Periksa apakah urutan saat ini lebih panjang dari yang terpanjang sejauh ini. +# if (current_length > max_length) { +# max_length = current_length; +# longest_sequence = current_sequence; +# } +# // Reset untuk memulai urutan baru +# current_length = 1; +# current_sequence = {arr[i]}; +# } +# } +# +# // Setelah loop selesai, periksa urutan terakhir (jika itu yang terpanjang) +# if (current_length > max_length) { +# max_length = current_length; +# longest_sequence = current_sequence; +# } +# +# return {longest_sequence, max_length}; +# } +# +# int main() { +# // String input yang berisi angka-angka (dapat Anda modifikasi) +# std::string input_str = "10 20 20 20 20 5 15 25 30 1 2 3 4 4 4 4 4 4 4 5 6 7 8 9 9 9 10 9 8 7 6 5 4 100 100 101 102 103"; +# +# // Menguraikan string input menjadi daftar bilangan bulat +# std::vector numbers; +# std::stringstream ss(input_str); +# std::string segment; +# int num; +# +# while (ss >> segment) { +# try { +# num = std::stoi(segment); +# numbers.push_back(num); +# } catch (const std::invalid_argument& e) { +# // Abaikan non-angka +# continue; +# } catch (const std::out_of_range& e) { +# // Abaikan angka yang terlalu besar/kecil +# continue; +# } +# } +# +# std::cout << "Daftar angka input: "; +# for (int n : numbers) { +# std::cout << n << " "; +# } +# std::cout << std::endl; +# +# // Memanggil fungsi untuk menemukan urutan terpanjang +# std::pair, int> result = find_longest_identical_contiguous_subsequence(numbers); +# +# std::cout << "Urutan identik berurutan terpanjang: "; +# for (int n : result.first) { +# std::cout << n << " "; +# } +# std::cout << std::endl; +# std::cout << "Panjang urutan: " << result.second << std::endl; +# +# return 0; +# } + +!g++ longest_sequence.cpp -o longest_sequence +!./longest_sequence \ No newline at end of file