Schrift
[thread]6469[/thread]

RDW #5 - Rätsel der Woche 5 (Seite 5)

Tags: Ähnliche Threads

Leser: 2


<< |< 1 2 3 4 5 6 7 >| >> 64 Einträge, 7 Seiten
Crian
 2004-08-09 11:52
#85514 #85514
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
So, unter http://wiki.perl-community.de/bin/view/Wissensbasis/RaetseL20040806 findet sich der Anfang der Lösungen, die Dateien sind aber leider noch nicht auf dem Server, das werd ich heute Abend aber mal nachholen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2004-08-09 13:28
#85515 #85515
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@FtR

Naja, nicht das beste Beispiel, da ich bei mir die Zeichen des Algos gezählt habe und du einfach nur den Aufruf zählst. So einfach hab ich es mir dann auch wieder nicht gemacht.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Crian
 2004-08-09 13:41
#85516 #85516
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich werde jetzt die Auszählungen der Golflösungen mit diesem Skript vornehmen, wenn keiner was dagegen hat:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
use warnings;

my $c = 0;

while (<>) {
   if ($. == 1 and m~^#!~) {
       s~^#!.*?perl~~;
   }
   $c += () = m~(\S)~g;
}

print $c, "\n";


Kommentare werden nicht verstanden, möchte ich auch nicht einbauen, da in Strings und RE's # ganz andere Bedeutung haben kann. Golf-Programme werden in der Regel eh nicht kommentiert.

Berücksichtigt werden aber Switches hinter der Shebang.


Damit ergibt sich dann:

rdw05_crian_golf.pl 185
rdw05_ds_golf1.pl 84
rdw05_ds_golf2.pl 86
rdw05_ds_golf3a.pl 80
rdw05_ds_golf3b.pl 79
rdw05_ds_golf3c.pl 78
rdw05_ds_golf4.pl 49
rdw05_ds_golf5.pl 74
rdw05_eb_golf.pl 84\n\n

<!--EDIT|Crian|1092044785-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
FtR
 2004-08-09 14:52
#85517 #85517
User since
2003-08-20
39 Artikel
BenutzerIn
[default_avatar]
@[E|B] war eh nicht erts zu nehmen

@crian
ich hatte dir auch ne normale Loesung zu geschickt


FtR
Code: ()
1
2
print&f(($_=(3x3)."3+33")=~s=3(?![^3]|$)=&f=eg);
sub f{eval(@_?$_:"'$&+'x3");}
Crian
 2004-08-09 14:55
#85518 #85518
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=FtR,09.08.2004, 12:52]@crian
ich hatte dir auch ne normale  Loesung zu geschickt[/quote]
An die richtige Adresse? Ist bei mir nicht angekommen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2004-08-09 14:58
#85519 #85519
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@Crian

Sind das die Zeichen, die neben dran stehen?! Also 84 hatte ich glaube ich nicht. :D
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
DS
 2004-08-09 15:46
#85520 #85520
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Hm, du zählst nur Nicht-Whitespaces... aber die müssen schon auch gezählt werden, oder?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!perl

use strict;
use warnings;

my @prog = grep  -f, @ARGV;
   @ARGV = grep !-f, @ARGV;

foreach my $prog (@prog) {
 my $code = `perl -MO=Deparse,-sC,-p $prog`;
 my $eingabe = ($code =~ /[\$\@]ARGV/) ? 'ARGV' : 'STDIN';
 open (DATEI,$prog);
   chomp (my $shebang = <DATEI>);
   my $inhalt = join '', <DATEI>;
 close (DATEI);
 $inhalt =~ s/(?<![\w\$])#.*?$//gm;
 $inhalt =~ s/(?:^[\s\n]+|[\s\n]+$)//gs;
 my ($pp) = ($shebang =~ /^#!.*? ([^#]*)/);
 $pp =~ s/\s+$//;
 my $zeichen = length($inhalt) + length($pp||''); # Zeichen = Inhalt + Parameter nach "#!...perl "
 print $zeichen, " Zeichen...\n";
 print $eingabe eq 'ARGV' ? `perl $prog @ARGV` : `echo @ARGV|perl $prog`;
 print "\n\n";
}

Die Kommentare einfach vergessen, das Ding war mal noch ein wenig länger, weil ich erst via eval den Code von B::Deparse ausführen wollte, und dazu mußte ich noch ein tie über STDIN klatschen und dafür sorgen, dass der Code auch paßt...

Aufrufen z.B. mit perl blablabla.pl rdw05_foo.pl rdw05_bar.pl ... abcd, gibt für jedes Script die Ausgabe aus + die Anzahl der Zeichen. :)

