[ X Files @ 15.12.2024. 15:00 ] @
Nešto raščišćavam, i naiđem na papir star 34+ godine :)

[att_img]
[ Shadowed @ 15.12.2024. 16:51 ] @
Prvi nije definisao format fajla. Verovatno pretpostavlja neki standard koji se ucio u to vreme u skoli.
U svakom slucaju, ako zanemarimo nacin citanja, pretpostavljam da mozes samo da na pocetku izracunas sumu brojeva od 1 do 1000000 po formuli n(n+1)/2 i onda citajuci brojeve iz fajla samo oduzimas i na kraju ti ostane onaj koji nije u fajlu.
Drugi.. Me mrzi :)
[ X Files @ 15.12.2024. 18:04 ] @
Davno je bilo, a ako se dobro secam, bio sam (verovatno pogresno) pretpostavio da nema toliko velike promenjive da drzi taj max zbir, pa sam simulirao to sabiranje/oduzimanje u nizu. Jbg... Ali ideja je bila bas ta koju si naveo.

Moglo je da se radi u Pascalu ili C jeziku. Secam se da sam se mucio da nadjem editor i da kompajliram program na tom PC-ju, jer sam kod kuce radio na Commodore Amiga 500 C kompajlerima (Lattice C i Aztec C).



[ Shadowed @ 15.12.2024. 18:31 ] @
C ima long long koji je 64bit integer i moze da prihvati taj zbir.
No, kad malo bolje razmislis, i ne moras imati ceo zbir. Mozes sabirati i oduzimati u istom prolasku kroz petlju.
Code (c):

long result = 0;
for (int i = 1; i < 1000001; i++)
{
    result += i;
    result -= numberFromFile;
}
 


To je naravno sporije (mada u odnosu na citanje iz fajla zanemarljivo) ali mozes da upotrebis ako hoces manji tip.
[ X Files @ 15.12.2024. 18:48 ] @
Ne znam odakle mi to za velicinu tipa. Te 1992 godine C standard bio C89, i mislim da nije bilo nista preko 32bit long int. Ali ne mogu da tvrdim.
[ scoolptor @ 15.12.2024. 18:51 ] @
Well, ako su brojevi u fajlu poredjani u opadajucem redosledu, nece stati u 32 bitni long.

[ scoolptor @ 15.12.2024. 18:53 ] @
Mozes da napadnes 1..1000000 sa obe strane, i dodas prvi preostali najmanji ili prvi preostali najveci broj, zavisno od result > 500000.
[ scoolptor @ 15.12.2024. 19:00 ] @
doh.... XOR
[ Shadowed @ 15.12.2024. 19:03 ] @
Citat:
X Files:
Ne znam odakle mi to za velicinu tipa. Te 1992 godine C standard bio C89, i mislim da nije bilo nista preko 32bit long int. Ali ne mogu da tvrdim.

Moguce. Ja sam pogledao na wikipediji. Sa C-om nisam nista radio.. Veoma dugo :)
[ X Files @ 15.12.2024. 19:07 ] @
Sad sam priupitao ChatGPT-ja... To je ovo sto je scoolptor rekao - XOR!

// netestirano, samo kopirano

Code (c):

#include <stdio.h>

