Scripting Contest
Re: Scripting Contest
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 für den Perl Schnipsel
soll mal jemand sagen Perl sei Kryptisch
ciao
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 für den Perl Schnipsel
soll mal jemand sagen Perl sei Kryptisch
ciao
Re: Scripting Contest
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)
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))
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Bis jetzt der Favorit denke ich!
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
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 . "\"";
}
}
}
?>
Re: Scripting Contest
Meine Umsetzung in awk:
Fast unveraendert portiert nach Tcl:
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:
Meine beste Umsetzung ist die in lex:
(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:
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.
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('"'); }
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'
Use ed once in a while!
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
@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)?
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)?
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
Hi
Hoffentlich schläft der Thread nicht ein, hier kann man richtig was lernen, danke für die vielen Lösungen.
Ciao
Hoffentlich schläft der Thread nicht ein, hier kann man richtig was lernen, danke für die vielen Lösungen.
Ciao
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Scripting Contest
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.
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.
Re: Scripting Contest
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)?
Use ed once in a while!
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Scripting Contest
@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.
Re: Scripting Contest
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 ""
}
Re: Scripting Contest
Hi
Die Tage hörte ich passendes von Goethe " nur durch den Vergleich lernt man "
Also, wer möchte den die nächste Aufgabe veröffentlichen?
Ciao
Die Tage hörte ich passendes von Goethe " nur durch den Vergleich lernt man "
Also, wer möchte den die nächste Aufgabe veröffentlichen?
Ciao
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
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.
Zuletzt geändert von Anonymous am 25.08.2015 00:03:46, insgesamt 1-mal geändert.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
-
- Beiträge: 140
- Registriert: 29.01.2013 11:03:50
Re: Scripting Contest
Noch 'ne Lösung zur alten Aufgabe:
oder:
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))
Re: Scripting Contest
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
@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
Re: Scripting Contest
Hi
@inne, warum hast du die letzte Antwort gelöscht
Schade
Ciao
gute Nacht
@inne, warum hast du die letzte Antwort gelöscht
Schade
Ciao
gute Nacht
Re: Scripting Contest
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
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])
Re: Scripting Contest
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.
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!
Re: Scripting Contest
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.
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:
... 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.
Use ed once in a while!
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
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
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Scripting Contest
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.
Beispiel:
statt zwei neuen Prozessen wie hier...
Code: Alles auswählen
c="$(echo "$line" | cut -c "$n")"
...lieber die Bash-Substring-Funktion verwenden:
Code: Alles auswählen
c=${line:$n:1}
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Danke, das bringt schon enorm was. Schade das mir das nicht einfiel bzw. ich das so bewusst nicht kannte.heisenberg hat geschrieben: ...lieber die Bash-Substring-Funktion verwenden:Code: Alles auswählen
c=${line:$n:1}
Jetzt sitzt das (hoffentlich)
Zuletzt geändert von Anonymous am 25.08.2015 14:41:17, insgesamt 1-mal geändert.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
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.
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Scripting Contest
Ist dort jetzt noch ein NICHT built-in Aufruf dabei?
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Re: Scripting Contest
Ich sehe keinen mehr.