Edit: Einrückungen angepaßt und Kommentare gelöscht
Edit: Bugfix die erste...\n\n

<!--EDIT|DS|1092053897-->
FtR
 2004-08-09 15:48
#85521 #85521
User since
2003-08-20
39 Artikel
BenutzerIn
[default_avatar]
Auswetrung FtR

Code: (dl )
1
2
3
#!perl -l
$_=shift;s~.~$.=$&;@a=();/^.*(??{push@a,$&.$..$'})/for@.?@.:'';@.=@a~ge;print
for@.

und
Code: (dl )
1
2
#!perl -ln                                                                                                      
s~.~$,=$&;@a=();/^.*(??{push@a,$&.$,.$'})/for@.?@.:'';@.=@a~ge;print for@.


liefert fast immer das richtige Erg seltsamer weise wenn "123" vervendet wird (und nur dann) fehlt die letze permutation
output:
123
132
213
231
321



Folgende Golf lösung betrachten nur den Fall, dass die zeichen unterschiedlcih sind
"123" bei "aaa" oder 113 siehe aufgabentext versagen sie zum Teil ganz

sie sollten ja
113
131
113
131
311
311

liefern !!!


folgende Golflösungen sind nicht OK
Code: (dl )
1
2
#!perl -lnaF//
$"=',';map{print if!/(.).*\1/}glob"{@F}"x@F # 50 Zeichen

ist bei 123 ok aber bei 113 versagt sie völlig

Code: (dl )
1
2
#!perl -lnaF//
$"=',';map{$a=$_;$a=~s/$_//for@F;print if!$a&!$a{$_}++}glob"{@F}"x@F # 75 Zeichen

liefert nur
113
131
311
ab


die loesung von [e|b] ist ok wenn man leerzeichen bei der eingabe und ausgabe ( abweichung vom plfichtenheft) akzeptiert


mfg

FtR\n\n

<!--EDIT|FtR|1092054474-->
Code: ()
1
2
print&f(($_=(3x3)."3+33")=~s=3(?![^3]|$)=&f=eg);
sub f{eval(@_?$_:"'$&+'x3");}
DS
 2004-08-09 15:54
#85522 #85522
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
@FtR: Warum die ersten beiden nicht gehen muß ich mir erst noch anschaun, aber zum an letzten beiden: Es steht doch genau so im Text den ich dazu geschrieben habe... wenn ich mich recht erinnere hat doch sogar einer gemeint, daß es genau so sein sollte (so wie bei der allerletzten), oder nicht? Noch mal schaun... :0

Ups: Ich hab vergessen den Fehler da auch zu korrigieren... bei (??{...}) wird das Ergebnis des Blocks - in diesem Fall der Rückgabewert von push - ja dann zum Matches verwendet... push gibt die Länge des Arrays aus, und bei Zahlen kann's dann zu Problemen kommen... da rächt es sich dass ich immer nur mit Buchstaben getestet habe...

Problemlösung: Einfach alle (??{...}) durch (?{...})^ ersetzen; ändert praktischerweise an der Länge nichts... ;)\n\n

<!--EDIT|DS|1092053228-->
Crian
 2004-08-09 16:11
#85523 #85523
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich zähle den Whitespace ganz bewusst nicht, damit man nicht alles in eine Zeile quetschen muss. Und vom Kommentare umgehen würd ich schön die Finger lassen, dass wird sonst ziemlich komplex.

@FtR: Richtig, ich hatte in der Aufgabenstellung verlangt, dass 'aaa' sechs mal 'aaa' liefert. Aber eigentlich ist es egal, das Programm dürfte daraufhin auch die Platte formatieren. Wenn man keine Menge reinsteckt, darf man nicht erwarten, dass etwas sinnvolles passiert. Und in Mengen gibt es keine doppelten Elemente. Trotzdem finde ich es schöner, wenn sich die Porgramme so verhalten, wie ich es im Aufgabentext formuliert habe.\n\n

<!--EDIT|Crian|1092053675-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 4 5 6 7 >| >> 64 Einträge, 7 Seiten



View all threads created 2004-08-06 12:22.