int main() {
    FILE *file;
    long int number;
    long int xor_full_range = 0;
    long int xor_file = 0;
   
    // XOR all numbers from 1 to 1000000
    for (long int i = 1; i <= 1000000; i++) {
        xor_full_range ^= i;
    }
   
    // Open the file containing the numbers
    file = fopen("numbers.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    // XOR all numbers in the file
    while (fscanf(file, "%ld", &number) != EOF) {
        xor_file ^= number;
    }
   
    // Close the file
    fclose(file);
   
    // The missing number is the XOR of the full range XORed with the file numbers
    long int missing_number = xor_full_range ^ xor_file;
   
    printf("The missing number is: %ld\n", missing_number);

    return 0;
}
 
[ X Files @ 15.12.2024. 19:11 ] @
U to doba sam dosta radio sa masinskim jezicima, moguce da mi je XOR-ovanje i bilo palo na pamet, ali nisam bas umeo da primenim u ovu svrhu. XOR sam koristio za neke inverzije bitova i graciku prezentaciju trepereceg teksta, tipa PRESS ANY KEY TO CONTINUE...
[ scoolptor @ 15.12.2024. 19:18 ] @
Code:

long int xor_full_range = 0;
   
// XOR all numbers from 1 to 1000000
for (long int i = 1; i <= 1000000; i++) {
    xor_full_range ^= i;
}


moze da se optimizuje:

Code:

long int xor_full_range = 1000000;


[ Nedeljko @ 16.12.2024. 00:18 ] @
Može i bez XOR-a.

Dovoljno je vršiti sabiranja po modulu 1000000. Naravno, XOR je brži.

Code (c):

long s = 0;

for (long i = 0; i < 999999; ++i) {
    s += i;
    s += 1000000-num_from_file;
    s %= 1000000;
}

long result = s + 1;


Ovde je long iskoriščen da bi se osiguralo da ima bar 32 bita. Tada je int imao 16 bita. U principu je korišćen Turbo Pascal. On je imao LongInt sa 32 bita.

https://turbopascal.org/wp-con...on_7.0_Language_Guide_1992.pdf
[ MajorFatal @ 16.12.2024. 06:49 ] @
Evo mnogo manji fajl, ima samo 99999 brojeva u intervalu od 1 do 100000, jedan broj nedostaje naravno, pa da možete da proverite da li vam rade ti programi, jedva ispisah sve e .. fajl je u attachmentu uz poruku ..
[ Mihajlo Cvetanović @ 16.12.2024. 10:43 ] @
Huh, ja sam išao na ta takmičenja, i 1992. godine sam bio u srednjoj školi, ali se nešto ne sećam da sam išao u Novi Sad. Čudno. Poznat mi je prvi zadatak, ali drugog se ne sećam. Trenutno nisam niguran ni kako bih ga rešio. Možda za svaku osobu da pratimo u kojim sve gradovima bi mogla da završi u koraku X, ali kako znati kada stati? Da li posle N, ili 2N, ko zna...
[ djoka_l @ 16.12.2024. 11:10 ] @
Ovaj drugi je baš zeznut.
Recimo, pretpostavimo da imamo 2 grada i dve osobe, ali u različitim gradovima.
Pošto u svakom potezu moraš da pomeriš sve osobe, te dve osobe bi stalno išle u onaj drugi grad, i nikada se ne bi srele u istom gradu.
Slična situacija je i sa 4 grada 1-2-3-4, dve osobe, jedna u 1 jedna u 4, nikada se ne bi srele.

Ovako, na prvi pogled, deluje mi da dve osobe mogu da se sretnu u istom gradu, samo ako je udaljenost izmeću dve osobe paran broj.
Možda?

Uzgred, najkarći put između bilo koja dva grada je trivijalno da se nađe, ali pitanje je da li bi osobe trebale da biraju najkraći put, ili bi bilo potrebno da idu napred-nazad, da bi se srele u istom gradu.
[ mjanjic @ 16.12.2024. 11:36 ] @
Drugi zadatak je verovatno nešto sa grafovima, dakle teorijsko računarstvo sa primenom na konkretan problem.

Prvi zadatak može na više načina, pitanje je da li postoji ograničenje memorije, ako to nije problem, učista se ceo fajl u memoriju, kreira heš tabela... ali, svakako je brže sa XOR, pošto se radi o INT brojevima, posebno što se verovatno čita linija po linija iz fajla, odnosno broj po broj.

Uopšteno, kad su u pitanju takvi problemi, u obe knjige "Programming Pearls" dati su primeri rešavanja nekih praktičnih problema, jedan od njih je bio da se sortira 27000 brojeva, pri čemu u memoriju može istovremeno da se smesti samo 1000 brojeva. Nekome možda to izgleda kako zezanje iz današnje perspektive, ali taj algoritam je kasnije našao primenu kod Big Data, kao i mnogi drugi.
[ X Files @ 16.12.2024. 11:45 ] @
Citat:
Mihajlo Cvetanović:
Huh, ja sam išao na ta takmičenja, i 1992. godine sam bio u srednjoj školi, ali se nešto ne sećam da sam išao u Novi Sad.

Nije tada bilo ni interneta, uglavnom se kroz casopise saznavalo ko je ko, ali se secam da je Jozef Kratica bio u organizaciji (čuveni autor "nerešivih zadataka"), a secam se da je na takmicenju bio i Ranko Lazić, koji je bio napisao i neku knjigu o programiranju na C jeziku.

[ MajorFatal @ 16.12.2024. 11:49 ] @
Drugi bi bio zeznut da ima samo dva ili tri sata da se reši na takmičenju, ne bi ga ni načeo, a ovako ..

ma kako bili raspoređeni gradovi ako je topologija takva da su bar tri grada raspoređeni "u trougao" na primer a, b, i c, i povezani međusobno, uvek svi mogu da se nađu u istom gradu, jer recimo mogu oni iz a da idu u b, i obrnuto, dok ne pričekaju sve iz svih gradova, i onda u jednom potezu nađu se u gradu c.

Nezgodno je ako bi svi gradovi bili poređani na jednoj liniji, uslov da svaki bude povezan sa susednim je i dalje ispoštovan, mogli bi da se svi sretnu u istom gradu ako između bilo koje dve osobe postoji neparan broj gradova u kome nema niko u tom trenutku (ili udaljenost između dve osobe paran broj, kao kod djoka_I), ako postoji bar jedna situacija da je paran broj gradova u kojima nema niko u tom trenutku između dve osobe - nikad se svi ne sretnu u istom gradu.

I još ako su gradovi poređani u prsten, i svaki povezan sa dva susedna, ako je broj gradova u prstenu paran, isto kao prethodno, mora između bilo koje dve osobe da bude neparan broj praznih gradova da bi uspeli da se nađu svi u istom gradu. Ako je broj gradova u prstenu neparan, onda uvek mogu da se nađu u istom gradu, jer ako ne mogu na jednom kraju prstena, upite se u suprotnim smerovima pa se nađu na onom drugom "kraju" prstena .. ako nisam nešto smandrljao.

I na sve to još najkraće i najracionalnije trase ..
[ Nedeljko @ 16.12.2024. 21:10 ] @
Da dam ideju za rešavanje drugog.

1. Odrediti komponente povezanosti grafa. Ako se na početku ne nalaze svi ljudi u istoj komponenti povezanosti, onda se ne mogu sresti. U suprotnom obrisati sve gradove koji se nalaze van komponente povezanosti u kojoj su ljudi na početku, kao i puteve u kojima je bar jedan od krajeva takav grad i preći na sledeći korak.

2. Ako se svi mogu sresti u jednom gradu, onda mogu nakon toga svi zajedno da odu u bilo koji drugi grad. Prema tome, odgovor na pitanje da li se mogu sresti u gradu X ne zavisi od izbora grada X.

Izabrati jedan od gradova (recimo onaj u kome se nalazi pr i čovek) i ispitati udaljenosti svih ljudi od tog grada. Ako su sve udaljenosti iste parnosti, onda je sretanje u tom gradu moguće za onoliko koraka koliko je najudaljeniji čovek udaljen od njega. Recimo, svi idu najkraćim putem u taj grad, pri čemu oni koji stignu ranije od nekog drugog, nakon što su stigli u taj grad najpre pređu iz tog grada u susedni, a potom se vrate i na taj način "čekaju" ostale. U suprotnom (ako ima udaljenosti iste parnosti), preći na sledeći korak.

3. Ako je jedno lice udaljeno paran broj koraka, a drugo lice udaljeno neparan broj koraka, onda da bi se sreli, jedno lice treba da stigne u taj grad putem iste dužine kao drugo lice, odnosno putem čija je dužina različita od parnosti najkraćeg puta. Dakle, ta osoba ima dva puta do tog grada različite parnosti, pa ako bi jednim od ta dva puta otišla u taj grad, a drugim se vratila, napravila bi ciklus neparne dužine. Obrnuto, ako postoji put neparne dužine, onda svaka osoba može otići do grada tog ciklusa, "obrnuti krug" i vratiti se na početno mesto i onda najkraćim putemmotići do grada u kome se svi sreću, čime "koriguje" parnost svog puta, pa je onda sretanje moguće.

Prema tome, treba ispitati da li postoji ciklus neparne dužine i to nam daje odgovor na pitanje da li se mogu sresti u istom gradu.

Ako postoji ciklus neparne dužine koji više od jednom prolazi kroz isti čvor, onda taj ciklus sadrži podciklus. Ako je taj podciklus neparne dužine, onda je on kraći ciklus neparne dužine, a ako je taj podciklus parne dužine, onda njegovim izbacivanjem iz većeg ciklusa dobijamo manji ciklus (od većeg ciklusa) koji je takođe neparne dužine. Najkraći ciklus neparne dužine ne prolazi dva puta kroz isti grad.

Najkraći ciklus neparne dužine nema dužinu manju od 3, niti veću od m=(n-1)/2*2+1 jer je to najveći neparan broj koji nije veći od n. Ako neki grad pripada tom clikusu, on pripada ciklusu dužine ne veće od m. Ako grad X ne pripada tom ciklusu, onda se iz njega može stići najkraćim putem dužine k koja nije veća od n-m do tog ciklusa, recimo grada Y, pa napraviti ciklus dužine m, pa se onda vratiti istim putem dužine k iz grada Y u grad X. Grad X pripada ciklusu dužine ne veće od 2*k+m<=2*(n-m)+m=2*n-m<=2*n-3.

Kako ispitati postojanje ciklusa neparne dužine? Izaberemo jedan grad X. Formiramo niz P dužine n takav da je P[ i ] bulovska vrednost koja nam govori da li se u određenom koraku osoba iz mesta X može naći u i-tom gradu. Recimo da je X nulti grad. Onda je na početku P[0]=true i P[ i ]=false za ostale vrednosti i jer na početku niz P opisuje stanje nakon 0 koraka. Ako niz u nekom trenutku opisuje skup gradova u kojima se osoba mogla naći nakon j koraka, onda se skup gradova u kojima se osoba mogla naći posle j+1 koraka određuje kao skup svih gradova koji su susedni nekom od gradova u kome je osoba mogla biti nakon j koraka. To radimo najviše 2n-3 puta, a zaustavljamo se kada nakon neparnog broja koraka grad X bude u skupu gradova opisanim sa P.

Dakle svaka osoba može da koriguje parnost svog puta gubljenjem vremena sa najviše 2n-3 koraka, nakon čega joj treba najviše n-1 koraka da stigne u grad susreta, pa se svi mogu sresti u istom gradu u najviše 3n-4 koraka.

4. Ako je sretanje moguće, ono je moguće u najviše 3n-4 koraka za n>=3 (da bi postojao ciklus neparne dužine), odnosno n-1 koraka u suprotnom. Najkraći putevi se određuju na sledeći način: Za svaku osobu se formura po jedan niz nalik na niz P iz prethodne tačke. To je zapravo matrica. Onda se to računa za svaku osobu kao niz P. Stajemo u koraku kada skupovi gradova u kojima se osobe mogu naći obuhvataju jedan isti grad (imaju neprazan presek). Da bismo pamtili puteve, trebaće nam zapravo trodimenzioni niz.

[ Nedeljko @ 17.12.2024. 00:23 ] @
U stvari, može i prostije, obzirom da smo našli ograničenje broja koraka do susreta ako je moguć. Napominjem da donji kod nije testiran.

Code (c):

#include <stdio.h>
#include <stdbool.h>

#define MAX_GRADOVA 40
#define MAX_OSOBA (MAX_GRADOVA-1)
#define MAX_KORAKA (MAX_GRADOVA >= 3 ? 2*MAX_GRADOVA-4 : MAX_GRADOVA-1)

struct graf
{
    int br_gradova;
    bool povezani[MAX_GRADOVA][MAX_GRADOVA];
};

struct osobe
{
    int br_osoba;
    int mesto[MAX_OSOBA];
};

int unesi_broj(const char *text)
{
    int broj;

    if (text!=NULL) {
        printf("%s", text);
    }

    fflush(stdout);
    scanf("%d", &broj);

    return broj;
}

void unesi_graf(struct graf *graf)
{
    graf->br_gradova = 0;

    for (int i = 0; i < MAX_GRADOVA; ++i) {
        for (int j = 0; j < MAX_GRADOVA; ++j) {
            graf->povezani[i][j] = false;
        }
    }

    graf->br_gradova = unesi_broj("Unesi broj gradova : ");

    int broj_puteva = unesi_broj("Unesi broj puteva : ");

    printf("Unesi puteve:\n");

    for (int p = 0; p < broj_puteva; ++p) {
        int i = unesi_broj(NULL) - 1;
        int j = unesi_broj(NULL) - 1;

        graf->povezani[i][j] = graf->povezani[j][i] = true;
    }
}

void unesi_osobe(struct osobe *osobe)
{
    osobe->br_osoba = unesi_broj("Unesi broj osoba : ");

    for (int i = 0; i < osobe->br_osoba; ++i) {
        printf("Unesi grad u kome se nalazi osoba %d : ", i+1);
        osobe->mesto[i] = unesi_broj(NULL) - 1;
    }
}

int main()
{
    struct graf graf;
    struct osobe osobe;

    unesi_graf(&graf);
    unesi_osobe(&osobe);

    int max_koraka = graf.br_gradova >= 3 ? 2*graf.br_gradova-4 : graf.br_gradova-1;
    bool dostizno[MAX_OSOBA][MAX_GRADOVA][MAX_KORAKA+1] = { false };
    int grad_susreta = -1;
    int korak;

    for (int osoba = 0; osoba < MAX_OSOBA; ++osoba) {
        dostizno[osoba][osobe.mesto[osoba]][0] = true;
    }

    for (korak = 1; korak<=max_koraka; ++korak) {
        for (int osoba = 0; osoba < osobe.br_osoba; ++osoba) {
            for (int iz_grada = 0; iz_grada < graf.br_gradova; ++iz_grada) {
                if (dostizno[osoba][iz_grada][korak-1]) {
                    for (int u_grad = 0; u_grad < graf.br_gradova; ++u_grad) {
                        if (graf.povezani[iz_grada][u_grad]) {
                            dostizno[osoba][u_grad][korak] = true;
                        }
                    }
                }
            }
        }

        for (int grad = 0; grad < graf.br_gradova; ++grad) {
            bool nadjen = false;

            for (int osoba = 0; osoba < osobe.br_osoba; ++osoba) {
                if (dostizno[osoba][grad][korak]==false) {
                    nadjen = true;

                    break;
                }
            }

            if (nadjen == false) {
                grad_susreta = grad;

                break;
            }
        }

        if (grad_susreta != -1) {
            break;
        }
    }

    if (grad_susreta == -1) {
        printf("Ne mogu se sresti u istom gradu.\n");

        return 0;
    }

    printf("Mogu se svi sresti u gradu %d. Evo putanja za svakoga:\n", grad_susreta+1);

    for (int osoba = 0; osoba < osobe.br_osoba; ++osoba) {
        printf("Osoba %d :", osoba+1);

        int putanja[MAX_GRADOVA];

        putanja[0] = osobe.mesto[osoba];
        putanja[korak] = grad_susreta;

        int mesto = grad_susreta;

        for (int i = korak-1; i >= 1; --i) {
            for (int grad = 0; grad < graf.br_gradova; ++grad) {
                if (dostizno[osoba][grad][i] && graf.povezani[grad][mesto]) {
                    putanja[i] = grad;
                    mesto = grad;

                    break;
                }
            }
        }

        for (int i = 0; i <= korak; ++i) {
            printf(" %d", putanja[i]);
        }

        printf(".\n");
    }

    return 0;
}
[ kosmopolita @ 17.12.2024. 06:38 ] @
Prvo bi napisao da me baš zanimalo kako bi to izgledalo i hvala na konkretnom kodu.

Primetio bi, iz ugla nekog koga je zanimao da vidi kod, da nedostaje minimalna putanja koja bi se dobila sortiranje više rešenja, ako ima više.
[ feveh @ 17.12.2024. 15:12 ] @
Minimalna putanja ne mora da rezultuje u istovremenom susretu u zadatom gradu.
Evo primer matrice susedstva (generisana random)
Code:
0    0    0    1    1    0    0    1    0    1    0    0    0    1    0    0    0    0    1    1
0    0    0    1    0    0    0    0    0    1    0    0    0    0    1    0    0    0    0    0
0    0    0    1    1    1    0    1    1    1    1    1    0    0    0    0    0    1    1    0
0    0    0    0    0    0    0    1    1    0    0    0    0    0    1    0    0    1    0    1
0    1    0    1    0    0    0    0    0    0    1    0    1    0    0    0    1    0    1    1
0    1    0    1    0    0    1    0    0    0    0    1    0    0    0    0    0    1    0    0
0    0    0    1    0    1    0    1    0    1    1    0    1    0    0    0    1    0    1    1
0    0    0    0    1    0    0    0    1    0    1    0    1    1    0    1    0    0    0    0
0    0    0    0    0    0    0    0    0    1    0    0    1    1    0    0    0    1    1    1
0    1    1    0    1    0    0    1    1    0    1    1    1    0    1    0    0    0    1    1
0    1    0    0    0    1    1    0    1    1    0    1    1    1    1    0    1    0    0    0
0    1    1    1    1    1    0    1    1    1    0    0    0    1    1    0    0    0    0    0
1    1    0    0    1    1    1    1    1    0    0    0    0    1    0    0    0    0    0    1
1    0    1    1    1    0    0    0    0    0    1    0    0    0    0    1    0    0    0    0
1    1    1    0    0    0    0    0    1    0    0    0    0    1    0    0    1    1    0    0
0    0    0    0    1    1    0    0    1    1    0    0    0    1    0    0    1    0    0    0
0    1    1    1    0    0    0    0    0    1    0    1    0    0    1    0    0    1    0    0
1    1    1    0    0    0    0    0    0    0    0    1    0    1    1    1    0    0    0    0
0    1    1    0    1    0    1    1    0    0    1    0    0    0    1    1    1    1    0    1
0    0    0    0    0    0    0    0    0    0    1    1    0    0    0    0    0    1    0    0

Za pet osoba zadati grad je grad broj 3.
Osoba broj 1 polazi iz grada broj 13, osoba broj 2 polazi iz grada 20, itd.
Code:
1:13    5    1    13    7    6    3    10    1    14    1    15    2    5    3
2:20    1    13    5    1    14    1    15    2    5    3    10    1    18    3
3:9    3    10    1    13    5    1    14    1    15    2    5    3    12    3
4:18    3    10    1    13    5    1    14    1    15    2    5    3    12    3
5:10    1    13    5    1    14    1    15    2    5    3    10    2    6    3

U prvom koraku osoba broj 1 prelazi u grad 5, osoba 2 u grad 1, itd.
Posle 14 koraka (proverom svih putanja) sve osobe su u zadatom gradu 3.
Resenje je pronadjeno ali da li je putanja minimalna?
Ako se iz putanja izbace ciklusi dobiju se minimalne putanje svake osobe ali dolazak u grad 3 nije istovremen :)

