» »

Digitalna evolucija

Digitalna evolucija

««
4 / 29
»»

Thomas ::

Man muss immer generalisieren - Carl Jacobi

asPeteR ::

Uau Thomas, clo HP ma zdej critticall! Zdele sem ga dolpovlekel, tko da ...

It's going to start sweating from now on ...:D

snow ::

Da vidimo to digitalno beštijo!
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

asPeteR ::

Zlede ga malo probavam na prilozenih primerih ... Moram rect, da je GUI, kar prijeten, preprost in vidne so vse pomembne informacije.

Edino kar se bo treba matrat, bo pri kovanju kode ... Striktno se drzat pravil programiranja, ki jih zateva Crittcall.

Aja, pohvalno, da ni potrebno po vsakem evoluiranem programu pritistini "Evoluate" ... Al je to sam zacetni bug?>:D
(nekaj casa nazaj si govoril da bo taksna.

Recimo zdele randomSort po osmih minutah spravilo na 48% prvotnih korakov ... Impresivno!

jeti51 ::

Ja koliko RAMa pa sploh rabi ta zadeva? Meni se odpre okno, notri pa nič. Samo okvir in meni zgoraj, skozi se pa vidi, kaj je spodaj.:| V oknu se mi nič ne izriše. Sicer pa deluje, nekaj "beepa" in tudi ustvarja tiste datoteke z izboljšanimi programi.:)

jeti51 ::

Je že v redu... sistem se je zgleda že prej čisto upočasnil. Po resetiranju je vse OK.

asPeteR ::

Thomas: Imam takoj dva predloga. Fino bi bilo, ce bi imel Critticall moznost, da se izbere za program "opmizira" na najmanj moznih vrstic programske kode, ki seveda ni niti slucajno nujno, da je najhitrejsa, toda pride prav.

Aja, kaj je potem razlika med to verzijo in full?

Zgodovina sprememb…

  • spremenil: asPeteR ()

Thomas ::

Ja ... minimizacija linij je zdaj tako, da ne širi programa čez vse meje.

Da bi pa na račun hitrosti zmanjševal število linij, pa (zaenkrat še?) ni.

Razlika med tole verzijo in full je pa v tem, da tale gre čez cca. 2 uri spat. Moraš ročno pognat od tam naprej.
Man muss immer generalisieren - Carl Jacobi

ciki57 ::

Našel sem prvi bug :D

Če namesto:
if {
} else {
}

napišeš:
if {
}
else {
}

javi: Program's block statement structure is invalid.

Thomas ::

Too strict, ja! :D

Zadeva rabi masiven prevajalanik iz raznih koderskih načinov. Najbrž. ;)
Man muss immer generalisieren - Carl Jacobi

OwcA ::

Saj v Cju lahko mirno "pobiješ" vse presledkaste znake (\t, \n, presledek) na vsakem stiku med črkovno (a-Z, 0-9, _) in znakovo "besedo", pri čemer bo bo koda še vedno veljavna. Stvar preproste skripte, ali celo makra. Program je sam tako kreativen, da "vse pade" od uporabnikov. :)
Otroška radovednost - gonilo napredka.

darh ::

kak info o vrstici ki ga zmoti bi bil priročen.

Malo se igram...

dodal sem

$rinvar leto (0,3000)
vzame en random value za leto

neprest=0;

if (mes==feb) {
leto %= 4;
if (leto==neprest) {
dni=28;
} else {
dni=29;
}
}

pravi da je invalid... :D al pa sem jaz :)
Excuses are useless! Results are priceless!

Marjan ::

Super si tole izpeljal Thomas.

Hudo, res - kot sem že rekel.

Zdej grem pa malo optimizirat... :\


P.S.
Za tiste, ki ne veste kako bi optimizirali .c fajl. Preprosto ga skopirate v Critticall.exe, in se čudite kaj sledi v naslednjih nekaj trenutkih, urah...

Thomas ::

xbite, Tole je pravilna sintaksa in mora delat.
 $rinvar leto (0,3000) mes (1,12) $retvar dni $minimize lines off $sound on neprest=0; jan=1; feb=2; mar=3; apr=4; may=5; jun=6; jul=7; aug=8; sep=9; oct=10; nov=11; dec=12; if (mes==jan) { dni=31; } if (mes==feb) { leto %= 4; if (leto==neprest) { dni=28; } else { dni=29; } } if (mes==mar) { dni=31; } if (mes==apr) { dni=30; } if (mes==may) { dni=31; } if (mes==jun) { dni=30; } if (mes==jul) { dni=31; } if (mes==aug) { dni=31; } if (mes==sep) { dni=30; } if (mes==oct) { dni=31; } if (mes==nov) { dni=30; } if (mes==dec) { dni=31; } 
