2026. június 25., csütörtök

Fuvarozásszervezés

 Nézzünk egy összetett logikai és adatszerkezeti kihívás (rekurzió, szótárak, fájlkezelés), amely kiválóan modellezi a hivatalos vizsgák emelt szintű nehézségi fokát. A feladat: Útvonal optimalizálás és statisztika, egy logisztikai cég adatbázisát dolgozzuk fel. A program célja a leghosszabb összefüggő szállítási lánc (rekurzív keresés) megtalálása, a megadott súlyhatár feletti csomagok szűrése és a statisztika fájlba írása.
-------------
# Részeredmények

def beolvasas():
    # Szállítási adatok: forrás; cél; súly
    file_content = """
    Budapest;Szeged;12.5
    Szeged;Debrecen;8.0
    Debrecen;Miskolc;15.2
    Miskolc;Eger;11.0
    Budapest;Győr;9.5
    Győr;Pécs;13.1
    Pécs;Kaposvár;7.8
    Kaposvár;Zalaegerszeg;10.7
    """
    szallitasok = []
    for sor in file_content.strip().splitlines():
        adatok = sor.strip().split(';')
        if len(adatok) == 3:
            forras, cel, suly = adatok[0].strip(), adatok[1].strip(), float(adatok[2])
            szallitasok.append({'forras': forras, 'cel': cel, 'suly': suly})
    return szallitasok

def leghosszabb_lanc(aktualis_hely, szallitasok, meglatogatott):
    max_utvonal = []
    for szallitas in szallitasok:
        if szallitas['forras'] == aktualis_hely and szallitas['cel'] not in meglatogatott:
            uj_meglatogatott = meglatogatott.copy()
            uj_meglatogatott.append(szallitas['cel'])
            kovetkezo_ut = leghosszabb_lanc(szallitas['cel'], szallitasok, uj_meglatogatott)
            if len(kovetkezo_ut) >= len(max_utvonal):
                max_utvonal = [szallitas['cel']] + kovetkezo_ut
    return max_utvonal

def kiiratas(eredmeny, fajlnev):
    with open(fajlnev, 'w', encoding='utf-8') as f:
        for allomas in eredmeny:
            f.write(f"{allomas}\n")

def main():
    adatok = beolvasas()
    print(f"1. Beolvasva {len(adatok)} szállítási adat.")

    osszes_suly = sum(item['suly'] for item in adatok)
    print(f"2. Összes szállított súly: {osszes_suly:.2f} kg")

    szurt_adatok = [s for s in adatok if s['suly'] > 10.0]
    print(f"3. 10 kg feletti tételek száma: {len(szurt_adatok)}")

    kezdo_allomas = 'Budapest'
    leghosszabb_ut = leghosszabb_lanc(kezdo_allomas, adatok, [kezdo_allomas])
    vegleges_ut = [kezdo_allomas] + leghosszabb_ut

    print(f"4. Leghosszabb lánc {kezdo_allomas}-ról/ről indítva: {' -> '.join(vegleges_ut)}")
    kiiratas(vegleges_ut, 'leghosszabb_lanc.txt')
    print("5. Eredmény kiírva a 'leghosszabb_lanc.txt' fájlba.")

if __name__ == '__main__':
    main()
---------------
1. Beolvasva 8 szállítási adat.
2. Összes szállított súly: 87.80 kg
3. 10 kg feletti tételek száma: 5
4. Leghosszabb lánc Budapest-ról/ről indítva: Budapest -> Szeged -> Debrecen -> Miskolc -> Eger
5. Eredmény kiírva a 'leghosszabb_lanc.txt' fájlba.
-----------------------
Futtatás; https://onecompiler.com/python#draft-tdxd

Nincsenek megjegyzések:

Megjegyzés küldése