Miniprojekt Uppgift 1 Programmet som du skall göra skall hjälpa dig att vinna ”WordFeud” (Alfapet). Detta både genom att kunna träna på att skapa ord men också genom att låta dator hjälpa dig. Konstruera ett program som låter användaren bilda olika ord ur slumpmässiga bokstavsföljder eller ur bokstavsföljer som anges av användaren. Orden skall kontrolleras mot en ordlista. För varje bokstavsföljd skall dessutom programmet självt presentera alla möjliga ord i ordlistan som kan bildas ur uppsättningen. Lada ner filen som innehåller en del svenska ord. Krav Programmet frågar om du vill mata in egna bokstäver eller få de slumpade. Avändaren få mata in svar. ( Välj en meny med tre fall, exit, egna boksväver, slumpade bokstäver. Göra en grafisk användargränssnitt är också ok om du vill). Beroende på användarens input skall programmet skriva ut en följd 7 slumpmässigt valda bokstäver i intervallet a-z eller låta användaren mata in bokstäverna. Låt oss kalla följden S. Användaren får skriva in förslag på svenska ord som kan bildas enligt reglerna 1. Endast bokstäver i följden S får användas. 2. Varje bokstavsförekomst i S får användas högst en gång i det bildade ordet. Finns det t.ex. två förekomster av bokstaven t så får det bildade ordet innehålla högst två t. Föreslagna ord som uppfyller 1 och 2 samt finns i ordlistan godkänns och användaren får fortsätta. Användaren skall när som helst kunna avbryta dialogen genom att trycka exit varvid programmets egna förslag presenteras. Om användaren föreslår ett ord som inte är korrekt bildat enligt reglerna 1 och 2, eller om ordet inte finns i ordlistan, avbryts användardialogen och programmets egna förslag presenteras i bokstavsordning. De ord som skrivs ut av programmet skall givetvis uppfylla kraven ovan. Orden som användaren hittar eller som programmet genererar skall hållas i en datastruktur av typen TreeSet. Bara operationerna ”lägg till” och ” töm” och ” size” är viktiga. I onlineboken finns förslag om hur man implementerar en sådan datastruktur. Du kan välja att använda den eller Javas egna TreeSet. OBS! Lämpligt meddelande skall skrivas ut så att användaren får veta varför ett ord underkänns – skilj alltså fallet med ett felbildat ord m.a.p. reglerna 1 och 2 från fallet med ett korrekt bildat ord som saknas i ordlistan. Som lexikon skall du använda en datastrutur där sökningen är bäst möjligt. Använd en eller flera av datastrukturerna beskrivna i boken under kapitel ”Searching”. http://algs4.cs.princeton.edu/30searching/. Anpassa datastrukturen från boken till din uppgift. Bara de metoder som är nödvändiga skall vara med. Om du inte lyckats implementera en lämplig datastruktur för att ladda upp lexikonen använd java eget HashSet. Beroende på hur du designar din lösning, kan du behöva metoden includes som beskrivs nedan. För att kunna använda includes som finns färdig bland filerna du har laddat ner, behöver du kunna sortera tecknen i en sträng. Implementera därför metoden private String sort(String s) Tips: utnyttja klassmetoden java.util.Arrays.sort. public boolean includes(String a, String b) Testar inklusionsrelation mellan två strängar. Ej standardmetod. Finns bland filerna du laddar ner. Låt #(x,s) = antalet förekomster av tecknet x i strängen s. includes(a,b) returnerar true om, och endast om, för varje tecken x i b, #(x,b) ≤ #(x,a); annars false. Ett nödvändigt villkor före anrop av metoden är att teckenföljderna i båda strängarna är sorterade i växande följd (bokstavsordning). Extra (Ej obligatoriskt) Ett grafiskt gränssnitt till uppgifte hade varit trevligt att se. Uppgift 2. Sociala nätverk Sociala nätverk, där man på olika sätt kommunicerar med vänner, har på senare tid blivit alltmer populärt. Anta att du har startat en webbplats som tillhandahåller en social nätverkstjänst. Efter att en person har registrerat sig i systemet kan denne lägga till sina vänner i en speciell vänlista. Du har bestämt dig för att lagra vänskapslistor och som en datastruktur. T.ex. Graf. Du skall kunna lägga till nya vänner, du skall kunna söka och skriva ut en vis persons vänlista. Du skall också kunna hitta en vänsskapsväg.( Till exempel, om vill veta ”genom vilka vänner” du kan nå en viss person). Beskriv med egna ord samt med ritning hur en sådan datastruktur ser ut, samt hur algoritmerna för de operationer jag angett bör implementeras. Extra (Ej obligatoriskt) Implementera en lösning för det beskrivna scenariot. Du har i onlineboken klasser som beskriver Graf och kortaste vägen i Grafer. Anpassa dessa till din applikation.