165 lines
5.6 KiB
Python
165 lines
5.6 KiB
Python
# -*- 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 <iostream>
|
|
# #include <vector>
|
|
# #include <string>
|
|
# #include <sstream>
|
|
# #include <algorithm>
|
|
#
|
|
# // Fungsi untuk mencari urutan berurutan terpanjang dari angka yang identik dalam sebuah vector.
|
|
# std::pair<std::vector<int>, int> find_longest_identical_contiguous_subsequence(const std::vector<int>& arr) {
|
|
# if (arr.empty()) {
|
|
# return {{}, 0};
|
|
# }
|
|
#
|
|
# int max_length = 0;
|
|
# std::vector<int> longest_sequence;
|
|
#
|
|
# int current_length = 0;
|
|
# std::vector<int> 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<int> 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<std::vector<int>, 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 |