Scripting Contest

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
ohnex
Beiträge: 392
Registriert: 31.01.2010 22:35:36

Re: Scripting Contest

Beitrag von ohnex » 16.08.2015 20:16:54

hi

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 :THX: für den Perl Schnipsel
soll mal jemand sagen Perl sei Kryptisch :D

ciao

dimi
Beiträge: 84
Registriert: 19.07.2006 14:09:55

Re: Scripting Contest

Beitrag von dimi » 17.08.2015 07:11:57

Hi meine Variante mit Python.

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)
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))
Und schon hab ich was gelernt. translate und maketrans kannte ich noch nicht. Danke dafür!

inne
Beiträge: 3282
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 17.08.2015 07:17:23

Bis jetzt der Favorit denke ich!

thoerb
Beiträge: 1680
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: Scripting Contest

Beitrag von thoerb » 17.08.2015 13:02:32

Und hier noch eine Variante mit PHP.

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 . "\"";
		}
	}
}
?>

Benutzeravatar
Meillo
Moderator
Beiträge: 8862
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Scripting Contest

Beitrag von Meillo » 17.08.2015 13:54:57

Meine Umsetzung in awk:

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 ""
}

Fast unveraendert portiert nach Tcl:

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}
        }
}

Meine Perl-Variante ist so einfallslos, dass ich mich sie (nach der abgefahrenen Perl-Version von heisenberg, die ich erst noch genau durchdenken muss) fast gar nicht zu posten traue:

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;
}

Meine beste Umsetzung ist die in lex:

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('"'); }
(Sie kann so uebersetzt werden: ``lex foo.l && gcc foo.yy.c -o foo -lfl''.)


All diese Umsetzungen von mir gehen in der gleichen Weise an das Problem heran: Wir laufen zeichenweise durch den Input und schalten bei jedem Double-Quote den Modus um. Inne hat auch diesen Ansatz gewaehlt.

Die meisten anderen Einreichungen sind mit split/explode an die Sache herangegangen und haben dann nur in jedem zweiten Abschnitt ersetzt -- ein Ansatz, auf den ich zwar gekommen bin, ihn aber nicht effektiv umzusetzen wusste. Danke fuer die schoenen Anregungen diesbezueglich!

Heisenbergs Perl-Version nutzt einen dritten Ansatz, in dem immer Paare von normalem und gequotetem Text ersetzt werden, wobei jeder Teil des Paares auch entfallen kann. Sehr sehr clever! Da lerne ich einiges dazu!

Ich will zum Abschluss aber auch noch eine neue, vierte Variante praesentieren. Ich habe mich daran erinnert, dass der C-Praeprozessor ein eignes Verstaendnis von C-Strings (d.h. Text in Double-Quotes) hat. Ihren Inhalt laesst er unveraendert und ersetzt nur ausserhalb davon. Da der CPP nur Identifier im Sinne von C (vereinfacht also ganze Worte) ersetzt, wir aber Buchstaben ersetzen wollen, musste ich die Buchstaben zuerst einzeln stellen, dann ersetze ich, bevor ich die eingefuegten Leerzeichen wieder entferne:

Code: Alles auswählen

sed 's,.,& ,g' |
        cpp -DA=4 -DB=8 -DE=3 -DG=6 -P -traditional-cpp - |
        sed 's,\(.\) ,\1,g'