Man muss immer generalisieren - Carl Jacobi

Zgodovina sprememb…

  • spremenil: Sergio ()

bond007 ::

Enostavno ZAKON. Pa kul vmesnik. Sam a se da kak to stvar zaustavit, razen da zapreš program, kak STOP button will do.

Si že slučajno probu zoptimizirat program, z tistimi šahoskimi figurami.
Si poslal novico kaki bolj znani strani, univerzi,...
kak dolg si približno delal na tem?

Thomas ::

Za prestopna leta tole rajši, ker je nekoliko bolj komplicirano, kot da je samo vsako 4. prestopno.



$rinvar leto (0,3000) mes (1,12)
$invar leto(400) mes(2)
$invar leto(100) mes(2)


$retvar dni

$minimize lines off

$sound on

neprest=0;


jan=1;
feb=2;
mar=3;
apr=4;
may=5;
jun=6;
jul=7;
aug=8;
sep=9;
oct=10;
nov=11;
dec=12;

if (mes==jan) {
dni=31;
}
if (mes==feb) {
prest = 0;
n0 = 0;
n4 = 4;
n100 = 100;
n400 = 400;
ntmp = leto % n4;
if (ntmp == n0) {prest = 1;}
ntmp = leto % n100;
if (ntmp == n0) {prest = 0;}
ntmp = leto % n400;
if (ntmp == n0) {prest = 1;}
if (prest==neprest) {
dni=28;
} else {
dni=29;
}
}

if (mes==mar) {
dni=31;
}
if (mes==apr) {
dni=30;
}
if (mes==may) {
dni=31;
}
if (mes==jun) {
dni=30;
}
if (mes==jul) {
dni=31;
}
if (mes==aug) {
dni=31;
}
if (mes==sep) {
dni=30;
}
if (mes==oct) {
dni=31;
}
if (mes==nov) {
dni=30;
}
if (mes==dec) {
dni=31;
}



Sicer pa hvala za vse pohvale, predlogi se pazljivo preučujejo.
Man muss immer generalisieren - Carl Jacobi

darh ::

Thomas, itak.. tisto je bil samo mini testek -- uvod, da vidim če se z g. Kritičnim sploh razumeva...
Excuses are useless! Results are priceless!

Kostko ::

Thomas, a verzija za linux potem bo ? ker stvar bi res rad probal (pa ne na emulaciji), pa še c koda je itaq nekako prenosljiva med platformami (če ne uporablaš ravno kakih sistemskih libov). :\
Human stupidity is not convergent, it has no limit!

Thomas ::

Portanje na linux bo seveda moralo biti. Samo zdej ne vem rečt, kako zahtevna reč to je pravzaprav.

:)
Man muss immer generalisieren - Carl Jacobi

ciki57 ::

Kolika pa stane celotna verzija? Je kaj popusta za študente? :D
A ko se enkrat registriraš dobivaš potem zastonj tudi vse nadalnje verzije?

Thomas ::

Cena je $59 ali 59 € ali 10 kSIT.

Popust za študente je, če (kot site licence) zadevo kupi njihova fakulteta. Potem je lahko kar velik.

:)
Man muss immer generalisieren - Carl Jacobi

kopernik ::

Thomas:
glede na razpravo v temi piratiziranje, ne verjamem, da bodo zainteresirani hoteli kaj plačati. Razen, če niso spremenili svojega pogleda na celotno stvar... Vsekakor ti želim veliko uspeha pri prodaji.

lp

Thomas ::

Ja no, bomo videli. Računam nekako na vsakega tisočega programerja - ali pa še to ne.

:)
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

"Portanje na linux bo seveda moralo biti. Samo zdej ne vem rečt, kako zahtevna reč to je pravzaprav."

vidiš, na to bi bilo treba prej mislit >:D
Abnormal behavior of abnormal brain makes me normal...

jeti51 ::

Evo, da vidimo, kako bo izboljšal algoritem za iskanje največjega skupnega delitelja dveh števil. :)

if (number1 > number2) {
meja = number1;
} else {
meja = number2;
}

gcd = 1;

//v zanki preveri vsa stevila od med 1 in "meja" (=vecje izmed obeh stevil)
//ce i deli obe stevili brez ostanka, potem je novi gcd kar tale i
for (i = one; i &lsth;= meja; i += one) {
ostanek = number1 % i;
if (ostanek == zero) {
ostanek = number2 % i;
if (ostanek == zero) {
gcd = i;
}
}
}

