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.