Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
i sollte Index bedeuten ( a[index] ), w word, m most und a Array. Bei Einzeilern mache ich mir keinen großen Kopf darum.
Schöne Erklärung von Dir, Meillo.
Schöne Erklärung von Dir, Meillo.
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Dann will ich hierauf mal noch eingehen:
Zuerst extrahiert er die acht-buchstabigen Woerter:
Dann holt er die Mittelteile raus:
(Diesen Befehl hat er nicht explizit so angegeben, sondern geschrieben, dass man die Ersetzungen mit ex oder sed machen koenne.)
Dann sortiert er die Mittelteile:
Anschliesend zaehlt er sie:
(Interessant! Mir war nicht bewusst, dass man bei uniq eine zweite Datei als Output angeben kann.)
Dann sortiert er numerisch:
Er schaut dann in die Datei ``count'' und sieht, dass der haeufigste Mittelteil ``ippi'' ist, mit 11 Vorkommen.
Um alle Woerter mit diesem Mittelteil zu finden verwendet er diesen Befehl:
Vom Vorgehen ist die Loesung straight-forward: acht-buchstabige Woerter selektieren, Mittelteile extrahieren, sortieren, zaehlen, numerisch sortieren -- so sehen die meisten Loesungen von uns auch aus.
Dass er keine Pipelines verwendet wundert mich etwas. Das kommt mir etwas un-Unix-artig vor, zeigt aber vielleicht, dass sie auch 1985 noch nicht so im Denken der Benutzer verankert waren wie heute. `sort file -o file' habe ich schon lange nicht mehr von einem heutigen Benutzer gesehen. Auch insgesamt wuerden die meisten `sort|uniq -c|sort -nr' als Pipeline schreiben, denke ich, weil das so sehr eine Sinneinheit ist. Dies alles ist wohl einfach der Zeit damals geschuldet, in der viele heutige Selbstverstaendlichkeiten noch nicht selbstverstaendlich waren.
Ich bin mir nicht sicher, ob der Autor nur noch nie von Pipelines gehoert hat oder ob er aus didaktischen (?) Gruenden auf sich verzichtet. Jedenfalls macht er alles in Einzelschritten.inne hat geschrieben:06.10.2021 10:11:05Und bitte lass uns diese am Ende auch ansehen und wenn es nur abfotografiert in der Gallery ist!
Zuerst extrahiert er die acht-buchstabigen Woerter:
Code: Alles auswählen
grep '^........$' /usr/dict/words > eights
Code: Alles auswählen
sed 's/^..//; s/..$//' eights > middle
Dann sortiert er die Mittelteile:
Code: Alles auswählen
sort middle -o middle
Code: Alles auswählen
uniq -c middle count
Dann sortiert er numerisch:
Code: Alles auswählen
sort -nr count -o count
Um alle Woerter mit diesem Mittelteil zu finden verwendet er diesen Befehl:
Code: Alles auswählen
grep '^..ippi' eights
Vom Vorgehen ist die Loesung straight-forward: acht-buchstabige Woerter selektieren, Mittelteile extrahieren, sortieren, zaehlen, numerisch sortieren -- so sehen die meisten Loesungen von uns auch aus.
Dass er keine Pipelines verwendet wundert mich etwas. Das kommt mir etwas un-Unix-artig vor, zeigt aber vielleicht, dass sie auch 1985 noch nicht so im Denken der Benutzer verankert waren wie heute. `sort file -o file' habe ich schon lange nicht mehr von einem heutigen Benutzer gesehen. Auch insgesamt wuerden die meisten `sort|uniq -c|sort -nr' als Pipeline schreiben, denke ich, weil das so sehr eine Sinneinheit ist. Dies alles ist wohl einfach der Zeit damals geschuldet, in der viele heutige Selbstverstaendlichkeiten noch nicht selbstverstaendlich waren.
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: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Ich muss nochmal nachfragen.Meillo hat geschrieben:11.10.2021 08:59:12Dann will ich hierauf mal noch eingehen:Ich bin mir nicht sicher, ob der Autor nur noch nie von Pipelines gehoert hat oder ob er aus didaktischen (?) Gruenden auf sich verzichtet. Jedenfalls macht er alles in Einzelschritteninne hat geschrieben:06.10.2021 10:11:05Und bitte lass uns diese am Ende auch ansehen und wenn es nur abfotografiert in der Gallery ist!
Werden Pipes im dem Buch denn gernicht erwähnt, für mich wären Pipes erklären nun der nächste logische Schritt oder gab es das Konzept der Pipe erst später?
Muss mir das nun auch mal selbst ansehen, mit Chronic und wann McIlroy die Pipes bringt (Das Jahr könnte ich nicht sagen - hatte UNIX das von begin an), aber das Buch ist halt leider englisch?
(=_=)
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: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
https://de.wikipedia.org/wiki/Pipe_(Informatik)inne hat geschrieben:13.10.2021 13:06:44für mich wären Pipes erklären nun der nächste logische Schritt oder gab es das Konzept der Pipe erst später?
Pipes wurden 1973 "erfunden".
Auch unter DOS 2.0 gab es schon Pipes.
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Code: Alles auswählen
ls -R ./Bilder | grep -ic '\.jpg$'
Ein sehr schönes Besipiel dafür, wie es Informatikern immer wieder gelingt, einen eigentlich recht einfachen Sachverhalt sofort mit überflüssigen Komplikationen zu überfrachten.
Immerhin sei zur Ehrenrettung des Autors gesagt: Er erläutert die allermeisten (, nicht alle! ) seiner eingebauten Komplikationen angemessen in laienverständlicher Weise!
¹ https://de.wikipedia.org/wiki/Pipe_(Informatik)
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Es ist kein Shellscripting-Buch, sondern eines ueber den Editor vi/ex, insofern ist diese Aufgabe nur ein Exkurs und Pipelines sind ausserhalb des Fokus des Buches. Das ist sicher auch ein Grund dafuer. Mit einem Editor arbeitet man dateizentriert; eine Pipeline ist datenflusszentriert.inne hat geschrieben:13.10.2021 13:06:44Ich muss nochmal nachfragen.
Werden Pipes im dem Buch denn gernicht erwähnt, für mich wären Pipes erklären nun der nächste logische Schritt [...]
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: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
OK. Aber konnte man die sinnvoll nutzen? Das fehlt mir auch in Windows 11, was das Terminal und Pipes schon vor-installiert mitbringt.
(=_=)
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: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Ich kann mich noch an so was wie "dir | more" erinnern.
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Naja, kommt drauf an, was du als "sinnvoll" erachtest
Code: Alles auswählen
prog1 | prog2 | prog3
Verstehe ich das richtig, Win11 kann den o.g. Konstrukt nicht mehrDas fehlt mir auch in Windows 11
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Unter Windows funktionierte das Pipen gefühlt schon immer. Es gab aber auch schon immer nur eine handvoll (mitgelieferte) Programme, die zum Pipen sinnvoll in der Lage waren (stdin/stdout inkompatibel). Keine Ahnung, ob das heute auch noch so ist. Die Shell soll ja ziemlich mächtig sein.
-
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte
Doch es *kann* Pipes aber *mir* fehlen dann die Programme wie die coreutils um mit den Pips was "sinnvolles" anzufangen. Gebrauchen kann man die Pipes dann erst, wenn man z.B. Perl oder so installiert hat und Sachen wie cpan-outdated -p|cpanm tut. So war mein Eindruck.MSfree hat geschrieben:16.10.2021 18:39:31Verstehe ich das richtig, Win11 kann den o.g. Konstrukt nicht mehrDas fehlt mir auch in Windows 11
Aber wahrscheinlich kenne ich mich dort zu wenig aus.
(=_=)
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/
Unsere neue Mutter: https://www.nvidia.com/de-de/data-center/a100/