Sida 1 av 1

Permutationer

Postat: 08 maj 2012, 21:03
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

Re: Permutationer

Postat: 08 maj 2012, 22:18
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?

Re: Permutationer

Postat: 08 maj 2012, 23:01
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

Re: Permutationer

Postat: 09 maj 2012, 15:14
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}\!

Re: Permutationer

Postat: 26 maj 2012, 15:53
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)