in reply to More while issues

Posting again (think the last one didn't catch)

use strict; use warnings; my $needed_ys = 7; my $str = 'Why do you need 7 ys when cll you hve re as and cs'; my $orig = $str; my @stash = qw(a c); my @existing = $str =~ /y/g; my $missing = $needed_ys - @existing; foreach my $letter (@stash) { while ( $missing > 0 ) { last unless $str =~ s/$letter/y/; $missing -= 1; } } print 'Original: ', $orig, "\n"; print 'Result: ', $str, "\n";

Ynon

Replies are listed 'Best First'.
Re^2: More while issues
by Dandello (Monk) on Mar 05, 2011 at 00:41 UTC

    The algorithm needs randomness in it for the strings that have more than enough 'a's or 'c's.

    For example the first row might look like this: aaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaxxxxxxxxxx

    The second row might look like this: aaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaabxxxxxxxxxxx

    The 'a's are 'normal', the 'c' represents 'elite' and the 'b's are newcomers. 'x' is a placeholder. The next script assigns number values to each 'a', 'b', and 'c' based on weighted algorithms. 'b's have their own algorithm and so have no randomness assigned to them. The 'a's and 'c's have their initial positions randomly assigned and then carry down row by row unless total number of 'inheritance lines' needs to decrease - at which time it is replaced by a 'y' (representing a lost line of inheritance AKA a dead person) whose position is also randomly determined.

    The randomness is an essential part of the algorithm.