[ Nedeljko @ 17.12.2024. 15:39 ] @
I na kraju ne valja formula za max_korak. Evo ispravke:

Code (c):

#include <stdio.h>
#include <stdbool.h>

#define MAX_GRADOVA 40
#define MAX_OSOBA (MAX_GRADOVA-1)
#define MAX_KORAKA (MAX_GRADOVA >= 2 ? 2*MAX_GRADOVA-3 : MAX_GRADOVA-1)

struct graf
{
    int br_gradova;
    bool povezani[MAX_GRADOVA][MAX_GRADOVA];
};

struct osobe
{
    int br_osoba;
    int mesto[MAX_OSOBA];
};

int unesi_broj(const char *text)
{
    int broj;

    if (text!=NULL) {
        printf("%s", text);
    }

    fflush(stdout);
    scanf("%d", &broj);

    return broj;
}

void unesi_graf(struct graf *graf)
{
    graf->br_gradova = 0;

    for (int i = 0; i < MAX_GRADOVA; ++i) {
        for (int j = 0; j < MAX_GRADOVA; ++j) {
            graf->povezani[i][j] = false;
        }
    }

    graf->br_gradova = unesi_broj("Unesi broj gradova : ");

    int broj_puteva = unesi_broj("Unesi broj puteva : ");

    printf("Unesi puteve:\n");

    for (int p = 0; p < broj_puteva; ++p) {
        int i = unesi_broj(NULL) - 1;
        int j = unesi_broj(NULL) - 1;

        graf->povezani[i][j] = graf->povezani[j][i] = true;
    }
}

