Programmierproblem Wort-Anagramme

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Programmierproblem Wort-Anagramme

    Bei einem meiner letzten Mittagsspaziergänge mit einem Kollegen nach dem Essen erzählte er mir, dass er eine Scala-Schulung machen würde und dabei folgende Aufgabe zu lösen hätte.
    Ich mache kein Scala, habe ihm aber meine Lösungsidee in Java erzählt.

    Hier die Aufgabe (ich hoffe, ich verletze damit keine Rechte):

    Man hat ein Dictionary von gültigen Worten.

    Das Programm hat als Eingabe einen Satz, z.B. „hallo heiner“ und ermittelt zunächst eine Buchstabenliste: (a,e,e,h,h,i,l,l,n,o,r}.

    Aus der Buchstabenliste sollen nun alle möglichen Wortanagramme ermittelt werden,
    also Sätze, deren Worte im Dictionary vorkommen, und die sämtliche Buchstaben der Buchstabenliste aufbrauchen.

    hallo heiner
    heiner hallo
    hallo herein
    hai lerne hol
    an leier hohl
    harn heil oel
    ...

    Noch ein Beispiel, mit dieser Eingabe

    final static List<Character> buchstaben = Arrays.asList('a', 'l', 'l','e','a','l','l','e');
    final static Set<String> gueltigeWoerter = new HashSet<String>(Arrays.asList("alle", "ella", "lale", "lela"));

    Hier müsste es 16 Lösungen geben.

    Hat jemand Interesse, diese Aufgabe spasseshalber zu lösen.

    Ich würde meine Lösung in den nächsten Tagen posten.

    Bedingung wäre noch, nur Libs aus Java6 zu verwenden,
    sonst ist es eventuell nicht für jeden nachvollziehbar.

    Damit es einfacher ist, sende ich hier mal die Konstanten meines Programmes:

    Quellcode

    1. final static List<Character> buchstaben1 =
    2. new List<Character>(
    3. Arrays.asList(
    4. 'a' ,
    5. 'l' ,
    6. 'l' ,
    7. 'e' ,
    8. 'a' ,
    9. 'l' ,
    10. 'l' ,
    11. 'e' ) );
    12. final static List<List<Character>> gueltigeWoerter1 =
    13. Arrays.asList(
    14. toCharListNoSpaces( "alle" ) ,
    15. toCharListNoSpaces( "ella" ) ,
    16. toCharListNoSpaces( "lale" ) ,
    17. toCharListNoSpaces( "lela" ) );
    18. final static List<Character> buchstaben2 =
    19. new List<Character>(
    20. toCharListNoSpaces( "hallo heiner" ) );
    21. final static List<List<Character>> gueltigeWoerter2 =
    22. Arrays.asList(
    23. toCharListNoSpaces( "hallo" ) ,
    24. toCharListNoSpaces( "heiner" ) ,
    25. toCharListNoSpaces( "herein" ) ,
    26. toCharListNoSpaces( "hai" ) ,
    27. toCharListNoSpaces( "lerne" ) ,
    28. toCharListNoSpaces( "hol" ) ,
    29. toCharListNoSpaces( "an" ) ,
    30. toCharListNoSpaces( "leier" ) ,
    31. toCharListNoSpaces( "hohl" ) ,
    32. toCharListNoSpaces( "harn" ) ,
    33. toCharListNoSpaces( "heil" ) ,
    34. toCharListNoSpaces( "oel" ) );
    35. private static List<Character> toCharListNoSpaces(
    36. final String str )
    37. {
    38. final ArrayList<Character> charList =
    39. new ArrayList<Character>();
    40. for ( int i = 0 ; i < str.length() ; i++ )
    41. {
    42. char chr = str.charAt( i );
    43. if ( false == Character.isWhitespace( chr ) )
    44. {
    45. charList.add( chr );
    46. }
    47. }
    48. return charList;
    49. }
    Alles anzeigen

    Viel Spass