Auch wenn ich keine Lösung beitragen kann, finde ich, dass der Contest weiter laufen sollte, da sich doch einige dafür Interessiert haben und jede/r dabei noch was lernen kann.
@heisenberg

soll mal jemand sagen Perl sei Kryptisch

ciao
Code: Alles auswählen
#!/usr/bin/python
# vim:fileencoding=utf-8
story="""Verschwörungstheorien
Ich persönlich kann mit Verschwörungstheorien nichts anfangen. Sie wissen schon, es geht um Behauptungen wie zum Beispiel, dass die erste Mondlandung fingiert gewesen sei. Tatsächlich hätte man alles auf der Erde in einem Filmstudio nachgespielt. Eine andere sagt, dass Elvis immer noch leben würde. Wahrscheinlich hält man ihn im Weißen Haus gefangen, wo er seit Jahrzehnten "Jailhouse-Rock" spielen muss. Und dann gibt es diejenigen, die wissen, dass bereits seit langer Zeit Aliens unter uns leben.
Letzterer Theorie könnte ich mit Blick auf manche meiner Mitmenschen tatsächlich etwas abgewinnen. Aber so bescheuert, wie diese Leute sind, kann kein Alien sein – sonst hätte er gar nicht die Reise bis auf die Erde geschafft. Andererseits besteht natürlich die Möglichkeit, dass unser blauer Planet von irgendwelchen fremden Wesen zu einer Art Quarantäne-Lager für durchgeknallte Außerirdische gemacht wurde. Doch das ist ein anderes Thema und eine neue Verschwörungstheorie.
Lange Zeit habe ich mich über diesen Verschwörungsquatsch aufgeregt. Ich konnte es kaum ertragen, wenn wieder einmal solch ein Blödsinn durch die Medienlandschaft waberte, in Internetforen verbreitet oder auf irgendwelchen Festlichkeiten im allgemeinen Smalltalk kundgetan wurde. Doch diese Haltung hat sich geändert, seit ich eine Gegenstrategie entwickelt habe: Ich erfinde Verschwörungstheorien.
Das macht richtig Spaß. Auf Partys laufe ich regelrecht zur Höchstform auf, wenn wieder einmal ein Gast den unglaublichsten Schwachsinn als wissenschaftlich erwiesen anpreist. Anstatt mich, wie früher, genervt wegzudrehen und das Buffet leerzufressen, diskutiere ich nun eifrig mit, frage intensiv nach und lenke irgendwann das Gespräch auf eine meiner erfunden Theorien. Seitdem haben solche Abende einen großen Unterhaltungswert für mich.
Ich möchte Ihnen an dieser Stelle nun einige dieser erfundenen Wahrheiten vorstellen:
1. Das Fluchthelferlied
Es geht um den größten Hit der Rock-Gruppe "Karat" aus der ehemaligen DDR "Über sieben Brücken musst du gehn".
Nur Eingeweihte wissen, dass die wichtigste Untergrundgruppe der Ostdeutschen Fluchthelfer ihren Hauptsitz in der brandenburgischen Klein- und Kurstadt Bad Liebenwerda in der Straße "An den Siebenbrücken" hatte. Hier fanden sogenannte "Republikflüchtlinge" für ihr Anliegen Rat und auch manch tatkräftige Unterstützung. Das Lied "Über sieben Brücken musst du gehn" war also vor allem eine versteckte Aufforderung, die DDR zu verlassen und sich in jener Straße die notwendigen Hilfen hierfür zu holen........"""
subs = zip("A B E G".split(), "4 8 3 6".split())
parts = story.split('"')
for i in range(0, len(parts), 2):
for k, v in subs:
parts[i] = parts[i].replace(k, v)
print '"'.join(parts)
Und schon hab ich was gelernt. translate und maketrans kannte ich noch nicht. Danke dafür!catdog2 hat geschrieben:Code: Alles auswählen
#!/usr/bin/env python3 import sys ttable = { "A": "4", "a": "4", "B": "8", "b": "8", "E": "3", "e": "3", "G": "6", "g": "6"} if __name__ == "__main__": text = sys.stdin.read() stext = text.split('"') zipt = ((i % 2 == 0, j) for i, j in enumerate(stext)) reptext = (j.translate(str.maketrans(ttable)) if i else j for i, j in zipt) print('"'.join(reptext))
Code: Alles auswählen
#!/usr/bin/php
<?php
$file = "storys.txt";
$text = "";
$ausgabe = "";
if (! file_exists ( $file )) {
exit ( "Datei nicht vorhanden. \n" );
} else {
$text = file_get_contents ( $file );
$ausgabe = explode ( '"', $text );
ausgabe ($ausgabe);
}
function ausgabe($ausgabe) {
foreach ( $ausgabe as $value => $key ) {
if ($value % 2 == 0) {
echo strtr ( $key, "abegABEG", "48364836" );
} else {
echo "\"" . $key . "\"";
}
}
}
?>
Code: Alles auswählen
{
for (i=1; i<=NF; i++) {
if ($i == "\"") {
ignore = !ignore
}
if (ignore) {
printf($i)
} else {
switch ($i) {
case "A": printf("4"); break;
case "B": printf("8"); break;
case "E": printf("3"); break;
case "G": printf("6"); break;
default: printf($i); break;
}
}
}
print ""
}
Code: Alles auswählen
set ign 0
proc put {c r} {
global ign
puts -nonewline [expr $ign ? \$c : \$r]
}
foreach c [split [read stdin] ""] {
switch $c {
A {put $c 4}
B {put $c 8}
E {put $c 3}
G {put $c 6}
{"} {set ign [expr ! $ign]; put $c $c}
default {put $c $c}
}
}
Code: Alles auswählen
$ign = 0;
sub put {
print $ign ? $_ : shift;
}
foreach (split(//, join("", <>))) {
put("4"),next if (/A/);
put("8"),next if (/B/);
put("3"),next if (/E/);
put("6"),next if (/G/);
$ign=!$ign if (/"/);
print;
}
Code: Alles auswählen
%{
int ignore = 0;
void put(char c) {
putchar(ignore ? *yytext : c);
}
%}
%%
A put('4');
B put('8');
E put('3');
G put('6');
\" { ignore = !ignore; putchar('"'); }
Code: Alles auswählen
sed 's,.,& ,g' |
cpp -DA=4 -DB=8 -DE=3 -DG=6 -P -traditional-cpp - |
sed 's,\(.\) ,\1,g'
Oh ja, sorry. Mein Aufruf war mit -F:inne hat geschrieben:@Meillo: Kontrolliere mal dein AWK-Script! Der Output ist nicht richtig, sämtliche Leerzeichen werden illiminiert und ersetzt wird hier auch nichts.
Code: Alles auswählen
awk -F '' -f script.awk <text
Code: Alles auswählen
BEGIN { FS=""; }
In `i' steht die Zahl des Feldes, in `$i' sein Wert.Ist in der Laufvariable i tatsächlich das Zeichen gespeichert, oder die Position? Unterscheidet sich i und $i (Automagie)?
Code: Alles auswählen
#!/usr/bin/awk -f
BEGIN {
u="ABEGabeg"
x="48364836"
}
{
for (l=1;l<=length($0);l++) {
c=(substr($0,l,1))
if (c=="\"") {
s++
}
if (s%2==0) {
i=index(u,c)
if (i>0) {
c=substr(x,i,1)
}
}
printf("%s",c)
}
print ""
}
Es müsste erstmal noch der Favorit gekührt werden.ohnex hat geschrieben: Also, wer möchte den die nächste Aufgabe veröffentlichen?
Wobei ich diesen Satz nicht in meine Wertung hineinbekomme. Was ist die passende Programmiersprache für diese Aufgabe?Meillo hat geschrieben:Jetzt mal sehen, ob ich noch eine weitere passende Programmiersprache finde.
Code: Alles auswählen
#!/usr/bin/python3
import sys
table = str.maketrans("abegABEG", 2 * "4836")
text = sys.stdin.read().split('"')
text[::2] = (t.translate(table) for t in text[::2])
print('"'.join(text))
Code: Alles auswählen
#!/usr/bin/python3
import sys, operator
translate = operator.methodcaller("translate", str.maketrans("abegABEG", 2 * "4836"))
text = sys.stdin.read().split('"')
text[::2] = map(translate, text[::2])
print('"'.join(text))
Das kann ich nur unterstreichen. Ich kann mich nicht mal entscheiden, welche der vielen Varianten mir selber am besten gefaellt.ohnex hat geschrieben: @inne, wie sollen wir den "Gewinner" ermitteln?
Nach Lesbarkeit des Codes.
Nach Codehacks, je weniger Zeichen und umso kryptischer, desto besser.
Nach wie lange hat das Programm gebraucht.
Nach Sprachen ....
K.A.![]()
Ich persönlich mag das übersichtliche wo sich auch Muster erkennen lassen.
Wir haben doch alle gewonnen, jeder User der hier mitliest oder hier durch die Suchmaschine seiner Wahl landet findet funktionierenden Code den man direkt Vergleichen kann.
Passende Programmiersprachen fuer Probleme sind welche, die elegante Loesungen erlauben. Elegante Loesungen sind, einfach gesagt, welche die kurz und dennoch verstaendlich sind. Ich denke, die modernen Scriptsprachen z.B. haben gezeigt, dass sie geeignet sind, um diese Aufgabe zu loesen. Deine Bash-Variante ist IMO nicht so elegant wie manche anderen Scripte, das kann daran liegen, dass du keinen so eleganten Weg gefunden hast, oder daran, dass die Bash eben nicht so gut fuer diese Aufgabe geeignet ist. Mein Perl-Script im Vergleich zu dem von heisenberg zeigt, dass man auch in passenden Sprachen umstaendlich programmieren kann. Und spaetestens bei diesen zwei Perl-Beispielen werden die Diskussionen ueber guten Code losgehen. (heisenbergs Perl-Version ist ungemein faszinierend, aber ich wuerde die Zeile wohl doch nicht in Produktivcode haben wollen, dagegen ist meine Version plump und Perl-untypisch und damit auch nichts was ich in Produktivcode haben wollen wuerde (also das Sprachuntypische) ... und fuer einen solchen Wettbewerb gehoeren plumpe Loesungen natuerlich ans Ende der Rangliste.inne hat geschrieben:Wobei ich diesen Satz nicht in meine Wertung hineinbekomme. Was ist die passende Programmiersprache für diese Aufgabe?Meillo hat geschrieben:Jetzt mal sehen, ob ich noch eine weitere passende Programmiersprache finde.
... und so sehe ich es auch mit der passenden Programmiersprache.http://paulgraham.com/taste.html hat geschrieben: If you mention taste nowadays, a lot of people will tell you that "taste is subjective." They believe this because it really feels that way to them. When they like something, they have no idea why. It could be because it's beautiful, or because their mother had one, or because they saw a movie star with one in a magazine, or because they know it's expensive. Their thoughts are a tangle of unexamined impulses.
Most of us are encouraged, as children, to leave this tangle unexamined. If you make fun of your little brother for coloring people green in his coloring book, your mother is likely to tell you something like "you like to do it your way and he likes to do it his way."
Your mother at this point is not trying to teach you important truths about aesthetics. She's trying to get the two of you to stop bickering.
Like many of the half-truths adults tell us, this one contradicts other things they tell us. After dinning into you that taste is merely a matter of personal preference, they take you to the museum and tell you that you should pay attention because Leonardo is a great artist.
What goes through the kid's head at this point? What does he think "great artist" means? After having been told for years that everyone just likes to do things their own way, he is unlikely to head straight for the conclusion that a great artist is someone whose work is better than the others'. A far more likely theory, in his Ptolemaic model of the universe, is that a great artist is something that's good for you, like broccoli, because someone said so in a book.
Saying that taste is just personal preference is a good way to prevent disputes. The trouble is, it's not true. You feel this when you start to design things.
Das ein Shell-Skript so langsam sein würde, hatte ich (auch) nicht erwartet. Das hat mich sehr erstaunt, wie langsam die Shell hier doch arbeitet.Meillo hat geschrieben:Deine Bash-Variante ist IMO nicht so elegant wie manche anderen Scripte
Es wird klar, wenn man sich vor Augen hält, was bei einem Shellscript passiert: Jeder einzelne externe Befehlsaufruf erzeugt einen neuen Prozess. Bei Schleifen ist das richtig teuer. Das kann man drastisch verbessern, wenn man soweit möglich interne Bash-Funktionen verwendet, da hier die Prozesserzeugung wegfällt. Die Bash kann auch schon richtig viel.Das ein Shell-Skript so langsam sein würde, hatte ich (auch) nicht erwartet. Das hat mich sehr erstaunt, wie langsam die Shell hier doch arbeitet.
Code: Alles auswählen
c="$(echo "$line" | cut -c "$n")"
Code: Alles auswählen
c=${line:$n:1}
heisenberg hat geschrieben: ...lieber die Bash-Substring-Funktion verwenden:Code: Alles auswählen
c=${line:$n:1}
Code: Alles auswählen
#!/bin/bash
while read line; do
cnt=${#line}
n=0
cit="off";
while test $n -lt $cnt; do
c="${line:$n:1}"
((n++))
if test "$c" == "\""; then
if test $cit == "on"; then
cit="off"
else
cit="on"
fi
fi
if test $cit == "on"; then
echo -n "$c"
else
case "$c" in
A|a) echo -n "4";;
B|b) echo -n "8";;
E|e) echo -n "3";;
G|g) echo -n "6";;
*) echo -n "$c";;
esac
fi
done
echo -en "\n"
done <<!
Verschwörungstheorien
Ich persönlich kann mit Verschwörungstheorien nichts anfangen. Sie wissen schon, es geht um Behauptungen wie zum Beispiel, dass die erste Mondlandung fingiert gewesen sei. Tatsächlich hätte man alles auf der Erde in einem Filmstudio nachgespielt. Eine andere sagt, dass Elvis immer noch leben würde. Wahrscheinlich hält man ihn im Weißen Haus gefangen, wo er seit Jahrzehnten "Jailhouse-Rock" spielen muss. Und dann gibt es diejenigen, die wissen, dass bereits seit langer Zeit Aliens unter uns leben.
Letzterer Theorie könnte ich mit Blick auf manche meiner Mitmenschen tatsächlich etwas abgewinnen. Aber so bescheuert, wie diese Leute sind, kann kein Alien sein – sonst hätte er gar nicht die Reise bis auf die Erde geschafft. Andererseits besteht natürlich die Möglichkeit, dass unser blauer Planet von irgendwelchen fremden Wesen zu einer Art Quarantäne-Lager für durchgeknallte Außerirdische gemacht wurde. Doch das ist ein anderes Thema und eine neue Verschwörungstheorie.
Lange Zeit habe ich mich über diesen Verschwörungsquatsch aufgeregt. Ich konnte es kaum ertragen, wenn wieder einmal solch ein Blödsinn durch die Medienlandschaft waberte, in Internetforen verbreitet oder auf irgendwelchen Festlichkeiten im allgemeinen Smalltalk kundgetan wurde. Doch diese Haltung hat sich geändert, seit ich eine Gegenstrategie entwickelt habe: Ich erfinde Verschwörungstheorien.
Das macht richtig Spaß. Auf Partys laufe ich regelrecht zur Höchstform auf, wenn wieder einmal ein Gast den unglaublichsten Schwachsinn als wissenschaftlich erwiesen anpreist. Anstatt mich, wie früher, genervt wegzudrehen und das Buffet leerzufressen, diskutiere ich nun eifrig mit, frage intensiv nach und lenke irgendwann das Gespräch auf eine meiner erfunden Theorien. Seitdem haben solche Abende einen großen Unterhaltungswert für mich.
Ich möchte Ihnen an dieser Stelle nun einige dieser erfundenen Wahrheiten vorstellen:
1. Das Fluchthelferlied
Es geht um den größten Hit der Rock-Gruppe "Karat" aus der ehemaligen DDR "Über sieben Brücken musst du gehn".
Nur Eingeweihte wissen, dass die wichtigste Untergrundgruppe der Ostdeutschen Fluchthelfer ihren Hauptsitz in der brandenburgischen Klein- und Kurstadt Bad Liebenwerda in der Straße "An den Siebenbrücken" hatte. Hier fanden sogenannte "Republikflüchtlinge" für ihr Anliegen Rat und auch manch tatkräftige Unterstützung. Das Lied "Über sieben Brücken musst du gehn" war also vor allem eine versteckte Aufforderung, die DDR zu verlassen und sich in jener Straße die notwendigen Hilfen hierfür zu holen........
!