Prosty programik, prosba o pomoc

Prosty programik, prosba o pomoc
LE
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:13
0

Witam, przychodzę do Was z prośba o pomoc w napisaniu tego programu. Poklikalbym cos samemu, niestety zepsuł mi się komputer a na telefonie byłoby to bardzo uciążliwe. Dziekuje za pomoc

WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:minuta
  • Postów:3182
0

Spoko napisz kod na kartce zrob zdjecie i wklej na forum to moze ktos Cie poratuje.

LE
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:13
0

Wlasnie problem w tym, ze dopiero sie ucze, wiec gdybym to robil na komputerze to byloby to metoda prob i błędów, wiec wątpię, ze ktokolwiek by sie w tym połapal 😑

SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 10 godzin
0

Spróbuj na kompie, jak ci nie będzie działać to daj go w znaczniku dostępnym pod guzikiem z </>. Ktoś ci na pewno napisze gdzie są błędy. Obecnie wygląda to raczej tak jakbyś chciał żeby ktoś zrobił za ciebie zadanie domowe, a takim za darmo nie pomagamy (a jak nie za darmo to pisz w dziale ogłoszenia drobne)

szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:18 dni
  • Postów:533
8

To nie te czasy, że bez komputera nic nie zrobisz. Dla takiego prostego programu możesz odpalić jakiś kompilator online na komórce, np.:
https://repl.it/languages/python3

LE
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:13
0
Kopiuj

A = [2, 3, 4, 5, 7, 9]
B = [1, 3, 3, 6, 9]
C = [1, 3, 3, 6, 99]

def merge(list_a, list_b):
  
    max_iterator = get_max_iterator(len(list_a), len(list_b))
    
    merged_lists = get_merged_lists(list_a, list_b, max_iterator)
    bubble_sort(merged_lists)

    return merged_lists


def get_max_iterator(length_a, length_b):
    if length_a > length_b:
        return length_a
    else:
        return length_b

def get_merged_lists(list_a, list_b, max_iterator):
    i = 0
  
    merged_lists = [] * len(list_a * len(list_b))
    while i < max_iterator:
        if is_iterator_in_list_index_range(i, len(list_a)):
            merged_lists.append(list_a[i])
        if is_iterator_in_list_index_range(i, len(list_b)):
            merged_lists.append(list_b[i])
        i = i + 1
    return merged_lists

def is_iterator_in_list_index_range(iterator, index_range):
    if iterator >= index_range:
        return False
    else:
        return True

def bubble_sort(sortable_list):
    for pass_num in range(len(sortable_list)-1, 0, -1):
        for i in range(pass_num):
            if sortable_list[i] > sortable_list[i+1]:
                temp = sortable_list[i]
                sortable_list[i] = sortable_list[i+1]
                sortable_list[i+1] = temp

print(merge(A, B))
print(merge(B, A))
print(merge(A, C))

Pewnie mozna 3 razy krócej, prawda? Ale tak jak mówiłem, nie umiem tego jezyka

edytowany 1x, ostatnio: Leno
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 10 godzin
2

??? przecież te listy już są posortowane.

Kopiuj
A = [2, 3, 4, 5, 7, 9]
B = [1, 3, 3, 6, 9]
C = [1, 3, 3, 6, 99]


def merge(a, b):
    wynik = []
    while len(a) > 0 and len(b) > 0:
        if a[0] <= b[0]:
            wynik.append(a[0])
            a = a[1::]
        else:
            wynik.append(b[0])
            b = b[1::]
    if len(a) > 0:
        for x in a:
            wynik.append(x)
    if len(b) > 0:
        for x in b:
            wynik.append(x)
    return wynik


print(merge(A, B))
print(merge(B, A))
print(merge(A, C))
W każdej iteracji while tworzysz nową listę. Z funkcji O(a+b) zrobiłeś O(MG).
SI
W którym miejscu? Wynik tworzę przed while-m, a pozostałe są globalne.
SI
remove zajęło by pewnie więcej czasu, trzeba by zmienne "licznikowe" wprowadzić
W przypadku a == b and len(a) == 10_000, rozwiązanie oparte o remove byłoby (zgaduję) 15x szybsze od aktualnego. (Przed wejściem w pętlę należałoby utworzyć kopie obu list.) Co nie zmienia faktu, że remove jest O(N) time. Pozostają: indeksowanie oraz iteratory.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.