Seite 2 von 5

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 13:35
von HaWe
es gab auch viele verschiedene 3.3.8.9.er
Hauptsache, du hast jetzt die letzte, jetzt musst du nur noch das letzte test-release drüberkopieren (das zip NICHT mit Windows extrahieren, sondern mit WinZip oder WinRar!!!!!) -
und schon hast du 3.3.8.10!!
:)

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 14:14
von Nicholas
er arbeitet jetzt schon seit ca 14:50
wie kann man eigentlich über nxc den internen timer benutzen?

Nicholas

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 14:48
von HaWe
CurrentTick()

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 15:26
von Nicholas
ich hab mal nicht aufgepasst und als ich mal wieder auf den nxt geschaut hab war er aus
bedeutet das er war durch oder ist er nur in den stand by modus gegangen

Nicholas

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 15:31
von HaWe
ja, du musst im OnScreen-Menue unter Settings das automatische Ausschalten deaktivieren
Da fällt mir ein: Man sollte auch besser den Counter im Programm als LongInt (unsigned long) definieren.
Die Ausgabezeile heißt dann:

Code: Alles auswählen

printf1(0, 8,"%d", count);

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 15:37
von Nicholas

Code: Alles auswählen

#define printf1( _x, _y, _format1, _value1) { \
  string sval1 = FormatNum(_format1, _value1); \
  TextOut(_x, _y, sval1); \
}

string hamlet="sein oder nicht",   // Kurzform
        monkey="               ",
        buf1, buf2, buf3;
char i=0;
byte c;
bool fertig=false;
float count;

task main(){
  while(!fertig) {
    for (i=0; i<15; i++) {
      c=(rand()%27)+96;
      if (c==96) c=32;
      monkey[i]=c;
    }
    count+=1;

    // monkey=hamlet;  // ??

    buf1=SubStr(monkey, 0, 15);

    //buf2=SubStr(monkey,16, 13);
    //buf3=SubStr(monkey,29, 17);

    NumOut (0,48,CurrentTick()-FirstTick ())
    TextOut(0,40, buf1);
    //TextOut(0,32, buf2);
    //TextOut(0,24, buf3);printf1(0, 8,"%e", count);
    while (ButtonPressed(BTNCENTER, false)) ;  // freeze

    if(monkey==hamlet) {
      fertig=true;
      while(1);
    }
  }

}

ich hab mal den timer eingefügt

Nicholas

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 15:39
von HaWe
und jetzt noch
unsigned long count;
statt float

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 17:07
von HaWe
ich hab noch was schönes für dich:
formatierte Zeitausgabe mit Tagen, Stunden, Minuten, Sec, Millisec.
Man kann es jetzt ntl auch noch etwas mit anderen lustigen Beiträgen auflockern und möglicherweise abkürzen:

Code: Alles auswählen

#define printf1( _x, _y, _format1, _value1) { \
  string sval1 = FormatNum(_format1, _value1); \
  TextOut(_x, _y, sval1); \
}


#define clock() (CurrentTick()-FirstTick())

string gettimeofday(unsigned long lTime) {
  int s100, sec, min, hour, day;
  string sTime;
 
  s100=lTime%1000;
  lTime/=1000;
  sec=lTime%60;
  lTime/=60;
  min=lTime%60;
  lTime/=60;
  hour=lTime%24;
  lTime/=24;

  sTime=StrCat(FormatNum("%d",lTime),"d ",FormatNum("%02d",hour),":",FormatNum("%02d",min),"'",FormatNum("%02d",sec),".",FormatNum("%03d",s100));
  return(sTime);
}


string hamlet="sein oder nicht",   // Kurzform
       monkey="               ",
       n_bock="kein bock mehr ",   // Null Bock
       marvin="schalte mich ab",   // Marvin
       arthur="gibts hier tee ",   // Arthur
       zaphod="pangalaktischer",   // Zaphod
       slarty="kraklige kueste",   // Slartybarthfass
       vogonp="bindelwoerdeln ",   // Prostetnik Vogon Jeltz
       buf1, buf2, buf3;
char i=0;
byte c;
unsigned long count;

task main(){
  while(1) {
    for (i=0; i<15; i++) {
      c=(rand()%27)+96;
      if (c==96) c=32;
      monkey[i]=c;
    }
    count+=1;

    buf1=SubStr(monkey, 0, 15);

    //buf2=SubStr(monkey,16, 13);
    //buf3=SubStr(monkey,29, 17);


    TextOut(0,40, buf1);
    //TextOut(0,32, buf2);
    //TextOut(0,24, buf3);

    printf1(0, 8,"%d", count);
    TextOut(0, 0, gettimeofday(clock()) );

    while (ButtonPressed(BTNCENTER, false)) ;  // freeze
    if((monkey==hamlet)||(monkey==n_bock)||(monkey==marvin)||(monkey==arthur)||(monkey==zaphod)||(monkey==slarty)||(monkey==vogonp))
      { while(1); }
  }
}

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 19:39
von hergipotter
Mal ne Frage. Vielleicht check ich auch grad irgendwas nich aber ist es bei eurem Programm nicht so, dass immer zufällig 15 Zeichen in den String geschrieben werden und dann geguckt wird ob diese 15 Zeichen mit dem hamlet-Text übereinstimmen?

Das wäre doch aber falsch, weil angenommen die Affen schreiben erst:

"xyzsein oder ni"

und dann im nächsten Durchlauf

"chtasdfghjklöä#"

dann würde das dieses Programm ja nicht erkennen, die Affen hätten aber in Wirklichkeit nacheinander "sein oder nicht" getippt!

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 19:44
von HaWe
ja, da hast du recht.
da könnte man vllt ne Art Schieberegister nehmen,
das hinterste Element fliegt raus,
alles eins nach hinten,
das vorderste wird neu randomisiert.
Dann wird mit dem Muster verglichen.

Guter Hinweis, danke! :)

Code: Alles auswählen

#define printf1( _x, _y, _format1, _value1) { \
  string sval1 = FormatNum(_format1, _value1); \
  TextOut(_x, _y, sval1); \
}


#define clock()  (CurrentTick()-FirstTick())

string gettimeofday(unsigned long lTime) {
  int s100, sec, min, hour, day;
  string sTime;
 
  s100=lTime%1000;
  lTime/=1000;
  sec=lTime%60;
  lTime/=60;
  min=lTime%60;
  lTime/=60;
  hour=lTime%24;
  lTime/=24;

  sTime=StrCat(FormatNum("%d",lTime),"d ",FormatNum("%02d",hour),":",FormatNum("%02d",min),"'",FormatNum("%02d",sec),".",FormatNum("%03d",s100));
  return(sTime);
}


string hamlet="sein oder nicht",   // Kurzform
       monkey="               ",
       n_bock="kein bock mehr ",   // Null Bock
       marvin="schalte mich ab",   // Marvin
       arthur="gibts hier tee ",   // Arthur
       zaphod="pangalaktischer",   // Zaphod
       slarty="kraklige kueste",   // Slartybarthfass
       vogonp="bindelwoerdeln ",   // Prostetnik Vogon Jeltz
       buf1, buf2, buf3;
char i=0;
byte c;
unsigned long count;

task main(){
  while(1) {
    for (i=14; i>0; --i) {
      monkey[i]=monkey[i-1];
    }
    c=(rand()%27)+96;
    if (c==96) c=32;
    monkey[0]=c;
    count+=1;

    buf1=SubStr(monkey, 0, 15);

    //buf2=SubStr(monkey,16, 13);
    //buf3=SubStr(monkey,29, 17);


    TextOut(0,40, buf1);
    //TextOut(0,32, buf2);
    //TextOut(0,24, buf3);

    printf1(0, 8,"%d", count);
    TextOut(0, 0, gettimeofday(clock()) );
   
    // Wait(500); // for testing

    while (ButtonPressed(BTNCENTER, false)) ;  // freeze
    if((monkey==hamlet)||(monkey==n_bock)||(monkey==marvin)||(monkey==arthur)||(monkey==zaphod)||(monkey==slarty)||(monkey==vogonp))
    {
      PlaySound(SOUND_FAST_UP);
      while(1);
    }
  }
 
}

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 21:38
von Nicholas
bei mir kommt auf dem nxt nur
p


