[Exercise] Genera stringhe

Stato
Discussione chiusa ad ulteriori risposte.

imported_coed

Utente Silver
15 Gennaio 2010
0
0
0
52
Questo esercizio e' abbastanza figo.

Bisogna fare in modo che l'utente selezioni una stringa e, generi altre stringhe di lunghezza uguale a quella predefinita, finche' le due stringhe non sono uguali. Quando accade cio', bisogna mostrare il numero di cicli effettuati perche' le due stringhe fossero uguali.

Soluzione: http://sprunge.us/aZKa?c

Ho omesso i char poiche' impiegava ere di ere se possedeva una lunghezza superiore a 3 caratteri (escludendo che generava doppioni di stringhe).
 
Codice:
import random
def gs(s):
    c=0
    while True:
         return c if sum([chr(random.randint(97,122)) for a in xrange(len(s))])!=s else False
         c+=1

non l'ho testato, ma a livello di algoritmo dovrebbe funzionare
 
lispish \ò/
Codice:
(let* ((original (string (read-line)))
 (len (length original))
 (new (format nil "~{~a~^~}" (loop for x from 0 to (1- len) collecting x))))
  (do ((tries 0 (1+ tries)))
   ((string= original new) (format t "~a" tries))
    (dotimes (i len)
      (setf (char new i) (code-char (+ 32 (random 94)))))))
 
in falcon
Codice:
>> "Inserisci una stringa=> "
string = input()
length = string.len()

ascii_a = \[ > "a"[*0] \]
ascii_z = \[ > "z"[*0] \]

cnt = 0

loop
   ++cnt
   s = strMerge( [].comp( [0:length], { x => chr( random( ascii_a, ascii_z ) ) } ) )
end s == string

> @"Stringa trovata in $(cnt) passaggi"
 
visto che ho avuto un po' di tempo lo sistemato un po' :D
Codice:
alf = []
26.times do |n|
  alf << (96 + n).chr
end
STR = "ciao"
m = 0
while true
  m = m + 1
  par = ""
  STR.length.times do |x|
    par += alf[rand(26)]
  end
  if par == STR
    print "trovata ",STR," dopo ", m," tentativi..\n"
    exit
  end
end
 
Il mio in Python:
Codice:
import random
def f(s):
	n = '';c = 0
	while s != n:
		n = ''.join([chr(random.randint(97, 122)) for x in xrange(len(s))])
		c += 1
	return c
 
visto che non avevo niente da fare ho sbirciato sulla sezione esercizi XD
io uso maggiormente il c#(cosa che non vedo molto qui...se mi date anche un motivo almeno capisco se è un linguaggio scarso)

l'ho fatto con la oop perchè veniva più carino...

Codice:
char[] vet;
        Random k = new Random();

        private void b_bruteforce_Click(object sender, EventArgs e)
        {
            string testo = "";
            bool continua = false, fatto = false;
            int rand = 0, i = 0, cont = 0;
            if (t_text.Text == "")
            {
                MessageBox.Show("Textbox vuota, inserisci una stringa");
                l_cicli.Text = "";
                l_output.Text = "";
            }
            else
            {
                testo = t_text.Text;
                vet = new char[testo.Length];
                vet = testo.ToCharArray();
                while (fatto == false)
                {
                    rand = k.Next(65, 123);
                    continua = false;
                    while (continua == false)  //PRENDE SOLO GLI ASCII GIUSTI DELLE LETTERE
                    { 
                        if ((rand >= 91) && (rand <= 96))
                        {
                            continua = false;
                            rand = k.Next(65, 123);
                        }
                        else
                        {
                            continua = true;
                        }
                    }
                    if (i < testo.Length)
                    {
                        if (vet[i] == Convert.ToChar(rand))
                        {
                            i++;
                            l_output.Text += Convert.ToChar(rand);
                        }
                        cont++;
                        l_cicli.Text = cont.ToString();
                    }
                    else
                    {
                        fatto = true;
                    }
                }

            }
        }

sicuramente è molto peggio dei vostri vedendo anche la lunghezza del mio XD...comunque a mia discolpa posso dire che ho messo le lettere sia maiuscole che minuscole, magari mi potete dare anche qualche consigilio per migliorarlo
 
Stato
Discussione chiusa ad ulteriori risposte.