Thread bommerlunder-code (anfängerfrage an die golfer)
(10 answers)
Opened by nyxx at 2007-11-25 08:40
vorab: ich bin keine programmiererin und habe auch sonst nichts mit dem thema zu tun. als geisteswissenschaftlerin (genauer gesagt linguistin) beschäftige ich mich eigentlich eher mit der anwendung natürlicher sprachen. aus rein privatem interesse und aus spass habe ich mich nun in den letzten tagen ein klein bisschen in perl eingelesen, was nicht ganz so einfach ist, da alle tutorien, dokus und faqs, die ich im netz gefunden habe, bereits ein gewisses basiswissen in sachen programmierung bzw die kenntnis anderer programmiersprachen voraussetzen. daher sorry, falls euch meine frage zu trivial erscheint. mir geht es darum, nachvollziehen zu können, was künstliche sprachen (wie perl) von natürlichen sprachen (wie zb das deutsche) unterscheidet und welche möglichkeiten sich daraus beim "sprechen" ergeben.
okay, jedenfalls bin ich beim stöbern auf die http://www.99-bottles-of-beer.net gestossen. das lied selbst erinnerte mich durch seinen wiederholenden aufbau an den song "eisgekühlter bommerlunder" von den "toten hosen". ich denke mal, das ist eine passende deutsche variante davon, bloss dass man den bommerlunder ja endlos weitersingen kann. Eisgekuehlter Bommerlunder - Bommerlunder eisgekuehlt. Eisgekuehlter Bommerlunder - Bommerlunder eisgekuehlt. Und dazu: 1 belegtes Brot mit Schinken - Schinken! 1 belegtes Brot mit Ei - Ei! Das sind 2 belegte Brote, 1 mit Schinken und 1 mit Ei. Und dazu: Eisgekuehlter Bommerlunder - Bommerlunder eisgekuehlt. Eisgekuehlter Bommerlunder - Bommerlunder eisgekuehlt. Und dazu: 2 belegte Brot mit Schinken - Schinken! 2 belegte Brot mit Ei - Ei! Das sind 4 belegte Brote, 2 mit Schinken und 2 mit Ei. undsoweiter... und genau das habe ich nun mit meinem tapsigen perl-anfängerwissen versucht umzusetzen, um in der shell eine endlose ausgabe des liedes zu bekommen: Code (perl): (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 25 26 27 #!/usr/bin/perl use strict; use warnings; my $a="Bommerlunder"; my $b="Eisgekuehlter $a -\n$a eisgekuehlt.\n"; my $c="\nUnd dazu:\n"; my $d=1; my $e="Brot"; my $f=" mit "; my $g="Schinken"; my $h="Ei"; my $i=" - "; my $j=" belegtes $e"; my $k="belegte"; my $l=" $k Brote"; my $m="$k $e"; my $n="!\nDas sind "; my $o=" und "; # erste strophe print "$b$b$c$d$j$f$g$i$g!\n$d$j$f$h$i$h$n",$d*2,"$l,\n$d$f$g$o$d$f$h.\n$c"; # alle weiteren strophen *g* while (++$d){ print "$b$b$c$d $m$f$g$i$g!\n$d $m$f$h$i$h$n",$d*2,"$l,\n$d$f$g$o$d$f$h.\n$c"; } wenn ich nun auf das use strict; use warnings; und somit auf die mys verzichte, kann ich es so verkürzen: Code (perl): (dl
)
$a="Bommerlunder";$b="Eisgekuehlter $a -\n$a eisgekuehlt.\n";$c="\nUnd dazu:\n";$d=1;$e="Brot";$f=" mit ";$g="Schinken";$h="Ei";$i=" - ";$j=" belegtes $e";$k="belegte";$l=" $k Brote";$m="$k $e";$n="!\nDas sind ";$o=" und ";print"$b$b$c$d$j$f$g$i$g!\n$d$j$f$h$i$h$n",$d*2,"$l,\n$d$f$g$o$d$f$h.\n$c";while(++$d){print"$b$b$c$d $m$f$g$i$g!\n$d $m$f$h$i$h$n",$d*2,"$l,\n$d$f$g$o$d$f$h.\n$c";} das müssten 388 zeichen sein. meine frage ist nun: geht das auch noch kleiner? könnt ihr mir tips gehen, in welcher form ich das lied als endlosschleife noch abändern könnte, um es noch kürzer hinzukriegen? ähnlich wie bei der letzten strophe der "99 bottles" ist auch hier ja die erste strophe grammatikalisch etwas anders als die anderen strophen ("1 belegtes brot", später "x belegte brot"), sodass ich um die zweimal print wohl nicht herumkomme, oder? und kann ich noch irgendwas weiter verschachteln oder sonstwie umgestalten, um den code um weitere zeichen zu verringern? was kann ich da noch umbauen? ich habe jetzt aus sportlichem ehrgeiz die halbe nacht dran rumgebastelt, komme aber nicht mehr weiter. daher würde ich mich über anregungen und hinweise von erfahrenen perl-schreibern freuen. ps an die moderatoren: falls ihr denkt, mein posting gehört nicht in die rubrik "allgemeines zu perl", verschiebt es bitte woandershin. ich wusste nicht genau, wo ich meine frage im forum am besten stellen sollte. |