Permutationer med 5 tecken i js

Permalänk
Medlem

Permutationer med 5 tecken i js

Hej ska skriva en kod med permutationer i js med 5 olika tecken som användaren ska få bestämma. Skriver den ut ett visst ord ska den sluta och skriva en mening. Någon som hade kunnat hjälpa mig?
Har inte kommit längre än såhär...
let a = prompt("Skriv ett tecken");
let b = prompt("Skriv ett tecken");
let c = prompt("Skriv ett tecken");
let d = prompt("Skriv ett tecken");
let e = prompt("Skriv ett tecken");

Permalänk
Medlem

Ditt program innehåller nu fem olika variabler med innehåll som användaren trevligt nog fått mata in.

Vad vill du ska hända nu? Hur delar du upp ditt problem i mindre bitar så att inte frågan blir "hur löser jag hela uppgiften på en gång"?

Permalänk
Medlem
Skrivet av Ompax:

Ditt program innehåller nu fem olika variabler med innehåll som användaren trevligt nog fått mata in.

Vad vill du ska hända nu? Hur delar du upp ditt problem i mindre bitar så att inte frågan blir "hur löser jag hela uppgiften på en gång"?

Okej jag ska försöka, dessa 5 bokstäver som användaren skriver in ska flyttas runder så det bildar 120 olika "ord". Tex ABCDE blir ABCDE, EDCBA, BACDE mm. Sen får den kombinationen som tex ABEDC ska den stoppa koden och skriva ut att koden stoppades.

Permalänk
Medlem

Kontrollfråga: Hur mycket Javascript / programmering skulle du säga att du behärskar? Om jag nämner termer som arrayer, rekursion och att dela upp ett problem i subfunktioner är detta vardagsmat för dig?

Permalänk
Medlem
Skrivet av Ompax:

Kontrollfråga: Hur mycket Javascript / programmering skulle du säga att du behärskar? Om jag nämner termer som arrayer, rekursion och att dela upp ett problem i subfunktioner är detta vardagsmat för dig?

Verkligen inte, går första året på gymnasiet och försöker lära mig det ordentligt så.

Permalänk
Medlem
Skrivet av Tjenatjena1337:

Verkligen inte, går första året på gymnasiet och försöker lära mig det ordentligt så.

Borde tillägga att jag är bra på loopar och if satser och även helt okej på funktioner

Permalänk
Medlem

Om du inte vet hur du ska hantera ett problem, försök lösa ett delproblem eller en mindre komplex variant av samma problem. I ditt fall kan du istället för att generera permutationer av 5 saker börja med 1 sak. När du har löst det (vilket borde gå rätt snabbt), öka till att generera permutationer av 2 saker. Sedan 3, 4, och 5.

Permalänk
Medlem

Jag tror du får skriva ut uppgiften i sin helhet. Det är lite svårt att få grepp om exakt vad det är du ska göra och vad det är du har problem med.

Med det sagt tror jag inte att det är rätt tillvägagångssätt att spara varje enskild bokstav i en egen variabel.
Tänk dig hur komplicerat det skulle bli om du sedan helt plötsligt behöver 100 bokstäver istället.

Permalänk
Medlem

En bättre start på det du redan skrivit hade ju varit en funktion som tar en variabels värde och sedan skriver ut den. Som noMad17 skriver gör det scriptet lättare att utveckla senare.

Menar du att användaren matar in ett tecken åt gången och när en särskild sträng har bildats av dessa tecken så ska det skrivas ut något?

I så fall borde du läsa på lite om array push och kanske en while loop

Permalänk
Medlem
Skrivet av Tjenatjena1337:

Verkligen inte, går första året på gymnasiet och försöker lära mig det ordentligt så.

Ska du skriva koden som genererar permutationer? Det känns litet väl avancerat för din nivå. Du skulle i.o.f.s. kunna implementera Heap's algoritm utifrån pseudokod, men det känns som något man gör när man lär sig rekursion och generators.

Eller har du en funktion som genererar permutationer? Då får du beskriva ditt problem litet mer.

Permalänk
Medlem

Godtyckligt antal tecken

Har skrivit ett program i c++ som permuterar godtyckligt antal tecken. Även om t ex m tecken av ett uttryck på n tecken. Svaret presenteras i storleksordning efter tecknens AscII kod. Kärnan i programmet är följande:
1 uttrycket sorteras först i storleksordning.
2 en algoritm tar ett tecken ur den sorterade strängen.
3 jämför sedan detta tecken med alla de övriga tecknen i sorterade strängen.
4 algoritmen behöver också kolla t ex dubbletter.
5 är valda tecknet ok längs det i en ny sträng som hela tiden fylls på till m/n tecknen är valda.
6 Nu har vi ett värde.
7 sedan upprepas proceduren för nästa värde.

I programmet ingår också antal permutationer som presenteras först.

Permalänk
Entusiast

Jag tror det skulle hjälpa dig att åtminstone dela upp problemet i de helt oberoende och orelaterade delproblemen interaktion med användaren och generation av permutationer.

I praktiken skulle jag föreslå att du satsar på att skriva en funktion permutations som tar en sträng (eller en lista av tecken, men tecken finns inte riktigt i JS) som argument och returnerar en lista eller ett Set som innehåller alla permutationer av de tecken som ingår i strängen. Då kan du jobba på att få själva permuterandet att funka utan att ens behöva tänka på att interagera med användaren. Exempel på kodskelett:

function permutations(characters) { // … } console.log(permutations("abc"));

Om en liten smula TypeScript-syntax tillåts och du väljer att returnera en lista istället för ett Set skulle jag säga att permutations borde ha typen (characters: string) => Array<string> och att följande ska gälla:

  • permutations("") = []

  • permutations("a") = ["a"]

  • permutations("ab") = ["ab", "ba"] (eller i annan ordning)

  • permutations("ba") = ["ba", "ab"] (eller i annan ordning)

  • permutations("xyz") = ["xyz", "xzy", "yxz", "yzx", "zxy", "zyx"] (eller i annan ordning)

Följande egenskaper kan vara önskvärda, men inte nödvändigtvis:

  • permutations("xyz") = permutations("yxz")

  • permutations("aa") = ["aa"] (definitionsfråga)

Allt detta kan du testa huruvida permutations uppfyller utan någon som helst kod för interaktion med användaren, mer än i värsta fall ett anrop till console.log.

(Observera att likhetstecknen ovan varken betyder === eller ==, utan en mer abstrakt matematisk likhet som inte finns inbyggd i JavaScript, för både ["ab", "ba"] === ["ab", "ba"] och ["ab", "ba"] == ["ab", "ba"] är false.)