void unesi_osobe(struct osobe *osobe)
{
    osobe->br_osoba = unesi_broj("Unesi broj osoba : ");

    for (int i = 0; i < osobe->br_osoba; ++i) {
        printf("Unesi grad u kome se nalazi osoba %d : ", i+1);
        osobe->mesto[i] = unesi_broj(NULL) - 1;
    }
}

int main()
{
    struct graf graf;
    struct osobe osobe;

    unesi_graf(&graf);
    unesi_osobe(&osobe);

    int max_koraka = graf.br_gradova >= 2 ? 2*graf.br_gradova-3 : graf.br_gradova-1;
    bool dostizno[MAX_OSOBA][MAX_GRADOVA][MAX_KORAKA+1] = { false };
    int grad_susreta = -1;
    int korak;

    for (int osoba = 0; osoba < MAX_OSOBA; ++osoba) {
        dostizno[osoba][osobe.mesto[osoba]][0] = true;
    }

    for (korak = 1; korak<=max_koraka; ++korak) {
        for (int osoba = 0; osoba < osobe.br_osoba; ++osoba) {
            for (int iz_grada = 0; iz_grada < graf.br_gradova; ++iz_grada) {
                if (dostizno[osoba][iz_grada][korak-1]) {
                    for (int u_grad = 0; u_grad < graf.br_gradova; ++u_grad) {
                        if (graf.povezani[iz_grada][u_grad]) {
                            dostizno[osoba][u_grad][korak] = true;
                        }
                    }
                }
            }
        }

        for (int grad = 0; grad < graf.br_gradova; ++grad) {
            bool nadjen = false;

            for (int osoba = 0; osoba < osobe.br_osoba; ++osoba) {
                if (dostizno[osoba][grad][korak]==false) {
                    nadjen = true;

                    break;
                }
            }

            if (nadjen == false) {
                grad_susreta = grad;

                break;
            }
        }

        if (grad_susreta != -1) {
            break;
        }
    }

    if (grad_susreta == -1) {
        printf("Ne mogu se sresti u istom gradu.\n");

        return 0;
    }

    printf("Mogu se svi sresti u gradu %d. Evo putanja za svakoga:\n", grad_susreta+1);

    for (int osoba = 0; osoba < osobe.br_osoba; ++osoba) {
        printf("Osoba %d :", osoba+1);

        int putanja[MAX_GRADOVA];

        putanja[0] = osobe.mesto[osoba];
        putanja[korak] = grad_susreta;

        int mesto = grad_susreta;

        for (int i = korak-1; i >= 1; --i) {
            for (int grad = 0; grad < graf.br_gradova; ++grad) {
                if (dostizno[osoba][grad][i] && graf.povezani[grad][mesto]) {
                    putanja[i] = grad;
                    mesto = grad;

                    break;
                }
            }
        }

        for (int i = 0; i <= korak; ++i) {
            printf(" %d", putanja[i]);
        }

        printf(".\n");
    }

    return 0;
}
[ Nedeljko @ 17.12.2024. 15:40 ] @
Minimalnost se traži u smislu najmanjeg broja koraka potrebnog da se svi nađu u istom gradu.
[ kosmopolita @ 17.12.2024. 15:43 ] @
Da, pošto se istovrmeno kreću, kad se prvi put sretnu to je minimum.
[ Mihajlo Cvetanović @ 17.12.2024. 16:07 ] @
Meni moje rešenje i dalje deluje prostije, ali mrzi me da ga kodiram. Za svaku osobu imamo niz dužine N (broj gradova). Ćelije u nizu mogu da imaju samo vrednost 0 ili 1. 1 znači da osoba može da stigne do tog grada u trenutnom broju koraka. Osoba je inicijalno u svom početnom gradu. U svakom koraku pravimo novi niz u kome se svaka jedinica iz prethodnog niza kopira u sve gradove koji su susedni sa datim gradom. Čitava stvar izgleda pomalo kao igra Life u jednoj dimenziji. Kada završimo translaciju za sve osobe gledamo da li postoji grad za koji sve osobe imaju jedinicu. To je to. Došli smo do minimalnog broja koraka.

