Archief - [PERL] ieder element in string vervangen door ander character

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

TRC

Legacy Member
Even het probleem schetsen:
je hebt een inkomende string, bvb "ABC" en hiervan moeten alle mogelijke varianten op berekend worden waarbij ieder element vervangen wordt door "+".
In dit geval zou de uitkomst dus:
"ABC"
"+BC"
"A+C"
"AB+"
"++C"
"A++"
"+B+"
"+++"

Het is de bedoeling dat ik dit later voor grotere strings kan gebruiken (rekening houden met rekentijd) en dat er kan meegegeven worden hoeveel elementen er niet mogen veranderd worden (bijvoorbeeld dat er steeds minstens 1 niet "+"-teken in de string staat.
Kan iemand me hier mee helpen?

Cycloon

Legacy Member
Code:
my $s = "ABC";

my @str = split '',$s;
my %combinations = ();

vervang(0,\%combinations,@str);

print $_,"\n" for(keys %combinations);

sub vervang {
	my $n = shift;
	my $combs = shift;
	my @str = @_;
	if($n<@str) {
		$combs->{join "",@str} = defined;
		vervang($n+1,$combs,@str);
		$str[$n] = "x";
		$combs->{join "",@str} = defined;
		vervang($n+1,$combs,@str);
	}	
}

Echt performant ga je dit nooit krijgen natuurlijk omdat dit een 2^n probleem is.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan