1 |
Cyrill Helg am Montag, 20. März 2006 18.31: |
2 |
> Am Montag, 20. März 2006 18:07 schrieb Hans Meier (John Doe): |
3 |
> > Hallo Cyrill, |
4 |
> > |
5 |
> > Du hast es auf Mac oder Win laufen lassen? Offenbar gibt's Probleme mit |
6 |
> > den Zeilenenden. |
7 |
> |
8 |
> Nein, wo denkst du auch hin. |
9 |
|
10 |
Oups - ist ja eine gentoo-Liste :-) |
11 |
|
12 |
und sorry an alle fuer das OT... |
13 |
|
14 |
> Wahrscheinlich habe ich es nicht sauber kopiert, denn nun läufts. |
15 |
[...] |
16 |
> Im WWW wird's Tonnen von Scripten geben, die |
17 |
> > dasselbe machen... |
18 |
> |
19 |
> Nach was soll man da so ungefähr googlen? Nicht ganz einfach... |
20 |
|
21 |
Keine Ahnung... |
22 |
|
23 |
Hier eine korrigierte Version, die nicht mehr hängenbleiben sollte: |
24 |
|
25 |
[Die Optimierung von Sebastian (bei zusammengesetzten Wörtern die Teile |
26 |
separat umstellen, damit die Umstellung lesbar bleibt) ist hier nicht |
27 |
implementiert] |
28 |
|
29 |
#!/usr/bin/perl |
30 |
|
31 |
# script to reorder inner characters of words in a text |
32 |
# STDIN -> script -> STDOUT |
33 |
# The chosen strategy is not performant, esp. for long words |
34 |
|
35 |
use strict; |
36 |
use warnings; |
37 |
|
38 |
# number of tries to get different reordered string |
39 |
# |
40 |
my $max_tries=3; |
41 |
|
42 |
sub reorder { |
43 |
my $s=shift; |
44 |
my @ch=split //, $s; |
45 |
|
46 |
# special case: all @ch are the same => noop |
47 |
# |
48 |
my %different; |
49 |
@different{@ch}=(1 x @ch); |
50 |
return $s if keys %different==1; |
51 |
|
52 |
my $new; |
53 |
my $tries=0; |
54 |
|
55 |
do { |
56 |
my (@n, %seen); |
57 |
$new=''; |
58 |
my $dec=@ch; |
59 |
while (@ch) { |
60 |
my $i=int(rand(scalar(@ch))); |
61 |
next if $seen{$i}; |
62 |
$seen{$i}=1; |
63 |
push @n, $ch[$i]; |
64 |
last unless --$dec; |
65 |
} |
66 |
$new=join '', @n; |
67 |
$tries++; |
68 |
} while $tries <= $max_tries and $s eq $new; |
69 |
|
70 |
return $new; |
71 |
} |
72 |
|
73 |
my $text; |
74 |
{local $/; $text=<STDIN>;} # local scope |
75 |
|
76 |
# reorder inner chars of words with at least 4 characters |
77 |
# |
78 |
$text=~s/(\b\w)(\w{2,}?)(\w\b)/$1.reorder($2).$3/egs; |
79 |
|
80 |
print $text; |
81 |
|
82 |
-- |
83 |
gentoo-user-de@g.o mailing list |