RDW #5 - Raetsel der Woche Nummer 5
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Regeln: * Bitte nicht vor Ablauf der ersten 72 Stunden ( = drei Tage )
~~~~~~~ nach Veroeffentlichung Hinweise (Spoiler) oder Loesungen ver-
oeffentlichen!
* Wenn diese Zeit abgelaufen ist, werde ich einen Thread mit
passendem Titel erstellen, in dem die Loesungen gepostet werden
und diskutiert werden koennen.
* Die Loesungen sollten nicht nur gepostet, sondern auch an mich
gemailt werden, damit ich sie testen, "bewerten" und zu-
sammenfassen kann.
Die Adrese dafuer lautet:
crian <---AT---> perl <---MINUS---> community <---DOT---> de
Im Betreff sollte 'RDW' und die Nummer des Raetsels stehen.
Hilfreich waere neben dem Quellcode der Username im Forum
sowie Perl- und OS-Version, falls Du diese kennst.
* Verstaendnisfragen duerfen in diesem Thread gestellt werden, aber
Tipps und (Teil-) Loesungen sind hier unerwuenscht.
* Ich werde die eingeschickten Programme im Netz zur Verfuegung
stellen, so dass gerade lange Quellcodes nicht (komplett)
gepostet werden muessen.
* Zur Verwendung von Modulen: Ich moechte diese nicht generell
ausschliessen, aber wenn quasi die komplette Aufgabe durch
die Verwendung eines Moduls ersetzt werden kann, ist dies
vielleicht nicht der Sinn der Aufgabe gewesen.
Aufgabe: Schreibe eine Funktion, die zu einem gegebenen Skalar die Menge
~~~~~~~~ aller Permutationen seiner Zeichen zurueckgibt.
(Golfvariante: Skalar von STDIN oder als Parameter, Permutationen
ausgeben.)
Dabei werden die Zeichen so behandelt, als waeren sie alle ver-
schieden (die Eingabe von 'aaa' fuehrt zur Ausgabe von 'aaa', 'aaa',
'aaa', 'aaa', 'aaa', 'aaa').
Beispiel: Eingabe '123'
Ausgabe '123', '132', '213', '231', '312', '321'
Die Anzahl der ausgegebenen Skalare ist n! (n Fakultaet), wobei
n die Laenge des Eingabestrings ist. Jeder ausgegebene String hat
natuerlich die gleiche Laenge wie die Eingabe.
(Falls jemand nicht weiss, was n Fakultaet ist:
0! := 1
n! := n * (n-1)!
n! = 1 * 2 * 3 * ... * (n-1) * n
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
10! = 3628800
20! = 2.43290200817664e+018
99! = 9.33262154439441e+155
[ perl -e "$x=1;for(2..20){$x*=$_}print $x" ]
)