Zgodovina sprememb…

  • spremenil: jeti51 ()

Thomas ::

Tkole je sintaktično pravilen vhod jetijevega programa:




$rinvar number1(1,1000) number2(1,1000)

$retvar gcd



if (number1 > number2) {
meja=number1;
} else {
meja=number2;
}
gcd = 1;
one = 1;
for (i = one; i <= meja; i += one) {
ostanek = number1 % i;
if (ostanek == zero) {
ostanek = number2 % i;
if (ostanek == zero) {
gcd = i;
}
}
}

Man muss immer generalisieren - Carl Jacobi

romci ::

Thomas: nikjer nisem zasledil, kako bi kot vhodno/izhodno spremenljivko deklariral vecdimenzionalno tabelo, ce je to mozno.

Ali je kak workaround, nekako kot tabelo tabel?
-- not all those who wander are lost...

Thomas ::

Samo ena dimenzija je. Strict C(ritticall) koda.

V tolažbo je edino to, da z enodimenzionalno tabelo se da izraziti poljubno dimenzionalne. Namreč naslovni prostor v pomnilniku je lepo po nenegativnih celih številih. Zato ima C++ večdimenzionalnost vedno hidden operacije množenja in deljenja. Če pa eksplicitno navedeš te pretvorbe iz linearnega v večdimenzionalno - kot zaheva C - pa so te transformacije tudi predmet optimizacije.

Če bomo naredili podporo večdimenzionalnim nizom, bo to na nivoju prevajalnika iz C++ v C.


:)
Man muss immer generalisieren - Carl Jacobi

darkolord ::

A ni jeba, ce nardis en algoritem pol ti ga pa tole kompletno obrne? :D

aja, zakaj meni program dela _strašno_ počasi... (drsnik rabi 1/2 sekunde da reagira, ...) ? :\

Zgodovina sprememb…

  • spremenilo: darkolord ()

ciki57 ::

Trik kako pripraviš algoritem za sortiranje, da ti testira različno dolge arraye in povrh še kaže časovno zahtevnost v odvisnosti od n (št. elementov):

$dimension abcd[100]

$rinvar n (10,100)
$rinvar abcd[] (1,1000)

$INVAR n (100)
$INVAR n (50)
$INVAR n (10)

$INVAR abcd[](290,274,832,383,....
$INVAR abcd[](882,958,822,425,709,6....
$INVAR abcd[](743,259,676,734,382,574,458,58....

$retvar abcd[]
$minimize lines 40
$sound on

zero=0; //number 0 stored in a variable
flip=1; //is still to sort

noe = n-flip; // noe je bil prej fiksno določen

Thomas ::

ciki57,

Dobr ugotavljaš ...

Vhodne $invar, $rinvar (n in abcd[]) morajo biti v enem $ukazu:


$rinvar n(10,100) abcd[](1,100)

Desni graf kaže odvisnost od prve navedene variable - v tem primeru od n.



BTW - a je kdo že probal jetijev program (v sintaksi kakor sem ga uploadal jest)?

Pri meni je prišel eni uri in pol do 4,3% (reduciral za dobrih 19/20!). Ker je shareware, bo čez pol ure odjenjal. >:D
Man muss immer generalisieren - Carl Jacobi

Zgodovina sprememb…

  • spremenil: Thomas ()

romci ::

Thomas: Men je v 45 min. prsu do zavidljivih 0.7% :) Looks like there WAS some room for improvement ;)


// The algorithm has been enhanced for 99.349%

$RINVAR number1(1,1000) number2(1,1000)
$RETVAR gcd

// int array[1]; int arr256[256];int number1=0;int number2=0;int meja=0;int gcd=0;int one=0;int i=0;
// int ostanek=0;int zero=0;int critticall1=0;int critticall2=0;int critticall3=0;int critticall4=0;

$BES
ostanek=number2%number1;
if (zero!=ostanek) {
ostanek=number1%ostanek;
number1=number2%number1;
while (ostanek!=gcd) {
meja=ostanek;
ostanek=number1%ostanek;
number1=meja;
}
}
gcd=number1;
$EES


Tole pa zevulirani programcek
-- not all those who wander are lost...

Zgodovina sprememb…

  • spremenil: romci ()

jeti51 ::

Kaj je pri meni dobil Critticall?

zero=0;
one=1;
number1=twonumbers[zero];
number2=twonumbers[one];
gcd=1;
$BES
meja=number2%number1;
if (meja==critticall3) {
gcd=number1;
} else {
one++;
ostanek=number1%meja;
if (ostanek==critticall1) {
gcd=meja;
}
meja=ostanek+critticall1;
for (i=one;i&nblt;=meja;i+=gcd) {
ostanek=number2%i;
if (ostanek==critticall3) {
ostanek=number1%i;
if (ostanek==critticall1) {
gcd=i;
}
}
}
}


Prišel je na nekje na 5.1%. Imam pa AMD 800, ki je bil pred tremi leti špica, danes pa je bolj tako-tako. Ampak vseeno, odlična izboljšava. :)