Jedini problem je "kako znati kada stati", to jest posle koliko koraka smo sigurni da rešenje ne postoji. Deluje mi da je 2*N dobra vrednost za maksimalni broj koraka, ali ne znam kako to da dokažem. Drugi način bi bio da pamtimo matricu osoba za dva prethodna koraka, pa ako se matrice za korak X i korak X-2 poklapaju to znači da nema razloga da gledamo dalje. Ali ne mogu da dokažem ni da je i to dovoljan uslov.
[ djoka_l @ 17.12.2024. 16:38 ] @
Citat:
Kada završimo translaciju za sve osobe gledamo da li postoji grad za koji sve osobe imaju jedinicu. To je to. Došli smo do minimalnog broja koraka.

Ako nemamo grad u koji mogu da odu sve osobe?
Onda nemaš "rollback", Nemaš pojma gde treba da odu osobe - ti si uradio "prostu deobu" jer si istu osobu poslao u više gradova.

primer - imaš 2 osobe u 40 gradova, međusobno udaljene, recimo, 6 puteva.
Kada ih pošalješ u susedni grad, dobiješ još dva grada (ili više) sa po jednom osobom.
U sledećem potezu vratiš obe osobe u početni grad, pa imaš u oba početna grada po 2 osobe. Samo si ih zaklackao
[ djoka_l @ 17.12.2024. 16:53 ] @
U ovom zadatku postoji nekoliko pretpostavki i nekoliko potpitanja.

Prvo, kaže se da je data mreža POVEZANIH gradova. To bi trebalo da znači da je graf povezan, pa nakon učitavanja veza, verovatno treba proveriti da li je to tačno, pa odmah prekinuti program ako graf nije povezan.
Drugo, data je, potpuno nepotrebno, činjenica da u početnom trenutku ne postoje dve osobe u istom gradu. Ovo takođe treba proveriti, a nije mi jasno zašto to treba da bude ispunjeno.
Treće, traži se da se ODMAH utvrdi da li je moguće da se sve osobe nađu u istom gradu, a to je verovatno teško bez prolaska kroz graf.
Četvrto, traži se da se da najmanji broj poteza, što je isto veoma teško - optimizacioni problem. Ako ne postoji neka caka iz teorije grafova, onda treba ispitati sve moguće puteve, tako što se čuva trenutna pozicija, prvi put dokojeg se stglo do rešenja, a svi ostali mogući putevi treba da se ispitaju dokle god su kraći od trenutnog minimuma. Ovo vidim kao neki rekurzivni algoritam koji preti da pojede sve resurse.
[ Mihajlo Cvetanović @ 17.12.2024. 17:03 ] @
Nije mi baš jasno šta zameraš mom rešenju. Algoritam će uvek pronaći rešenje (najmanji broj koraka), ako rešenje postoji, i treba samo utvrditi posle koliko koraka smo sigurni da rešenje ne postoji, ako ne postoji. I cenim da je 2*N taj maksimalni broj koraka. Možda je čak i N, ko zna.
[ Nedeljko @ 17.12.2024. 17:55 ] @
@Mihajlo Cvetanovic

Vidi moj kod. Tako i radi, samo što je maksimalan broj koraka pogrešno procenjen. Treba da bude 2n-1.

@djoka_l

U svakom koraku se gleda da li postoji grad u koji svi mogu da dođu u tom koraku. Ako se ne mogu sresti, posle 2n+1 iteracija se staje sa rezultatom da se ne mogu sresti.
[ Nedeljko @ 17.12.2024. 18:42 ] @
@Mihajlo Cvetanovic

Obrazložio sam limit. Ako neko treba da koriguje parnost dužine puta za to mu treba ciklus neprane dužine m, onda mu je za to dovoljno n-m + m + n-1 = 2n-1 koraka. U suprotnom mu je dovoljno n-1 koraka. U svakom slučaju mu ne treba više od 2n-1 koraka. Evo ispravljenog i potpuno netestiranog koda.

Code:

use std::io::{self, Write};
fn procitaj_broj(v: &mut Vec::<usize>, pos : &mut usize) -> usize
{
    let mut input = String::new();
    io::stdout().flush().unwrap();

    if *pos >= v.len() {
        io::stdin()
            .read_line(&mut input)
            .expect("Neuspešno čitanje linije");

        *v = input
            .trim()
            .split_whitespace()
            .filter_map(|s| s.parse::<usize>().ok())
            .collect();
        *pos = 0;
    }

    *pos += 1;

    return v[*pos-1];
}

fn main() {
    let mut v = Vec::<usize>::new();
    let mut pos : usize = 0;

    print!("Unesi broj gradova : ");

    let br_gradova = procitaj_broj(&mut v, &mut pos);
    let mut povezani = vec![vec![false; br_gradova]; br_gradova];

    println!("Unesi broj puteva");

    let br_puteva = procitaj_broj(&mut v, &mut pos);

    println!("Unesi puteve :");

    for _ in 0..br_puteva {
        let g1 = procitaj_broj(&mut v, &mut pos)-1;
        let g2 = procitaj_broj(&mut v, &mut pos)-1;

        povezani[g1][g2] = true;
    }

    print!("Unesi broj osoba :");

    let br_osoba = procitaj_broj(&mut v, &mut pos);
    let mut pocetni_gradovi = vec![0 as usize; br_osoba];

    print!("Unesi gradove u kojima se osobe nalaze :");

    for osoba in 0..br_osoba {
        let grad = procitaj_broj(&mut v, &mut pos)-1;

        pocetni_gradovi[osoba] = grad;
    }

    let max_koraka = 2*br_gradova-1;
    let mut dostizno = vec![vec![vec![false; max_koraka]; br_gradova]; br_osoba];

    for osoba in 0..br_osoba {
        dostizno[osoba][pocetni_gradovi[osoba]][0] = true;
    }

    for korak in 1..=max_koraka {
        for osoba in 0..br_osoba {
            for grad in 0..br_gradova {
                for g in 0..br_gradova {
                    if dostizno[osoba][g][korak-1] && povezani[g][grad] {
                        dostizno[osoba][grad][korak] = true;

                        break;
                    }
                }
            }
        }

        let mut grad_sastanka = 0;
        let mut nadjen = false;

        for grad in 0..br_gradova {
            nadjen = true;

            for osoba in 0..br_osoba {
                if dostizno[osoba][grad][korak]==false {
                    nadjen = false;

                    break;
                }
            }

            if nadjen {
                grad_sastanka = grad;

                break;
            }
        }

        if nadjen {
            println!("Svi se mogu sresti posle {} koraka u gradu {}. Putanje slede :", korak, grad_sastanka);

            for osoba in 0..br_osoba {
                print!("Osoba {} :", osoba+1);

                let mut put = vec![0 as usize; korak+1];

                put[0] = pocetni_gradovi[osoba];
                put[korak] = grad_sastanka;

                for k in (1..korak).rev() {
                    for grad in 0..br_gradova {
                        if povezani[grad][put[k+1]] {
                            put[k] = grad;

                            break;
                        }
                    }
                }

                for k in 1..=korak {
                    print!(" {}", put[k]);
                }

                println!("");
            }

            return;
        }
    }

    println!("Ne mogu se svi sresti");
}
[ dejanet @ 17.12.2024. 20:05 ] @
Ako razumem, za sada jedino resenje koje je ponudio Nedeljko ima kompleksnost O(n^3) sto bi bio problem da je veci broj gradova, veza i ljudi, ali posto nije...

