Hvordan finder jeg alle mulige bogstavkombinationer af givne bogstaver dog...

Tags:    php javascript

Jeg vil gerne have en php script eller javascript, der regner ud alle mulige bogstavkombinationer af givne bogstaver med maks antal bogstaver i output.

Dog ikke det samme bogstave fra det givne bogstaver mere end én gang med mindre den står i det givne ord mere en gang.

For eksempel:

- Givne bogstaver "ABCDE"

- Maks output bogstaver er 4

- Resultat kunne være OKAY: "CBED", "ACED", "DEAB", "BCDE" ...

- Men IKKE OKAY: "AABC" eller "BCCC"


Men hvis
--------
- Givne bogstaver "ABCCD"

- Maks output bogstaver er 4

- Resultat kunne være OKAY: "CBEC", "ACCD", "DABC", "ABCC" ...

- Men IKKE OKAY (mere end 2 C'er, da det står i givne ord): "AABC" eller "BCCC"

På forhånd tak



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 11 karma
Sorter efter stemmer Sorter efter dato
Det du søger er samtlige mulige permutationer af et sæt, s. Jeg har selv for nyligt haft brug for noget lignende og implementeret to algoritmer i javascript til at løse problemet. Mine algoritmer er generelle og kan bruges på alle typer objekter, men du skal vide at der findes mere effektive algoritmer når du kan håndtere strenge. (Se på Kleene's Star operator)

Se på funktionerne k_combinations og permutate her: https://github.com/saebekassebil/piu/blob/master/lib/combinatorics.js#L2

Fold kodeboks ind/udJScript kode 




Indlæg senest redigeret d. 31.07.2013 13:22 af Bruger #11328
Hej Jakob

Jeg prøver at bruge din kode men hvordan tester man det.

Min html kode til at teste din er:

***************************************************
<!DOCTYPE html>
<html lang="da">
<head>
<meta charset="UTF-8">
<title>Letter combiner</title>
<script type="text/javascript" charset="UTF-8" src="combinatorics.js"></script>
<script type="text/javascript">
var comb1, comb2 = [];
comb1 = k_combinations('abcde', 3);
comb2 = p('abcde');

document.getElementById('comb1').innerHTML = comb1;
document.getElementById('comb2').innerHTML = comb2;
</script>
</head>
<body>
<div id="comb1" style="border:1px solid red; margin-bottom: 20px; min-height:200px; display:block;"></div>
<div id="comb2" style="border:1px solid orange; margin-top: 20px; min-height:200px; display:block;"></div>
</body>
</html>

***************************************************



Indlæg senest redigeret d. 31.07.2013 15:36 af Bruger #8114
Hej Wissam - Du kan sætte din kode ind i en kodeboks, der gør det lettere for os allesammen at overskue din kode. Det gør du ved at indkapsle din kode i [ code ] [ /code ] (uden mellemrummene).

Ang. dit problem: Du kan ikke bruge min fil direkte i browseren (med mindre du benytter browserify el. lign). Du bliver nød til at fjerne henvisningerne til "exports" og give "permutate" funktionen et navn. Dette burde du allerede have set ved at få nogle fejl i din browser. Åbn Developer Tools i Chrome eller Firebug i Firefox.

Jeg tester min kode i konsollen i Developer Tools, men der er mange måder at gøre det på - at skrive til en HTML side er vidst den mindst effektive af dem, men burde stadig virke.

Mine to funktioner returnere og modtager arrays af elementer. Du skal altså skrive:

Fold kodeboks ind/udJScript kode 


Se eks: http://jsfiddle.net/A6gkq/



t