1
0d 00:00'00.008
raus ich denk du hasts nur auf einen Buchstaben eingestellt weil p passt zu pangalaktischer

nicholas

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 21:48
von HaWe
bei mir kommt bei obigem Code (direkt über deinem obigen Post) nach 22 sec dieser Screenshot :
hamlet.jpg
hamlet.jpg (7.91 KiB) 3180 mal betrachtet

(was gewünscht sinnvolles wird wschl erst nach 1 Mio Jahren herauskommen...)

ps:
nach 6 Minuten das 2. Bild....
hamlet2.jpg
hamlet2.jpg (8.34 KiB) 3180 mal betrachtet


und hier ein Video...
hamlet_000.zip
(8.92 KiB) 206-mal heruntergeladen

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 11. Jun 2011 22:15
von HaWe
hast du vllt noch nicht das neueste bricxcc test_release samt neuester fw aufgespielt (was du eigtl solltest...)?

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 12. Jun 2011 09:03
von NXT pro
Ich rechne gerade die Dauer aus, die der NXT dafür theoretisch brauchen würde:
Nach dieser Rechnung (hoffe die ist richtig):
(100000/(15*60*1000))/0.0000000000000000000041735)/1000/60/60/24/365
Dabei ist 100000 die Zahl, die er in 15 Minuten geschafft hat, diese wird durch 15 Minuten in Millisekunden geteilt.
Und 0.0000000000000000... ergibt sich aus 7(Hamlets)/26(Buchstaben)^15(Anzahl der Buchstaben der Hamlets).
Dann wird es in Sekunden, Minuten, Stunden, Tage und Jahre umgewandelt.
Das Ergebnis (ohne Stellen nach dem Komma): Der NXT würde 844209948 Jahre brauchen.

Re: Nxc: Infinite-Monkey-Theorem

Verfasst: 12. Jun 2011 09:48
von HaWe
ja, 1 Milliarde Jahre habe ich auch schon kalkuliert (mit 100 Versuchen pro Sekunde), war mir aber nicht sicher, ob das stimmt - - aber das gilt ja auch nur, wenn man alle Möglichkeiten systematisch durchprobiert (und bis zum Schluss suchen muss), nicht, wenn man randomisiert: da kann es schon nach 10 sec geschafft sein - oder erst am Ende des Universums.

Ich habe jetzt den Suchstring mal auf "hamlet" verkleinert.
Vllt haben wir ja jetzt die Chance es zu erleben...^^

Code: Alles auswählen

#define printf1( _x, _y, _format1, _value1) { \
  string sval1 = FormatNum(_format1, _value1); \
  TextOut(_x, _y, sval1); \
}


#define clock()  (CurrentTick()-FirstTick())
#define time(_0_) CurrentTick()

string gettimeofday(unsigned long lTime) {
  int s100, sec, min, hour, day;
  string sTime;
 
  s100=lTime%1000;
  lTime/=1000;
  sec=lTime%60;
  lTime/=60;
  min=lTime%60;
  lTime/=60;
  hour=lTime%24;
  lTime/=24;

  sTime=StrCat(FormatNum("%d",lTime),"d ",FormatNum("%02d",hour),":",FormatNum("%02d",min),"'",FormatNum("%02d",sec),".",FormatNum("%03d",s100));
  return(sTime);
}


string hamlet="hamlet",   // Kurzform
       monkey="      ";
char i=0;
byte c;
unsigned long count;

task main(){
  while(1) {
    for (i=6; i>0; --i) {
      monkey[i]=monkey[i-1];
    }
    c=(rand()%27)+96;
    if (c==96) c=32;
    monkey[0]=c;
    count+=1;

    TextOut(0,40, monkey);

    printf1(0, 8,"%d", count);
    TextOut(0, 0, gettimeofday(clock()) );
   
    // Wait(500); // for testing

    while (ButtonPressed(BTNCENTER, false)) ;  // freeze
    if (monkey==hamlet)
    {
      PlaySound(SOUND_FAST_UP);
      while(1);
    }
  }
}