Permutationer

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

Permutationer

Inlägg av hanssolo »

Hej,

Jag skulle vilja få ett förslag på lösning till följande problem.

Jag har en fil med ord eller strängar. Det kan se ut så här:
  • hej
    som
    A
    56
…n-stycken
I detta fall är n=4

Jag önskar göra ett script/program (t ex i awk, bash, perl, pyton etc.) som genererar följande utifrån ovan nämnda fil:

hej
som
A
56
hejsom
hejA
hej56
somhej
somA
som56

hejsomA
hejsom56

hejsomA56
hejsom56A
hejAsom56
hejA56som
...
56Asomhej


Vet inte om permutationer är den korrekta bedömningen då man inte använder samtliga n-stycken vid varje tillfälle.
Kombinationer?

Hur som helst, så fattar ni säkert. Att pipe:a till sort -u efter körning för att eliminera dubletter är fullt tillåtet, bara det blir löst.
Jag är också fullkomligt medveten om att det snabbt blir ohyggligt många kombinationer/permutationer.

Hasse
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Permutationer

Inlägg av andol »

Åhh, en skoluppgift? :)

Vad har du för idéer själv? Vad har du prövat? Något särskilt du inte får till?
hanssolo
Inlägg: 12
Blev medlem: 08 mar 2010, 00:21
OS: Ubuntu

Re: Permutationer

Inlägg av hanssolo »

Ja vi säger att det är en skoluppgift, det blir bra.

Har inte gett mig på det än, men får väl göra ett försök vid tillfälle.

Har fått hjälp tidigare av duktigt folk här, så jag tänkte att någon kanske sitter på en one-liner som löser det hela.

/ H
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Permutationer

Inlägg av David Andersson »

hanssolo skrev:tänkte att någon kanske sitter på en one-liner som löser det hela.
Nej, men jag har ett par one-liners som inte löser ditt problem:

shuf - generate random permutations

Skapa en textfil med följande innehåll och spara som ord.txt

Kod: Markera allt

flygande
bäckasiner
söka
hwila
Sedan, detta kommando upprepade gånger

Kod: Markera allt

shuf ord.txt
Min första körning

Kod: Markera allt

 ~$ shuf ord.txt
hwila
söka
flygande
bäckasiner
Bash Brace Expansion

I bash expanderas "orden" {a,b,c,d} och {1..9} till flera "ord". Det första ger 4 stycken "ord" och det andra 9. Sätter man flera {} i samma "ord" bildas kombinationer. {a,b,c,d}{0..9} ger 4*9=36 stycken "ord". "\" framför mellanslag i följande kommando gör att alla {} ingår i samma "ord", som därmed skapar 2*2*2=8 nya "ord" (där varje "ord" ser ut att bestå av 3 vanliga ord):

Kod: Markera allt

echo {Yes,No}\ {we,you}\ {can,can\'t}\!
jabbadoo
Inlägg: 232
Blev medlem: 11 dec 2006, 21:09
OS: Ubuntu
Utgåva: 10.04 Lucid LTS
Ort: Sweden
Kontakt:

Re: Permutationer

Inlägg av jabbadoo »

Intressant problem faktiskt. Jag kommer inte på några one-liners dock. Om du ska få lite fart på det så skulle jag föreslå awk, men jag kan för lite sådant för att komma på något vettigt sätt att skriva det på. Jag gjorde en lösning i python, men det blev en 20-liner :-) Jag undrar vad du kom på för lösning, skulle vara intressant att se den...

(Davids brace expansion verkar mycket smidig, men jag har dålig erfarenhet från att arbeta med variabler som utgör delar av argument i bash)
Skriv svar

Återgå till "Terminalforum"