Diese Umsetzung ist weit weniger robust als die obigen, da sie davon abhaengt, dass der cpp dank `-traditional-cpp' den Whitespace in Ruhe laesst, und weil Dinge wie etwa /* */ im Input ausgewertet werden.
Use ed once in a while!

inne
Beiträge: 3282
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 17.08.2015 15:07:15

@Meillo: Kontrolliere mal dein AWK-Script! Der Output ist nicht richtig, sämtliche Leerzeichen werden illiminiert und ersetzt wird hier auch nichts.
Oder mach ich was falsch, mit dem Shebang: #!/usr/bin/awk -f und $ Desktop/meillo.awk Desktop/story.txt?

Ist in der Laufvariable i tatsächlich das Zeichen gespeichert, oder die Position? Unterscheidet sich i und $i (Automagie)?

Benutzeravatar
ohnex
Beiträge: 392
Registriert: 31.01.2010 22:35:36

Re: Scripting Contest

Beitrag von ohnex » 17.08.2015 16:54:09

Hi

Hoffentlich schläft der Thread nicht ein, hier kann man richtig was lernen, danke für die vielen Lösungen.

Ciao

Benutzeravatar
heisenberg
Beiträge: 3670
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Scripting Contest

Beitrag von heisenberg » 17.08.2015 17:03:53

Hey ohnex,

Deine Antwort oben zum /g Modifier war übrigens nicht so ganz korrekt. So mal grundsätzlich heisst /g bitte global also überall und nicht nur 1 Mal ersetzen. In der Manpage von perlre war auch noch ein Hinweis auf die manpage perlretut drin, die den /g - Modifier nochmal im Detail beschreibt.

h.

Benutzeravatar
Meillo
Moderator
Beiträge: 8862
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Scripting Contest

Beitrag von Meillo » 17.08.2015 22:28:46

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.
Oh ja, sorry. Mein Aufruf war mit -F:

Code: Alles auswählen

awk -F '' -f script.awk <text
Alternativ kann man auch das an den Beginn des Scripts stellen:

Code: Alles auswählen

BEGIN { FS=""; }
Ist in der Laufvariable i tatsächlich das Zeichen gespeichert, oder die Position? Unterscheidet sich i und $i (Automagie)?
In `i' steht die Zahl des Feldes, in `$i' sein Wert.
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 3670
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Scripting Contest

Beitrag von heisenberg » 17.08.2015 22:40:18

@Meillo: Den Hackerpreis "Creative-Use-of-Tools-in-Ways-Theyre-not-designed-to-be-used-for" bekommst Du für die Variante CPP auf jeden Fall schon mal. :)

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Scripting Contest

Beitrag von Phineas » 17.08.2015 23:11:56

Hallo.

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 ""
}

Benutzeravatar
ohnex
Beiträge: 392
Registriert: 31.01.2010 22:35:36

Re: Scripting Contest

Beitrag von ohnex » 24.08.2015 22:42:01

Hi

Die Tage hörte ich passendes von Goethe " nur durch den Vergleich lernt man " :D

Also, wer möchte den die nächste Aufgabe veröffentlichen?

Ciao

inne
Beiträge: 3282
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 24.08.2015 23:22:57

ohnex hat geschrieben: Also, wer möchte den die nächste Aufgabe veröffentlichen?
Es müsste erstmal noch der Favorit gekührt werden.
Meillo hat geschrieben:Jetzt mal sehen, ob ich noch eine weitere passende Programmiersprache finde.
Wobei ich diesen Satz nicht in meine Wertung hineinbekomme. Was ist die passende Programmiersprache für diese Aufgabe?
Zuletzt geändert von Anonymous am 25.08.2015 00:03:46, insgesamt 1-mal geändert.

ChronoBoost
Beiträge: 140
Registriert: 29.01.2013 11:03:50

Re: Scripting Contest

Beitrag von ChronoBoost » 24.08.2015 23:28:49

Noch 'ne Lösung zur alten Aufgabe:

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))
oder:

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))

Benutzeravatar
ohnex
Beiträge: 392
Registriert: 31.01.2010 22:35:36

Re: Scripting Contest

Beitrag von ohnex » 25.08.2015 00:37:37

Hi

@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.


Ciao

Benutzeravatar
ohnex
Beiträge: 392
Registriert: 31.01.2010 22:35:36

Re: Scripting Contest

Beitrag von ohnex » 25.08.2015 00:57:30

Hi

@inne, warum hast du die letzte Antwort gelöscht :?:

Schade


Ciao
gute Nacht

Benutzeravatar
GregorS
Beiträge: 2725
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: Scripting Contest

Beitrag von GregorS » 25.08.2015 01:57:21