jeti51 ::

Grrr... kako se še pravilno napiše znak < v HTML?:8) (kot je presledek recimo "& nbsp;")

Zgodovina sprememb…

  • spremenil: jeti51 ()

OwcA ::

@jeti51: < lahko v HTMLju zapišeš kot &lt;
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Thomas ::

Evolucija je velik hec. Tudi digitalna. Se ne bi čudil, če bi kdo dobil samo 50% izboljšavo. :D

Zadevo je treba pač dosti časa goniti, pa tudi (verjetno) najboljši rezultat ne izostane.

Pomaga pa seveda tudi večkratno poganjanje in več računalnikov. (Več instanc! >:D)

Samo tale romcijev rezultat pa res ni slab!

:)
Man muss immer generalisieren - Carl Jacobi

jeti51 ::

Napisal naiven algoritem za kvadriranje (v zanki n-krat seštej n), pa je v minuti poenostavil na square = n*n. Kul.

Aja, pa en bug.. program sem po pomoti vgnezdil med dva $BES in se je zadeva sesula.>:D :D

asPeteR ::

Hja, jaz mislim, da je potrebno obvezno v GUI pod file implementirat se recimo "save curret evoluated code" in "stop" in "pause".

Kako Thomas pravis, da dela sam pol ure?? Nekaj postov nazaj si rekel, da shareware verzija dela okrog dve uri? (hja, nisem se privocil crittcallu, da bi delal vec kot 30 min na enem programu ...8-)

romci ::

Evolucija je res zanimiva stvar...
Ce deluje pa se digitalno - je pa next best thing since the evolution of bread into sliced bread 8-)
-- not all those who wander are lost...

Thomas ::

asPeter,

Po eni uri in pol, deluje še pol ure.

Hja ... pause pa stop pa save ... so (tudi) dobri predlogi.

romci,

Hehe .. maybe ... may be ... :)
Man muss immer generalisieren - Carl Jacobi

asPeteR ::

Aha, jah malo dvoumno si napisal ... No me veseli, da potem ostaja dve uri ...

Aja drugac mam jaz polno predlogov glede izbosave Critticalla ...8-)

Recimo zelo fino bi bilo, da se pozdravna stran premakne pod "help". Na pozdravno stran pa se fikne ze dafault prikaz evolucije ter graf ter prostor za real time prikaz programa(seveda bi bil default prazen, toda ko nalozimo kodo se ustrezno napolni) Skratka, osnovna ideja je, da je pozdravna stran fiksna ...

njok ::

Thomas, se pohvala z moje strani. Kar tako naprej! Jaz sem tudi poizkusil z jetijevim algoritmom pa sem v osmih minutah dobil tole:

// The algorithm has been enhanced for 73.9552%



 $RINVAR number1(1,1000) number2(1,1000)

 $RETVAR gcd



// int array[1]; int arr256[256];int number1=0;int number2=0;int
meja=0;int gcd=0;int one=0;int i=0;int ostanek=0;int zero=0;int
critticall1=0;int critticall2=0;int critticall3=0;int critticall4=0;



$BES

meja=number2;

one=1;

for (i=one;i<=meja;i+=gcd) {

    ostanek=number1%i;

    if (ostanek==zero) {

        ostanek=number2%i;

        if (ostanek==zero) {

            for
(gcd=number2;gcd!=number1;gcd+=one) {

               
gcd=i;

               
break;

            }

        }

        if (number1==i) {

           
break;

        }

    }

}

$EES


Na začetku je nekaj časa vztrajal na if (number1>number1) {...}, nato pa se je naenkrat znebil celotnega bloka. Opazovanje napredka je sploh zanimivo po prvih izboljšavah, ki so bolj radikalne. Like it. :))


Aja... stvarca ogreje procesor le za eno stopinjo manj kot f@h. :)

Sergio ::

