Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von Phineas » 09.10.2021 20:07:26

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

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

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von Meillo » 11.10.2021 08:59:12

Dann will ich hierauf mal noch eingehen:
inne hat geschrieben: ↑ zum Beitrag ↑
06.10.2021 10:11:05
Und bitte lass uns diese am Ende auch ansehen und wenn es nur abfotografiert in der Gallery ist!
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.

Zuerst extrahiert er die acht-buchstabigen Woerter:

Code: Alles auswählen

grep '^........$' /usr/dict/words > eights
Dann holt er die Mittelteile raus:

Code: Alles auswählen

sed 's/^..//; s/..$//' eights > middle
(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:

Code: Alles auswählen

sort middle -o middle
Anschliesend zaehlt er sie:

Code: Alles auswählen

uniq -c middle count
(Interessant! Mir war nicht bewusst, dass man bei uniq eine zweite Datei als Output angeben kann.)

Dann sortiert er numerisch:

Code: Alles auswählen

sort -nr count -o count
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:

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!

inne
Beiträge: 3281
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

Beitrag von inne » 13.10.2021 13:06:44

Meillo hat geschrieben: ↑ zum Beitrag ↑
11.10.2021 08:59:12
Dann will ich hierauf mal noch eingehen:
inne hat geschrieben: ↑ zum Beitrag ↑
06.10.2021 10:11:05
Und bitte lass uns diese am Ende auch ansehen und wenn es nur abfotografiert in der Gallery ist!
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
Ich 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 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?

Benutzeravatar
MSfree
Beiträge: 10727
Registriert: 25.09.2007 19:59:30

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von MSfree » 13.10.2021 13:32:51

inne hat geschrieben: ↑ zum Beitrag ↑
13.10.2021 13:06:44
für mich wären Pipes erklären nun der nächste logische Schritt oder gab es das Konzept der Pipe erst später?
https://de.wikipedia.org/wiki/Pipe_(Informatik)
Pipes wurden 1973 "erfunden".

Auch unter DOS 2.0 gab es schon Pipes.

fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von fischig » 13.10.2021 14:58:25

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! :P ) seiner eingebauten Komplikationen angemessen in laienverständlicher Weise!

¹ https://de.wikipedia.org/wiki/Pipe_(Informatik)

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

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von Meillo » 13.10.2021 18:53:47

inne hat geschrieben: ↑ zum Beitrag ↑
13.10.2021 13:06:44
Ich 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 [...]
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.
Use ed once in a while!

inne
Beiträge: 3281
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

Beitrag von inne » 16.10.2021 18:14:15

MSfree hat geschrieben: ↑ zum Beitrag ↑
13.10.2021 13:32:51
Auch unter DOS 2.0 gab es schon Pipes.
OK. Aber konnte man die sinnvoll nutzen? Das fehlt mir auch in Windows 11, was das Terminal und Pipes schon vor-installiert mitbringt.

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

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von thoerb » 16.10.2021 18:31:35

inne hat geschrieben: ↑ zum Beitrag ↑
16.10.2021 18:14:15
MSfree hat geschrieben: ↑ zum Beitrag ↑
13.10.2021 13:32:51
Auch unter DOS 2.0 gab es schon Pipes.
OK. Aber konnte man die sinnvoll nutzen? Das fehlt mir auch in Windows 11, was das Terminal und Pipes schon vor-installiert mitbringt.
Ich kann mich noch an so was wie "dir | more" erinnern.

Benutzeravatar
MSfree
Beiträge: 10727
Registriert: 25.09.2007 19:59:30

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von MSfree » 16.10.2021 18:39:31

inne hat geschrieben: ↑ zum Beitrag ↑
16.10.2021 18:14:15
Aber konnte man die sinnvoll nutzen?
Naja, kommt drauf an, was du als "sinnvoll" erachtest :wink:

Code: Alles auswählen

prog1 | prog2 | prog3
Geht schon seit einer Eiwigkeit unter fast allen OS (ausser CP/M), mit denen ich in den letzen Jahrzehnten zu tun hatte..
Das fehlt mir auch in Windows 11
Verstehe ich das richtig, Win11 kann den o.g. Konstrukt nicht mehr :facepalm:

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: Programmieraufgabe von Knuth: Woerter mit den gleichen 4 Buchstaben in der Mitte

Beitrag von tobo » 16.10.2021 19:53:59

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.

inne
Beiträge: 3281
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

Beitrag von inne » 18.10.2021 09:35:10

MSfree hat geschrieben: ↑ zum Beitrag ↑
16.10.2021 18:39:31
Das fehlt mir auch in Windows 11
Verstehe ich das richtig, Win11 kann den o.g. Konstrukt nicht mehr :facepalm:
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.
Aber wahrscheinlich kenne ich mich dort zu wenig aus.

Antworten