Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kod koji daje neočekivani rezultat

[es] :: Art of Programming :: Kod koji daje neočekivani rezultat

Strane: < .. 1 2 3 4 5 6 7 ... Dalje > >>

[ Pregleda: 107557 | Odgovora: 337 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 02:03 - pre 51 meseci
A ko garantuje da će kompajler koristiti glibc implementacije funkcija rand i srand, a ne neke svoje? Da li će sve verzije glibc-a da imaju istu implementaciju?

Ma, kapiram ja tebe, samo može kraće i preglednije:

Code (c):

main(){for(int i=0; putchar("Paja Patak\n"[i]);++i);}

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 02:08 - pre 51 meseci
Uspeo sam da nađem još kraće i čitljivije rešenje:

Code (c):

main(){printf("Paja Patak\n");}

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 07:43 - pre 51 meseci
Chupcko:
Code:

/**/main(e,c,h,o,_){e?(main(0,1,0,0,/**/
  /**/3),puts("")):_--&&(main(e,c<<_,h/**/
 /**/+3,o,_),putchar(223&2+"nimfs_a"[/**/
/**/(c&2)+h+o]),main(e,c,h,o+1,_));}/**/


Sjajno !

 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 09:06 - pre 51 meseci
Citat:
Mihajlo Cvetanović:
Kada se karakteri u stringu "9>AEFK" pomere za deset mesta dobijemo karaktere "CHKOPU", što su gle čuda sve karakteri u tvom imenu. Pretpostavljam da će rezultat rada programa biti tvoje ime.

Ali treba da znaš da rand funkcija nije standardizovana. Razni kompajleri proizvode različite rezultate za isti početni seed. Čak i isti kompajleri u različitim verzijama mogu da proizvedu različit rezultat. Zato, ono što funkcioniše kod tebe ne mora da funkcioniše kod nekog drugog.


Ovo je sample implementacija iz standarda:

Code:

static unsigned long int next = 1;

int rand(void) // RAND_MAX assumed to be 32767
{
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}

void srand(unsigned int seed)
{
    next = seed;
}


No nije obavezno da kompajler to koristi.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 10:58 - pre 51 meseci
Naravno, zezam se. Sledeća "primedba" bi bila: "A gde su tu klase i objektna orjentisanost?".
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 19:47 - pre 51 meseci
Može li neko da mi objasni u čemu je smisao svega ovoga?

Za obfuskaciju izvornog koda u C-u postoje gotovi alati. Ako neko zna bolje metode, neka ih formuliše u vidu opšteg slučaja i to objavi i/ili napravi softver.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat05.01.2020. u 22:22 - pre 51 meseci
Mislim da kapiram. Poenta je u umetnosti.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Bradzorf012
Mile i ortaci LLC

Član broj: 334105
Poruke: 466



+1020 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 07:18 - pre 51 meseci
Umetnost postoji da nas istina ne bi ubila.
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 21:08 - pre 51 meseci
http://www.ioccc.org/

Ovo mi je bila inspiracija :)))

A sto se tice rand i srand, toliko programera naokolo, dajte bar jedan primer drugacije implementacije rand i srand? To jest dajte neku platformu na kojoj kod nece raditi ono sto treba :))))))))))) Za sada samo pricate kako teoretski to nece raditi, a ni jedan prakticni primer kako ne radi :). Mada da se ne lazemo, meni je bitno da prodje sa gcc i clang :).

A evo i nesto ste novo naucili :))), a i definitno kod daje neocekivan rezultat :PPPP.

P.S. Nedeljko main(){puts("Paja Patak");} Jos je krace, ali treba znati c :)

CHUPCKO
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 21:40 - pre 51 meseci
Na koliko si platformi probao?
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 22:26 - pre 51 meseci
Na svim koje su mi pale saka, mada skoro svuda je bio gcc ;). Ako vam iz prve radi na omiljenom c kompajleru, moze se reci da je tesko naci gde ne radi :). Ali ajde demantujte me, voleo bih da vidim tu implementaciju kompajlera/standardnih biblioteka.

CHUPCKO
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 22:44 - pre 51 meseci
Pazi, apsolutno nigde nema garancije da to svuda treba da radi isto...

edit:
no nebitno.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 22:57 - pre 51 meseci
Ima li neko nešto od ovoga pri sebi:

