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:
Alles anzeigen
Viel Spass
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
- final static List<Character> buchstaben1 =
- new List<Character>(
- Arrays.asList(
- 'a' ,
- 'l' ,
- 'l' ,
- 'e' ,
- 'a' ,
- 'l' ,
- 'l' ,
- 'e' ) );
- final static List<List<Character>> gueltigeWoerter1 =
- Arrays.asList(
- toCharListNoSpaces( "alle" ) ,
- toCharListNoSpaces( "ella" ) ,
- toCharListNoSpaces( "lale" ) ,
- toCharListNoSpaces( "lela" ) );
- final static List<Character> buchstaben2 =
- new List<Character>(
- toCharListNoSpaces( "hallo heiner" ) );
- final static List<List<Character>> gueltigeWoerter2 =
- Arrays.asList(
- toCharListNoSpaces( "hallo" ) ,
- toCharListNoSpaces( "heiner" ) ,
- toCharListNoSpaces( "herein" ) ,
- toCharListNoSpaces( "hai" ) ,
- toCharListNoSpaces( "lerne" ) ,
- toCharListNoSpaces( "hol" ) ,
- toCharListNoSpaces( "an" ) ,
- toCharListNoSpaces( "leier" ) ,
- toCharListNoSpaces( "hohl" ) ,
- toCharListNoSpaces( "harn" ) ,
- toCharListNoSpaces( "heil" ) ,
- toCharListNoSpaces( "oel" ) );
- private static List<Character> toCharListNoSpaces(
- final String str )
- {
- final ArrayList<Character> charList =
- new ArrayList<Character>();
- for ( int i = 0 ; i < str.length() ; i++ )
- {
- char chr = str.charAt( i );
- if ( false == Character.isWhitespace( chr ) )
- {
- charList.add( chr );
- }
- }
- return charList;
- }
Viel Spass