evo... kako spravit tole v critticall form?
 #include <stdio.h> int main () { int stevilo; int i=0; int j=0; int zastavica; zastavica=0; stevilo = 150000; for (i=3; i<=stevilo; i++) { for (j=2; j<i; j++) { if ((i%j)==0) { printf ("%d ni prastevilo\n",i); zastavica=1; } if (zastavica==1) break; } if (zastavica==0) printf ("%d je prastevilo\n",i); zastavica=0; } } 
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Thomas ::

njok - hvala ;)

Ampak žal ti moram reči, da tistih 73% ni nič! :D

Evolucija včasih zaide v slepo ulico - in ta je ena. Zato je treba zadevo pognati ene parkrat, da dobiš nekaj takega kot je dobil romci.

Ali pa tole:



// The algorithm has been enhanced for 99.3679%

$MINIMIZE LINES 160
$RINVAR number1(1,1000) number2(1,1000)
$RETVAR gcd

// int array[1]; int arr256[256];int number1=0;int number2=0;
// int meja=0;int gcd=0;int one=0;int i=0;int ostanek=0;
//int zero=0;int critticall1=0;int critticall2=0;int critticall3=0;int critticall4=0;

$BES
number1=number1%number2;
number2=number2-number1;
number1=number1%number2;
if (number1!=one) {
number1=number2-number1;
number2=number2-number1;
number1=number1%number2;
number2=number2-number1;
number1=number1%number2;
number2=number2-number1;
number1=number1%number2;
if (number1>ostanek) {
number1=number2-number1;
number2=number2-number1;
number1=number1%number2;
number2=number2-number1;
number1=number1%number2;
while (number1!=zero) {
number2=number2-number1;
number1=number1%number2;
}
}
}
gcd=i+number2;
$EES





8-)
Man muss immer generalisieren - Carl Jacobi

Zgodovina sprememb…

  • spremenil: Sergio ()

Sergio ::

Thomas:
 $RETVAR prastevilo $BES nula=0; enka=1; dvojka=2; trojka=3; stevilo=0; prastevilo=0; zastavica=0; stevilo = 1500; for (i=trojka; i<=stevilo; i+=enka) { for (j=dvojka; j<i; j+=enka) { tmp = i; tmp = tmp%j; if (tmp==nula) { prastevilo=nula; zastavica=enka; } if (zastavica==enka) { break; } } if (zastavica==nula) { prastevilo=enka; } zastavica=nula; } $EES 
je to v redu?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Thomas ::

Sergio,


$dimension prafl[1001]
$retvar prafl[]
$minimize lines off

num1=1;
num0=0;
num3=3;
num2=2;
i=0;
j=0;
zastavica=0;
stevilo = 1000;
for (i=num3; i<=stevilo; i+=num1) {
for (j=num2; j<i; j+=num1) {
x=i%j;
if (x==num0) {
prafl[i]=num0;
zastavica=num1;
}
if (zastavica==num1) {break;}
}
if (zastavica==num0) {prafl[i]=num1;}
zastavica=num0;
}



Kot vidiš, ne printamo več. Luxus prevelik, namesto tega pišemo v tabelo. Tudi smo zgornjo mejo zmanjšali, da nekaj hitreje zevoluira - saj jo potem lahko spet povečamo.

:)
Man muss immer generalisieren - Carl Jacobi

Sergio ::

Joj... Folding sem zaradi tega sedaj ustavil ;)

Trenutno je na 99.8%. Sedaj pa gledam, če mu bo uspelo pogruntati, da mu ni treba gledati vseh števil, ampak samo praštevila. He :D
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Sergio ::

Krhm... Smo že na 80% :D
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Thomas ::

Mi smo na 49%. Vendar sploh ni nujno, da bosta obe instanci šli po isti poti. Bolj je nujno, da ne bosta.

Kar se pa tiče rahlo nižje temperature procesorja kot pri F@H, kot je opazil njok, je to zaradi grafike, ki jo pa vseeno precej stradamo. Zato ni čisto gladkega teka slidebara.

;)
Man muss immer generalisieren - Carl Jacobi

Sergio ::

Thomas: Je možno pripisati 78.6 prvotnega rezultata samo randomu ... ali je zadeva bolj optimizirana na Intelove procesorje?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.
««
4 / 29
»»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
757736 (5556) Senitel
»

Funkcija z logičnimi operaterji.... (strani: 1 2 )

Oddelek: Programiranje
905540 (4886) CaqKa
»

Petaflopsu naproti (strani: 1 2 3 )

Oddelek: Novice / Procesorji
1058843 (8843) Marjan
»

cene permutacij help please

Oddelek: Programiranje
262070 (1677) Sergio
»

kako definirtati prastevilo

Oddelek: Programiranje
143792 (3597) ooux

Več podobnih tem