1. Linux, intel C/C++,
2. Windows, intel C/C++,
3. Windows, MinGW,
4. Windows, clang,
5. Windows, Visual C++,
6. Windows, Borland C++,
7. Mac, XCode?

Bilo bi dobro da se isproba.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 23:13 - pre 51 meseci
Proverio sa VC++ VS2013, ne radi. E sad to je C++ ;)
Radi se o glibcu. Znaci nista sto koristi MS CRT nece raditi.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Kod koji daje neočekivani rezultat06.01.2020. u 23:27 - pre 51 meseci
A evo kad se koristi musl umesto glibc:
Code:

~/examples >>> musl-gcc srand.c                                                                            
srand.c:1:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
    1 | main(){for(srand(-67303081);putchar(10+"9>AEFK"[7&rand()])>11;);}
      | ^~~~
srand.c: In function ‘main’:
srand.c:1:12: warning: implicit declaration of function ‘srand’ [-Wimplicit-function-declaration]
    1 | main(){for(srand(-67303081);putchar(10+"9>AEFK"[7&rand()])>11;);}
      |            ^~~~~
srand.c:1:29: warning: implicit declaration of function ‘putchar’ [-Wimplicit-function-declaration]
    1 | main(){for(srand(-67303081);putchar(10+"9>AEFK"[7&rand()])>11;);}
      |                             ^~~~~~~
srand.c:1:51: warning: implicit declaration of function ‘rand’ [-Wimplicit-function-declaration]
    1 | main(){for(srand(-67303081);putchar(10+"9>AEFK"[7&rand()])>11;);}
      |                                                   ^~~~
~/examples >>> ./a.out                                                                                     
PUP

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat07.01.2020. u 00:48 - pre 51 meseci
U Visual C možeš da kompajliraš baš C, tako što ćeš da napraviš .c fajl. Može se kompajlirati iz komandne linije ili nekog IDE-a (može i Code::Blocks).
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: Kod koji daje neočekivani rezultat07.01.2020. u 21:09 - pre 51 meseci
Od kada se moze programirati na windowsu :))))))))))), inace dobra poenta sa razlicitikm libc implementacijama, moracu negde da probam jos na ulibc i dietlibc. Mada koliko vidim nece da radi, kada nisu POSIX implementacije :).

Deo man 3 rand:

Code:


       POSIX.1-2001 gives the following example of an implementation of rand()
       and  srand(),  possibly  useful when one needs the same sequence on two
       different machines.

           static unsigned long next = 1;

           /* RAND_MAX assumed to be 32767 */
           int myrand(void) {
               next = next * 1103515245 + 12345;
               return((unsigned)(next/65536) % 32768);
           }

           void mysrand(unsigned int seed) {
               next = seed;
           }



I da, naravno da sam od samog pocetka znao da nece to bas biti prenosiv kod, ali eto radi bar negde :))). Ali ajde ozbiljno ko jos koristi rand iz libc-a za nesto ozbiljnije ;).
CHUPCKO
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat08.01.2020. u 00:08 - pre 51 meseci
A šta ti koristiš u C-u umesto rand-a? Naravno da postoji potreba za pseudoslučajnim brojevima koji su

1. brzi sa simulacije,

2. sigurni za kriptografiju.

1 i 2 je obično u suprotnosti jedno sa drugim, pa postoji potreba da se isporuči oboje zasebno, da bi se koristilo po potrebi ono što odgovara.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: Kod koji daje neočekivani rezultat08.01.2020. u 20:36 - pre 51 meseci
Ako mi zatreba ozbiljni random brojevi, koristim ono sto isporucuje OS, kako radim na linuxu samo, procitam /dev/random :), ili /dev/urandom ako je malo manje bitno :).

Naravno za neku ozbiljnu prenosiviju foru uzmem openssl/rand ako licenca zadovoljava potrebe :)

CHUPCKO
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Kod koji daje neočekivani rezultat08.01.2020. u 21:50 - pre 51 meseci
Trebaju mi pseudoslučajni brojevi koji ispunjavaju sledeće uslove:

1. da mogu da namestim seed i da dobijam deterministički proizvoljno dug niz,
2. da budu kriptografski sigurni,
3. da se generišu onoliko brzo koliko je to moguće.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: Art of Programming :: Kod koji daje neočekivani rezultat

Strane: < .. 1 2 3 4 5 6 7 ... Dalje > >>

[ Pregleda: 107557 | Odgovora: 337 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.