Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89

    [C#] Codice per generare stringhe BruteForce

    C# ho una stringa contenente tutti i caratteri che voglio usare...
    codice:
    string stringa = "abcd";
    ora vorrei avere una stampa infinita di tutte le possibili combinazioni con questi 4 caratteri, ad esempio:
    a
    b
    c
    d
    aa
    ...
    dddd
    non voglio che il programma si fermi qua ma voglio che vada avati con
    aaaaa
    aaaab
    ...
    ddddd
    e così via...
    Ultima modifica di Mood98; 10-01-2017 a 13:54

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Con dei cicli for dovresti cavartela... prova qualcosa altrimenti sembra una richiesta di pappa pronta ...

    P.S. Non hai ancora capito che queste richieste vanno nella sezione .NET?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non hai ancora capito che queste richieste vanno nella sezione .NET?
    Sposto...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    in realtà speravo in "pappa pronta", perchè non ho idea di come mettere i cicli per fare questa cosa, una volta ottenuto il codice capivo la logica... altrimenti non ne esco.

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Parti con una collezione di parole che contiene una sola collezione vuota.

    Per ogni lettera nell'alfabeto aggiungi la lettera a ogni parola nella collezione e raccogli i risultati.

    Per ottenere le parole di lunghezza n ripeti n volte lo step precedente usando come lista di parole quella generata dalla precedente esecuzione.

    Se nel mentre collezioni i risultati dei vari step ottieni la lista di parole [1-n].

    Con collezioni immutabili e linq sono una decina di righe:
    codice:
    using System;using System.Collections.Generic;
    using System.Collections.Immutable;
    using System.Linq;
    
    
    namespace Example
    {
        class Program
        {
            static void Main(string[] args)
            {
                foreach(string w in upToN("ab", 3)) {
                    Console.WriteLine(w);
                }
                Console.ReadKey();
            }
    
    
            private static IEnumerable<ImmutableList<char>> step(string alphabet, IEnumerable<ImmutableList<char>> prev)
            {
                return
                    from c in alphabet
                    from w in prev
                    select w.Add(c);
            }
    
    
            private static IEnumerable<string> upToN(string alphabet, int n)
            {
                List<string> words = new List<string>();
                IEnumerable<ImmutableList<char>> prev = new List<ImmutableList<char>>(){ ImmutableList<char>.Empty };
                for(int i = 0; i < n; ++i)
                {
                    prev = step(alphabet, prev);
                    words.AddRange(
                        from w in prev
                        select String.Concat(w)
                    );
                }
                return words;
            }
        }
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Ah, dimenticavo, se vuoi mantenere le parole ordinate rispetto all'ordine di alphabet:
    a
    b
    aa
    ab
    ba
    bb

    dovresti fare un reverse prima di generare la stringa, tuttavia il set non cambia...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    grazie mille!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.