Preko grafova bi kompleksnost bila verovatno O(n).
[ Nedeljko @ 17.12.2024. 22:59 ] @
Ne, ovde je složenost O(n^4), a linearno ne može.
[ Nedeljko @ 18.12.2024. 16:36 ] @
Tada se u gimnazijama u prva dva razreda učio jednostavni BASIC (bez podrške za strukturno programiranje), u trećem razredu prva tri tromesečja Pascal, a u poslednjem tromesečju prolog, u četvrtom FORTRAN i asembler za Knutov zamišljeni računar MIX.

Na takičenjima se radilo uglavnom u Pascal-u, na papiru i onda se tako i ocenjivalo.

Ne bih rekao da su performanse preterano uzimane u obzir.
[ dejanet @ 18.12.2024. 16:56 ] @
Da se ispravim.

Za search nodova O(n^2), koji je i najnepovoljniji deo celog resenja O(n1*(n2+n3)).

Al brate nema sanse da se nateram da napisam, krečana, a ChatGPT necu iz principa.
[ kosmopolita @ 18.12.2024. 17:05 ] @
Te neke godine sam učestvovao u pravljenju takmičara XO 5 u nizu na, tada još postojećem, SezamNetu.
Nismo objavljivali kod a moj takmičar je bio negde u sredini.
Naizmenično su startovali takmičare soko jedan ne pobedi.
Posle sam napravio win program i oni koji su probali nisu mogli da ga pobede.
[ X Files @ 18.12.2024. 17:23 ] @
Citat:
kosmopolita: Te neke godine sam učestvovao u pravljenju takmičara XO 5 u nizu na, tada još postojećem, SezamNetu.
Nismo objavljivali kod a moj takmičar je bio negde u sredini.
Naizmenično su startovali takmičare soko jedan ne pobedi.
Posle sam napravio win program i oni koji su probali nisu mogli da ga pobede.

XO 5 u nizu? Da li je tabla (matrica) bila neke definisane duzine?

Takodje sam radio XO 5 u nizu, za 12x12 (ne znam zasto bas 12), bio je solidno dobar, ali nikad nisam bio doradio rutinu koja od X pronadjenih dobrih poteza odabere bas bas najbolji...


[Ovu poruku je menjao X Files dana 18.12.2024. u 18:44 GMT+1]
[ X Files @ 18.12.2024. 17:39 ] @
Citat:
Nedeljko:
Tada se u gimnazijama u prva dva razreda učio jednostavni BASIC (bez podrške za strukturno programiranje), u trećem razredu prva tri tromesečja Pascal, a u poslednjem tromesečju prolog, u četvrtom FORTRAN i asembler za Knutov zamišljeni računar MIX.

Na takičenjima se radilo uglavnom u Pascal-u, na papiru i onda se tako i ocenjivalo.

Ne bih rekao da su performanse preterano uzimane u obzir.


Sve tačno.


Kaze moj sin, "šta, nema definsan format fajla, nema pripremljenih ulaznih podataka za testiranje, nema public i hidden testova". Haha...




Pri tome, retko ko je i imao kuci kompjuter, a ko ga je i imao to je uglavnom bio neki Komodor, Spektrum, Atari...za igrice. Retko ko bi kupovao XT ili kasnije 286, 386. Interneta nije bilo. Eventualno taj Sezam, ko je skapirao o cemu se radi i sta nudi.

Profesori koji su predavali informatiku, tipicno su bili matematicari, ali je bilo pitanje koliko su i oni sami tada imali vremena (mladi tek izasli sa fakulteta, matore da ne pominjem) da ovladaju vestinama dovoljnim za takmicarski nivo, tipa zadatka gore.

Knjige su takodje bile bas nekako osnovni nivo.
[ kosmopolita @ 18.12.2024. 17:51 ] @
Citat:
X Files:

XO 5 u nizu? Da li je tabla (matrica) bila neke definisane duzine?

Takodje sam radio XO 5 u nizu, za 12x12 (ne znam zasto bas 12), bio je solidno dobar, ali nikad nisam bio doradio rutinu koja od X pronadjenih dobrih poteza odabere bas bas najbolji...



Bilo je čianje i pisanje iz text fajlova pa je verovatno zato bila ograničena.
Ne sećam se da li 12x12 ali nije mnogo veća bila, koliko mogu da se setim.
[ Nedeljko @ 18.12.2024. 19:03 ] @
Citat:
X Files: Knjige su takodje bile bas nekako osnovni nivo.

Postojala je knjiga "Programerske mozgalice" za pripreme za takmičenja.
[ djoka_l @ 18.12.2024. 20:19 ] @
Takođe, od 1989.- 1991 , za vreme Ante Markovića, ljudi su masovno kupovali PC računare, nije tačno da niko nije imao PC.
U to vreme, moglo je da se za jednu mesečnu platu kupi novi PC. Uglavnom su to bili XT ili AT računari, manje 386. Herkules grafika je bila omiljena, jer je nudila dobru rezoluciju, a često je kod nas imala piggy-back ROM sa YUSCI rasporedom karaktera, i jedan prekidač na poleđini kućišta za promenu karakter ROMa

X files je bio srednjoškolac u to vreme, pa nije to video kao pojavu. Jeste da sam ja u to vreme kod kuće još uvek imao C-64, ali ni ja nisam baš mogao da ubedim svojeda mi kupe PC, ali sam na faksu radio na gomili XT i AT računara.
A i nije mi baš bilo hitno jer sam na faksu radio na Unix radnim stanicama i na mini računarima, pa mi PC i nije bio nešto što sam tada preterano želeo.
[ Nedeljko @ 18.12.2024. 23:12 ] @
Za vreme Ante Markovića se mnogo više kupovala tehnička roba, ali PC i dalje nije bilo nešto masovan. Tek u drugoj polovini 90-tih, sa izlaskom Windows-a 95 je PC bio dosta upotrebljiviji.
[ djoka_l @ 19.12.2024. 07:32 ] @
Prvi upotrebljiv Windows je bio 3.11 for workgroups. Početak devedesetih. Masovno u upotrebi u firmama. Windows 3 u kućnim uslovima.
[ Nedeljko @ 19.12.2024. 19:34 ] @
U Srbiji PC nije bio masovan pre Windows-a 95.

