Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

"wer mag wen" - arbeiten mit Strings

Diskussion: "wer mag wen" - arbeiten mit Strings im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Eingereicht von Ook!: Zitat: 1.) Wer mag wen?! - Schwierigkeit 1 Jim likes Larry and Jean, but hates Kim. ...

Antwort
Alt 21.04.08, 23:11   #1 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard "wer mag wen" - arbeiten mit Strings

Anzeige

Eingereicht von Ook!:

Zitat:
1.) Wer mag wen?! - Schwierigkeit 1

Jim likes Larry and Jean, but hates Kim.
Bob loves Jean, and likes Larry and Kim.
Jean loves Bob, likes Jim, but hates Kim.
Kim hates Jim, likes Larry and Bob.
Larry loves Martin, and hates Karl and Jean.


Schreibe ein Programm, dass für jede Person angibt, wen sie liebt, mag und hasst.
Die Aufgabe besteht darin, den Text zu splitten in z.B. Listen
Beispiel anhand des ersten Satzes:
Jim: [ likes: Larry, Jean] [loves: ] [ hates: Kim]
Hier sollen die Sätze auseinandergenommen werden. Man beachte den Schwierigkeitsgrad und das Ziel (Stringfunktionen seiner Programmiersprache kennenzulernen) - also NICHT unbedingt Lex&yacc/SableCC/Javacc/usw anwenden ;)
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 22.04.08, 07:53   #2 (permalink)
01
 
Registriert seit: 16.05.06
01 Leistung: Facit NTK
Likes: 0
Standard

Also genau für sowas wurde z.B. Prolog geschrieben.
Da spielt auch Stark Graphentheorie mit rein.

Also Ziel ist es einen Parser zu schreiben, der das Wissen hat, dass die Prädikate(likes/hates) immer als Subjekt-Prädikat-Objekt stehen. Und dann nurnoch Stringschnippelei. Ist also nicht sooooooo schwer.
01 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 22.04.08, 10:11   #3 (permalink)
 
Registriert seit: 11.09.05
Diabeles Leistung: Facit NTK
Likes: 0
Standard

Nicht schön aber selten:
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

text = """Jim likes Larry and Jean, but hates Kim.
Bob loves Jean, and likes Larry and Kim.
Jean loves Bob, likes Jim, but hates Kim.
Kim hates Jim, likes Larry and Bob.
Larry loves Martin, and hates Karl and Jean."""

reg_exps = {}
for verb in ("loves", "hates", "likes"):
    reg_exps[verb] = re.compile("%s ([a-zA-Z]*)( and [a-zA-Z]*)*" % verb)

for line in text.split("\n"):
    person = line.split(" ")[0]
    print person
    for verb in reg_exps.keys():
        persons = reg_exps[verb].findall(line)
        print "  ", verb,
        try:
            print [p.replace(" and ", "") for p in persons[0] if p]
        except IndexError:
            print "nobody"
Diabeles ist offline   Mit Zitat antworten
Alt 22.04.08, 13:57   #4 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

@01: wenn Du da Graphentheorie brauchst, machst Du irgendwas falsch
Das ist wirklich NUR String splitten/verarbeiten.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 22.04.08, 19:16   #5 (permalink)
01
 
Registriert seit: 16.05.06
01 Leistung: Facit NTK
Likes: 0
Standard

Dachte eher an eine Exportfkt für DOT also Graphviz.
Sry hatte verpeilt das das als Competition gedacht war
01 ist offline   Mit Zitat antworten
Alt 24.04.08, 14:50   #6 (permalink)
 
Registriert seit: 12.01.07
Ivan Dolvich Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von CDW
@01: wenn Du da Graphentheorie brauchst, machst Du irgendwas falsch
Das ist wirklich NUR String splitten/verarbeiten.
Es wäre ein Graph wenn die Gefühle sich transitiv verbreiteten z.B. ich mag Bob, bob mag Alice also mag ich auch Alice.
Ivan Dolvich ist offline   Mit Zitat antworten
Alt 25.04.08, 18:37   #7 (permalink)
 
Registriert seit: 22.03.08
MontyPerl Leistung: Facit NTK
Likes: 0
Standard

for the lulz   
Code:
$ cat list
Jim likes Larry and Jean, but hates Kim.
Bob loves Jean, and likes Larry and Kim.
Jean loves Bob, likes Jim, but hates Kim.
Kim hates Jim, likes Larry and Bob.
Larry loves Martin, and hates Karl and Jean.
$ perl -ne '($Z,$_)=/(\w+)\s+(.+)\.\n/;my%h;for(split/,/){($l)=/(likes|hates|loves)/;s/likes|loves|hates|but|and//g;$h{$l}=$_}print"$Z:\n";for(keys%h){print"$_\t$h{$_}\n"}print"\n"' list
Jim:
likes    Larry  Jean
hates      Kim

Bob:
likes      Larry  Kim
loves    Jean

Jean:
likes     Jim
hates      Kim
loves    Bob

Kim:
likes     Larry  Bob
hates    Jim

Larry:
hates      Karl  Jean
loves    Martin

Viel kleiner hab ichs nit bekommen =(
MontyPerl ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » "wer mag wen" - arbeiten mit Strings
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
regulären Ausdruck für (lange) Strings blueflash Code Kitchen 13 30.01.09 17:57
strings nur teilweise anzeigen lassen Executor (Web-) Design und webbasierte Sprachen 6 21.07.08 21:54
Verschlüsselung von Strings pLaYbOy Cryptography & Encryption 0 15.05.05 18:35
Batch Programmierung - Verarbeiten von Strings inter.faiz Code Kitchen 1 18.03.04 10:59
[C/C++]switch und strings soox Code Kitchen 3 24.12.03 15:28


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61