Die Idee eines kleinen, regelmäßig stattfindenden Programmierwettbewerb finde ich super.

Ich habe das mal ziemlich spontan mit einem Freund veranstaltet.

Aufgabe war: Es gibt eine Datei, in der „Sternnamen“ stehen (einer pro Zeile, z. B. „Sol“ in der ersten, „Phoenix“ in der zweiten Zeile usw.). Der Freund hat eine Datei mit 600 Zeilen bzw. Namen. Aus dieser Datei sollen möglichst viele neue Namen gemacht werden. Zeitvorgabe: 1 Stunde.
Ergebnis war: Er hat ein Shellskript programmiert, das 400 neue Namen erzeugt hat. Mein Programm war nach der Stunde noch nicht fertig, ich hab’s aber zu Hause noch fertigprogrammiert (C++) und kam auf 40.000 neue Namen :-)

40.000 zu 400 ... ist ja mal nicht übel, oder ...

Gruß

Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

Benutzeravatar
Meillo
Moderator
Beiträge: 8862
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Scripting Contest

Beitrag von Meillo » 25.08.2015 12:03:25

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.
Das kann ich nur unterstreichen. Ich kann mich nicht mal entscheiden, welche der vielen Varianten mir selber am besten gefaellt. ;-)

Dennoch bleibt das Problem, nach welchem Modus die neue Aufgabe gestellt werden soll, ohne dass jedesmal erst diskutiert werden muss.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8862
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Scripting Contest

Beitrag von Meillo » 25.08.2015 12:25:19

inne hat geschrieben:
Meillo hat geschrieben:Jetzt mal sehen, ob ich noch eine weitere passende Programmiersprache finde.
Wobei ich diesen Satz nicht in meine Wertung hineinbekomme. Was ist die passende Programmiersprache für diese Aufgabe?
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.

Btw: Eleganz ist im Einzelfall sicher von der Gewoehnung und dem Vorwissen abhaengig, und man kann trefflich darueber streiten, aber im Allgemeinen ist Eleganz vielleicht doch nicht subjektiv:
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.
... und so sehe ich es auch mit der passenden Programmiersprache.
Use ed once in a while!

inne
Beiträge: 3282
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 25.08.2015 13:36:51

Meillo hat geschrieben:Deine Bash-Variante ist IMO nicht so elegant wie manche anderen Scripte
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.

Benutzeravatar
heisenberg
Beiträge: 3670
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Scripting Contest

Beitrag von heisenberg » 25.08.2015 14:20:34

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.
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.

Beispiel:

statt zwei neuen Prozessen wie hier...

Code: Alles auswählen

c="$(echo "$line" | cut -c "$n")"
Erklärung: 1. Prozess: neue Subshell erzeugen $(...). 2. Prozess: cut-Kommando. echo ist eine Bashfunktion, erzeugt also keinen neuen Prozess)

...lieber die Bash-Substring-Funktion verwenden:

Code: Alles auswählen

c=${line:$n:1}

inne
Beiträge: 3282
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 25.08.2015 14:39:32

heisenberg hat geschrieben: ...lieber die Bash-Substring-Funktion verwenden:

Code: Alles auswählen

c=${line:$n:1}
:THX: Danke, das bringt schon enorm was. Schade das mir das nicht einfiel bzw. ich das so bewusst nicht kannte.
Jetzt sitzt das (hoffentlich) :-)
Zuletzt geändert von Anonymous am 25.08.2015 14:41:17, insgesamt 1-mal geändert.

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Scripting Contest

Beitrag von Phineas » 25.08.2015 14:40:08

Von 5 auf 0,1 Sekunden "frisiert":

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........
!
Zuletzt geändert von Phineas am 25.08.2015 14:49:06, insgesamt 1-mal geändert.

inne
Beiträge: 3282
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Scripting Contest

Beitrag von inne » 25.08.2015 14:48:30

8)
Ist dort jetzt noch ein NICHT built-in Aufruf dabei?

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Scripting Contest

Beitrag von Phineas » 25.08.2015 14:50:29

Ich sehe keinen mehr.

Antworten