Liste mit beliebig langen Stellen



  • ;fricky schrieb:

    Big Brother schrieb:

    Das sieht nach einem Passwort Brutforce Programm aus, um das System zu hacken und einen schwulen Virus einzuschleusen.

    ok, aber dafür sind ja wiederholungen der zeichen in den wörtern nötig. dann wären wir ja doch wieder beim mod(irgendwas) -counter.
    🙂

    ja, iwie will ich einfach eine liste machen, und verstehen, wie sowas gehen soll, hat nix mit hacken oder was weiß ich!



  • VirusMaker schrieb:

    und deins würde schon passen, jop!

    dann nimm das doch, aber denk daran, erstmal wortlisten zu benutzen. eine reine brute-force attacke kann verdammt lange dauern *fg*
    🙂



  • VirusMaker schrieb:

    ja, iwie will ich einfach eine liste machen, und verstehen, wie sowas gehen soll, hat nix mit hacken oder was weiß ich!

    ob du hacken/cracken/sonstwas willst oder nicht, ist mir ziemlich wumpe (bin selbst extremer raubkopierer und file-sharer etc.). am besten, du postest hier mal eine folge von mindestens 50 strings hin, die so ein programm erzeugen soll, damit wir überhaupt wissen, was du möchtest. *fg* aus deinen erklärungen werde ich jedenfalls nicht schlau.
    🙂



  • ;fricky schrieb:

    VirusMaker schrieb:

    ja, iwie will ich einfach eine liste machen, und verstehen, wie sowas gehen soll, hat nix mit hacken oder was weiß ich!

    ob du hacken/cracken/sonstwas willst oder nicht, ist mir ziemlich wumpe (bin selbst extremer raubkopierer und file-sharer etc.). am besten, du postest hier mal eine folge von mindestens 50 strings hin, die so ein programm erzeugen soll, damit wir überhaupt wissen, was du möchtest. *fg* aus deinen erklärungen werde ich jedenfalls nicht schlau.
    🙂

    ich hab einen string:
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    bei 3 stellen soll er aus dem string ALLE kombis machen:

    abc
    abd
    abe
    abf
    abg
    abh
    abi
    abj
    abk
    abl
    abm
    abn
    abo
    abp
    abq
    abr
    abs
    abt
    abu
    abv
    abw
    abx
    aby
    abz
    acb
    acd
    ace
    acf
    acg
    ach
    bishin zu:
    zab
    zac
    zad
    ...
    zxy
    usw!
    

    er sollte aber alle aus dem char[] string machen, damit ich die danach auch ändern kann!

    also z.b. beim String "WAT":
    1 Stelle:
    W
    A
    T
    2 Stellen
    WA WT AW AT TW TA
    und bei 3:
    WAT WTA AWT ATW TAW TWA

    also alle kombis, so das aber 2 chars nicht gleichzeitig sein können! also nicht WAA orso!

    ich hoffe das ist jetzt klar



  • VirusMaker schrieb:

    ich hoffe das ist jetzt klar

    ok, ich versuche es nochmal:

    #include <stdio.h>
    
    char source[] = "WAT"; // <--- dein string dessen, permutationen ausgegeben werden sollen
    #define N (sizeof(source)-1)
    #define LIMIT N  // <--- anpassen, 1...N
    
    int use[N];
    int res[N];
    
    void mix (int i)
    { 
       int k;
       // ausgabe
       if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             putchar (source[res[k]]);
          puts("");
          return;
       }
       // neu mischen
       for (k=0; k<N; k++)
       { 
          if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
          }
       }
    }
    
    int main()
    { 
       mix(0);
    }
    

    ^^schau oben, LIMIT steht auf N, setze es auf (N-1) und es gibt dir

    WA
    WT
    AW
    AT
    TW
    TA

    aus. ist nur 'ne leichte modifikation meines vorschlags von vorhin, die 'fricky-extension' bewährt sich scheinbar. *fg*
    🙂



  • ;fricky schrieb:

    VirusMaker schrieb:

    ich hoffe das ist jetzt klar

    ok, ich versuche es nochmal:

    #include <stdio.h>
    
    char source[] = "WAT"; // <--- dein string dessen, permutationen ausgegeben werden sollen
    #define N (sizeof(source)-1)
    #define LIMIT N  // <--- anpassen, 1...N
    
    int use[N];
    int res[N];
    
    void mix (int i)
    { 
       int k;
       // ausgabe
       if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             putchar (source[res[k]]);
          puts("");
          return;
       }
       // neu mischen
       for (k=0; k<N; k++)
       { 
          if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
          }
       }
    }
    
    int main()
    { 
       mix(0);
    }
    

    ^^schau oben, LIMIT steht auf N, setze es auf (N-1) und es gibt dir

    WA
    WT
    AW
    AT
    TW
    TA

    aus. ist nur 'ne leichte modifikation meines vorschlags von vorhin, die 'fricky-extension' bewährt sich scheinbar. *fg*
    🙂

    hm...
    ok, source ist mir klar!

    aber für was genau ist use und res?

    und wenn ich das fertige wort wieder in einen string zu speichern, muss ich nur das machen, oder:

    if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             string2[k] = source[res[k]];
          string2[k]=0;
          printf("%s",string2);
          return;
       }
    

    und das:

    if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
           }
    

    das use[k]=0; wird dann ja nie ausgeführt!

    mfg



  • VirusMaker schrieb:

    und das:

    if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
           }
    

    das use[k]=0; wird dann ja nie ausgeführt!

    doch klar, 'mix' ist ja keine endlosschleife. setz 'nen breakpoint darauf, dann siehste, dass er da hinkommt.
    🙂



  • Hab auch was an Code:

    #define N 4 // Anzahl der Zeichen im Zeichenvorrat. 
    #define M 3 // Anzahl der Zeichen aus dem Zeichenvorrat, die permutiert werden (1 <= M <= N). 
    
    int main()
    { 
    	char abc[N] = "?*&!"; // Zeichenvorrat.
    	int s[M] = {0}; // Mappt die Zeichen aus dem Zeichenvorrat auf den Puffer.
    	char buf[M+1] = {0}; // Anzeige der Permutationen.
    
    	int i = M-1, j=i, A = 0, Z = N-1;
    	memset( buf, abc[0], M );
    
    	while(1){
    		while (s[i]<=Z) buf[i] = abc[s[i]], puts(buf), s[i]++;
    		s[i]--;
    		while (s[i]==Z && i>=0 ) s[i] = A, buf[i] = abc[A], i--;
    		if ( i>=0 ) s[i]++, buf[i] = abc[s[i]], i=j;
    		else break;
    	}
    
    	return 0;
    }
    

    :p



  • ;fricky schrieb:

    #include <stdio.h>
    
    char source[] = "WAT"; // <--- dein string dessen, permutationen ausgegeben werden sollen
    #define N (sizeof(source)-1)
    #define LIMIT N  // <--- anpassen, 1...N
    
    int use[N];
    int res[N];
    
    void mix (int i)
    { 
       int k;
       // ausgabe
       if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             putchar (source[res[k]]);
          puts("");
          return;
       }
       // neu mischen
       for (k=0; k<N; k++)
       { 
          if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
          }
       }
    }
    
    int main()
    { 
       mix(0);
    }
    

    ;fricky du gott! deins funzt wie ich es mir immer gewünscht hab 👍
    ich bin dir ja so dank bar!

    ich will das jetzt alle möglichkeiten in eine liste speichern!
    ich weiß leider nicht, wie das geht in c, nur in c++!

    und ich hoffe da kann mir auch wer weiterhelfen!

    if (i >= LIMIT)
       {
          for (k=0; k<LIMIT; k++)         string2[k] = source[res[k]];
          string2[k]=0; 
          of << string2 << endl;
          printf("%s\n",string2);
          return;
       }
    

    ich hab das jetzt so eingebaut, damit es alles in nen string kopiert, und in dann mit ofstream of;of.open("a.txt"); durch of << string2; reinspeichert!
    leider macht er nur immer das letzte, und überschreibt das alte, obwohl ich die immer geöffnet lass...

    wenn mir hier keiner hilft, muss ich ins c++ forum reinschreiben!
    aber ich will jetzt dafür nicht extra ein thema aufmachen!

    jedenfalls danke noch mal fricky!



  • Du solltest die Datei vorher, in der main() anlegen.
    Oder, um dich dem Code des göttliche fricky anzupassen, als globale Variable.
    ofstream of("a.txt"); //global ganz oben
    of<<string2; //woimmer du magst



  • volkard schrieb:

    Du solltest die Datei vorher, in der main() anlegen.
    Oder, um dich dem Code des göttliche fricky anzupassen, als globale Variable.
    ofstream of("a.txt"); //global ganz oben
    of<<string2; //woimmer du magst

    stimmt 😃
    hab vergessen, das die funktion ja immer wieder aufgerufen wird!

    danke euch beiden, kann geclosed werden 🙂

    und allen ein fröhliches weihnachten :xmas1:



  • Big Brother schrieb:

    Hab auch was an Code:

    das ist ja wieder so'n counter. davon gibts in diesem thread schon 5 oder 6 varianten.

    VirusMaker schrieb:

    deins funzt wie ich es mir immer gewünscht hab

    siehste wohl, dann hat es der griesgrämige nwp2 völlig grundlos zerrissen. *fg*

    volkard schrieb:

    Du solltest die Datei vorher, in der main() anlegen.
    Oder, um dich dem Code des göttliche fricky anzupassen, als globale Variable.
    ofstream of("a.txt"); //global ganz oben
    of<<string2; //woimmer du magst

    na klar, und schon hat er's mit code zu tun, der vor der 'main' aufgerufen wird. auch ein ganz tolles feature von c++ *gg*
    🙂



  • ;fricky schrieb:

    na klar, und schon hat er's mit code zu tun, der vor der 'main' aufgerufen wird. auch ein ganz tolles feature von c++ *gg*
    🙂

    Ist nur die Folge, weil Du so viel mit globalen Variablen rummachst, was auch in C eine Sünde ist, normalerweise tut man sowas nicht machen.



  • Ja was nun? Ist es nun eine Sünde, oder macht man es einfach nur "normal" nicht? Was ist "unnormal"? Ohne etwas Erklärung ist diese Regel einfach etwas zu "religiös", findest du nicht? 😉



  • volkard schrieb:

    Ist nur die Folge, weil Du so viel mit globalen Variablen rummachst, was auch in C eine Sünde ist, normalerweise tut man sowas nicht machen.

    im prinzip haste recht, aber hier haben wir's nur mit 'nem überschaubaren 30-zeiler zu tun, da ist es nicht so schlimm. und falls man globalvariablen-verseuchten code in ein grösseres programm integrieren wollte, könnte man immer noch 'static' vor die variablen setzen, dann sind sie nur noch datei-global. direkte zugriffe auf globale daten machen code auch meistens kleiner und schneller, weil 'ne indirektionsstufe fehlt (oder man greift über restrict-pointers darauf zu).
    🙂



  • Tim schrieb:

    Ja was nun? Ist es nun eine Sünde, oder macht man es einfach nur "normal" nicht? Was ist "unnormal"? Ohne etwas Erklärung ist diese Regel einfach etwas zu "religiös", findest du nicht? 😉

    Globale Variablen sind ungünstig weil man den Überblick verliert. Bei jeder globalen Variablen muss man genau wissen was sie tut und in welcher Situation in welcher Funktion man was mit ihnen machen muss. Und wenn eine globale Variable Blödsinn enthält sucht man sich dumm und dämlich herauszufinden welche Funktion in welcher Situation Blödsinn macht. Bei 30 Zeilen ist es egal, aber bei >1000 Zeilen ist jede globale Variable eine Zumutung.

    Edit: Es ist vergleichbar mit goto, mächtig und unkontrollierbar. Nicht ganz so schlimm wie goto, aber es geht in die Richtung.



  • nwp2 schrieb:

    Ich habe das mal in python zusammengehackt:

    ...
    def permutationen(liste):
        ...
            for l in permutationen(liste[1:]):
        ...
    

    Das geht so nicht, weil Python die Rekursion auf C abbildet:
    http://mail.python.org/pipermail/python-dev/2006-January/059652.html

    Zwar gibt es Stackless Python (ein Minoritätsprojekt), aber solche Kindereien sind für eine "Very High Level Language" echt lachhaft. Wenn schon cheaten, warum nicht so:

    (define (char) (amb 'a 'b 'c 'd))
    
    (let ((sol (list (char) (char) (char) (char))))
      (require (distinct? sol))
      sol)
    

    🙂



  • nwp2 schrieb:

    Globale Variablen sind ungünstig weil man den Überblick verliert. Bei jeder globalen Variablen muss man genau wissen was sie tut und in welcher Situation in welcher Funktion man was mit ihnen machen muss. Und wenn eine globale Variable Blödsinn enthält sucht man sich dumm und dämlich herauszufinden welche Funktion in welcher Situation Blödsinn macht. Bei 30 Zeilen ist es egal, aber bei >1000 Zeilen ist jede globale Variable eine Zumutung.

    Trivial beherrschbar durch Konventionen wie "Globale Größe darf nur von definierendem Modul beschrieben werden" und Namenskonventionen. Null Problem. Ich rede hier von Projekten >100k Codezeilen.

    Was du vielmehr beschreibst sind hirnlose Dahincoder. Und bei denen bricht das Kartenhaus eh irgendwann zusammen. Sinnfreier Einsatz von globalen Variablen und goto fördert hier sogar das gute "crash early" Prinzip 👍



  • nwp2 schrieb:

    Es ist vergleichbar mit goto, mächtig und unkontrollierbar. Nicht ganz so schlimm wie goto, aber es geht in die Richtung.

    was hältste denn von: http://en.wikipedia.org/wiki/Setjmp.h das dürfte, deinem verständnis nach, doch einem weltuntergang gleichkommen, ne? *fg*
    btw, ich glaube ich bastel mal 'nen sortieralgorithmus nur mit throw/try/catch, den poste ich ins C++-forum mit der frage: 'hi, ich lerne gerade in C++. hier mein erstes programm, bitte um verbesserungsvorschläge.' *gg*
    🙂



  • Ach, macht doch was ihr wollt. Von mir aus benutzt goto mit globalen Variablen und buffer[wirdschonreichen], von 17 Klassen geerbt und über den überladenen Operator ! aufgerufen.
    Genies wie ihr seid ist das überhaupt kein Problem damit perfekten Code zu schreiben. Vielleicht solltet ihr aber bedenken, dass Leute die hier Fragen stellen keine Genies sind und auf verständlichen Code angewiesen sind.

    Btw von Namenskonventionen alla INT_var und CHARP_string halte ich garnichts.


Anmelden zum Antworten