Windows 3.11 je imao segmentiranu memoriju za segmentima do 64 kilobajta, pa ako ti treba veći niz ili matrica, moraš da "iscepkaš". Na 32-bitnim Windows-ima si mogao da lupiš malloc koliko ti treba, dokle god ima memorije uključujući i virtuelnu. Imao je i drajversku arhitekturu.
[ djoka_l @ 19.12.2024. 19:57 ] @
Ma ne pričaj gluposti, nainstalirao sam se Windowsa 3.11 1993-1996
Instalirao sam sigurno stotinak mašina samo u jednoj firmi.
Tada je imao ogrančenje od 1MB memorije, ako je imao 2MB onda je gornji MB bio koriščen ka RAM drajv.
Donjih 640KB je moglo normalno da se koristi, dok su iznad toga mogli da se instaliraju drajveri korišćenjem LOADHIGH DOS komande.

Ono što je bilo uobčajeno, posle instalacije Windowsa, išla je intalacija TCP/IP drajvera, jer Win 3.11 je podržavao samo NetBios out of the box.
Konkretno, koristio sam drajver PCTCP.
https://en.wikipedia.org/wiki/PC/TCP_Packet_Driver
https://en.wikipedia.org/wiki/Windows_3.1

[Ovu poruku je menjao djoka_l dana 19.12.2024. u 21:08 GMT+1]
[ Nedeljko @ 20.12.2024. 02:53 ] @
Jesi po firmama. Po kućama nije bio masovan pre Windows-a 95. Jeste, viđao sam ga i ja po kućama, samo su te kuće bile u debeloj manjini.
[ djoka_l @ 20.12.2024. 07:26 ] @
https://www.dejanristanovic.com/refer/rac100.htm
Citat:
1990. godina je za većinu nas bila po svemu izuzetna: pod dejstvom ekonomskog programa "neprijatelja" Ante Markovića biznis je procvetao, pojavile su se hiljade privatnih preduzeća od kojih su se neka specijalizovala za uvoz i prodaju kompjutera. Jaka konkurencija je učinila da cene drastično padnu - ubrzo se u Beogradu mogao nabaviti računar po ceni koja nije ništa viša (a često je i niža) od Minhenske, i to uz sve blagodeti garantnog roka i servisiranja.


Firma u kojoj sam radio 1993 - 1994 - zvala se PCexpert. Mislim da je ime dovoljno indikativno da bi se pogodilo čime se firma bavila. U to vreme prodavnice PC računara bile su na svakom ćošku, slično kao prodavnice mobilnih telefona pslednjih godina.
[ kosmopolita @ 20.12.2024. 08:54 ] @
Ja sam zaboravio da sam koristio taj 3.1.
Znam da sam ga koristio jer sam deci iz komšiluka dao da se igraju sa starim računarom koji je imao taj OS.
Zapamtio sam i to jer su obrisali sve što su mogli. Što nije bila nikakva šteta za taj stari računar.
[ Nedeljko @ 20.12.2024. 09:07 ] @
U koliko si kuća kod nas video PC?
[ kosmopolita @ 20.12.2024. 09:24 ] @
Ako je pitanje meni, već sam dva puta napisao da se ne sećam nečega tako moje pamćenje iz tog doba nije relevantno.

Znam da je lista korisnika na Sezamu bila podugačka.
Ali to su bili korisnici iz cele SFRJ i pitanje koje su računare koristili.
[ djoka_l @ 20.12.2024. 12:35 ] @
Citat:
Nedeljko:
U koliko si kuća kod nas video PC?


OK Nedeljko, ja od 1989. godine NISAM imao ni radio na PC-u, od 1993. godine NISAM PRODAVAO PC računare, nikada nisam video Windows 3.11 for Work Groups, Sezam nije počeo da radi od 1989. i niko u Srbiji nije imao PC do pojave Windows 95.

A Računari na svojim naslovnim stranicama NISU prikazivali računare koje su ljudi u Srbiji kupovali, nego su išli u Minhen da ih fotkaju...

https://mobifi.rs/casopis-racunari-sa-devojkama-na-naslovnicama/

Kako mi uopšte pada na pamet da sumnjam u tvoje sećanje.
[ Ivan Dimkovic @ 20.12.2024. 13:05 ] @
Moj prvi PC je bio 486 DX, vintage 1993 - sa Windows 3.11 OS-om i budjavim Philips 14C monitorom :-)
[ X Files @ 20.12.2024. 13:22 ] @
Prilično dobro se sećam tih godina, a kupovao sam pasionierano sve časopise (Moj Mikro, Računari, Svet kompjutera), na račun doručaka.

Tih godina, školski informatički kabinet je penzionisao jedan ZX81, i nabavio oko 15 XT umreženih računara i 1 centralni AT, koji je bio kod profesora na stolu. Mislim da je bio XENIX / UNIX operativni sistem.

Do 1992, u celom naselju smo znali ko ima i koji komp kod kuće, i ni jedan nije bio PC, prosto nije imalo smisla da to neko kupi, jer je valjda poenta bila igrati igrice. Ako gledam po odeljenju, od 30 đaka, računare smo imali nas 3.

E posle je PC krenuo i po kućama, otprilike od 386, 486...

(Ovo nije bilo ni u BG ni u PO, nego u CG u Baru)


Moj prvi komp, 1986 godine:
http://https://sh.wikipedia.org/wiki/Orao_(računalo)
[ kosmopolita @ 20.12.2024. 13:38 ] @
Ja sam 10 godina stariji a u mojoj generaciji, mediju poznanicima, nije bilo zainteresovanih za računare.

Krenuo sa sam da sklapa XT, pa menjao dve AT ploče. Posle togam sam kupio 486.
Detalja se ne sećam a naročito ne godine.

Imao sam nešto pre XT na čemu je mogao da se proba Basic.
[ djoka_l @ 20.12.2024. 13:50 ] @
Ja sam na XT-u 1989. godine imao ukupno dve igrice - neki tetris klon i Prince of Persia.
Naravno, Hercules grafika i monohromatski (amber) monitor.
[ scoolptor @ 20.12.2024. 14:18 ] @
You try and tell the young people of today that... and they won't believe you.
[ X Files @ 20.12.2024. 15:06 ] @
Citat:
scoolptor: You try and tell the young people of today that... and they won't believe you.

Na času latinskog, na stolu knjiga "Latinski jezik", a na kolenima ispod stola "6510 mašinski jezik" :)
[ kosmopolita @ 20.12.2024. 15:51 ] @
U pomenutom XO takmičenju jedan učesnik napravio mali izvršni fajl koji je sve pobedjivao.
Pitali su ga kako je to napravio i on je rekao da koristi asembler kad god može, ili tako nešto.

Nisam mu zapamtio ime a baš bi me zanimalo šta je radio ovih 30 godina.
[ Nedeljko @ 20.12.2024. 20:15 ] @
Citat:
kosmopolita:
Ako je pitanje meni...

Zapravo je bilo upučeno članu djoka_l, kome ja uopšte ne osporavam da je imao šta je imao i da se bavio čime se bavio.

Međutim, to je u najboljem slučaju bila svaka deseta kuća. Firme su drugo.
[ B3R1 @ 21.12.2024. 10:08 ] @
@djoka_l:
@Nedeljko:

Ono sto Nedeljko kaze je zapravo blize istini, ali zahteva malu ispravku: PC AT/XT racunare su krajem 80-ih imali uglavnom programeri, studenti i profesori ETF i drugih tehnickih fakulteta. Znaci, manje-vise akademska prica. U to vreme (1989) bio je i BITNET/EARN, tome su imali pristup samo ljudi po fakultetima i institutima, kao i razni padobranci koji su se shlepali uz njih - znaci opet akademska prica. To sto @djoka_l misli da je takvih bilo vise je samo cinjenica da se on kretao u krugovima ljudi koji su imali PC-eve ... sto je bio i moj slucaj. U mojoj tadasnjoj ekipi svi su imali neku makinu - 286/386, jedan je pazario 486 prvi, razmenjivali smo piratski softver, igrice, gomile programcica za razne gluposti, skidali Shareware/Freeware sa raznih BBS-ova itd. Ali posmatrano u odnosu na citavu populaciju tadasnje Srbije / Jugoslavije mi smo bili na nivou statisticke greske, iako smo milsili da smo deo neke ogromne gomile.

Naravno, koristili smo i neke pametnije stvari - npr. Matlab je bio stravicno popularan na ETF-u za sve i svasta - pocev od digitalne obrade signala do raznih simulacija. Jedan moj ortak je 1991. uz 386-icu slucajno od pirata na nekoj disketi dobio i Wolfram Mathematica 1.0 i to mu je promenilo zivot - covek je na tome radio diplomski, kasnije i magistarsku tezu i bio je jedini u nasoj ekipi koji je taj softver poznavao sto bi se reklo u dusu. Dakle - opet visoko-akademska prica.

Ne zaboravite da Srbija (ali i pre toga SFRJ u celini) nikada nije imala vise od 5% visoko obrazovanih ljudi, cak ni u vreme Broza ... 95% su bili srednja/osnovna skola - KV/VKV/NKV radnici i seljaci. A to je slucaj i danas.

Takodje, krajem 80-ih racunari su bili prilicno skupi. Moj prvi 286, kupljen 1988/89, je kostao par hiljada maraka ili tako nesto. Kasnije sam uz to pazario i matricni Epson LX300, jos uvek pamtim jeziv zvuk koji je proizvodio. Imao je i modem 2400 bit/s. ChiWriter za tekstove ... Na tom kompu sam i diplomirao ...

Mislim da je prvi talas omasovljenja PC-eva bio dolazak full Interneta (1996), a to se poklapa i sa izlaskom Win95. Tada su i cene pale, ali opet - kompove su kupovali samo oni kojima su trebale pametne pisace masine. Obrni-okreni, opet akademci-intelektualci. Sta ce bravaru ili elektricaru pisaca masina?

Ono pravo, full omasovljenje je bio broadband Internet (ADSL), kao i Skype (2003) - tada su to poceli zaista da kupuju i oni nepismeni.
[ kosmopolita @ 21.12.2024. 11:37 ] @
Meni je bio hobi, mada i danas to vidim kao hobi sa kojim mogu i da zaradim pare.

Sećam se da je pre 1999 jedna manja stamparija imala računar.
Na tom računaru sam našao neki qbasic, beše, i u njemu sam nakucao ono što su ručno računali.

Možda bi mogao da se setim još nekog sličnog primera.
[ dejanet @ 21.12.2024. 11:51 ] @
Moj utisak, krajem 80-tih, da se PC sirio vrlo brzo, posebno po firmama. Npr. bio sam deo ekipe koja je drzala stand na YU Video Show u Domu omladine, C64 i ZX igrice su isle sporo, pa sam doneo moj PC/XT sa desetak igrica i programa. U jednom trenutku sam imao red od 30 metara ljudi koji su cekali da nesto pitaju ili kupe. Ne secam se da li je bila 88-ma ili 89-ta.

Vec sledece godine na istom dogadjaju je bilo mnogo PC standova, ozbiljnih firmi i prodavaca itd..
[ Nedeljko @ 21.12.2024. 23:19 ] @
Sa Windows-om 95 su video igre za PC postale bolje nego za amigu i atari st. Pojavio sd ubrzo DirectX, a onda i MMX. Tek je Windows 95 bio bolji za igre od DOS-a. To ga je omasovljivalo po kućama.
[ B3R1 @ 22.12.2024. 11:43 ] @
Citat:
Nedeljko: Sa Windows-om 95 su video igre za PC postale bolje nego za amigu i atari st. Pojavio sd ubrzo DirectX, a onda i MMX. Tek je Windows 95 bio bolji za igre od DOS-a. To ga je omasovljivalo po kućama.

Ne samo to! Iz ugla moje najuze struke - koliko se secam, tek je Windows95 imao koliko-toliko ispeglanu TCP/IP podrsku koja je licila na nesto. WINSOCK na 3.11 je bio nevidjeno djubre, to je pucalo svaki cas. A da ne govorimo o DOS-u - jos uvek se secam nekog NCSA Telnet-a, pa drajvera za Ethernet karticu koga je trebalo ucitati pre toga ...

Takodje, Windows95 je bio prvi Microsoftov OS gde su non-US kodni rasporedi, ukljucujuci i cirilicu, radili kako valja. Secam se da sam sa Win95 konacno pobrisao sve one YU-Times-New-Roman i nesrecnog "Miroslava" za cirilicu i krenuo da koristim MS default. Takodje, tastature su tu prvi put konacno sredjene i elegantno su se menjale sa Alt-Shift, sto je ostalo i do danas, na Win11. A ne da ti treba gomila nekih startup programa, poput Parawina koji je bio instliran na skoro svakom kompu po firmama.

Takodje, sa Win95 poceo je da nestaje i onaj haos koji smo imali sa raznim ad-hoc napravljenim kodnim rasporedima. Secam se nekog YUSCII, pa nekog kodnog rasporeda koji smo zvali "Moj Mikro", pa je bila i neka novosadska ekipa koja je po BBS-ovima pisala u stilu "cyevapcxicyi" - cx je bilo č, cy je bilo ć, sx je bilo valjda š, dy đ ... i tvrdili su kako je taj njihov sistem najsavrseniji. Eh da, bilo je i ono CC = Č, sto je valjda nasledjeno sa teleks masina.
[ dejanet @ 22.12.2024. 12:46 ] @
A tek krs net kartice i kablovi sa onim terminatorima, koji bar u mom slucaju su malo radile malo ne.
[ Nedeljko @ 22.12.2024. 14:01 ] @
Koliko je bilo računara po kućama govori i činjenica da su postojale kompjuterske usluge kao posao.

Neko ima računar i nudi kucanje u Word-u, skeniranje i štampu kao uslugu, čak u drugoj polovini 90-tih.