Avatar billede longgaard Novice
11. december 2002 - 10:37 Der er 12 kommentarer og
1 løsning

Ordgætteri - Danne ord af bogstaverne fra et andet ord

Jeg har fået en lille puzzle opgave.....
Lav et program som kan danne alle ord ud fra bogstaverne fra et andet ord. Ugyldige bogstavs kombinationer skal sorteres fra ud fra en "ordbog" med gyldige ord (som jeg allerede har)

Ja, der er set ligende før, men de løsninger som jeg har set bruger alle bogstaverne i hvert dannet ord. I min opgave kan det dannede ord godt bestå af en delmængde af bogstaverne i det oprindelige ord. Et bogstav fra det oprindelige ord kan kun bruges samme antal gange som det forekommer i det oprindelige ord. Mellemrum er ikke tilladt

Eks. Ordet "andemad" kan danne ord som "den", "mand" og "andedam"
Avatar billede kennie_nm Nybegynder
11. december 2002 - 11:08 #1
du er altså ude på at danne alle mulige 1-, 2-, ..., 7-tupler vha trækning uden tilbagelægning fra mængden {a,n,d,e,m,a,d} og slå dem op i ordbogen.

1) sørg for at du kan slå hurtigt op i ordbogen (brug en datastruktur, der giver hurtige opslag), du får brug for at slå meget op
2) slå ikke oplagte negativer op:
  * tupler kun med konsonanter
  * find selv på flere regler
3) selvom du sorterer fra i 2), så får du MANGE mulige ( 7! + 6! + .. + 2 + 1)

god fornøjelse
Avatar billede longgaard Novice
11. december 2002 - 12:02 #2
Det var måske ikke helt klart i mit spørgsmål, men jeg savner en ide til logikken i koden til at danne bogstavskombinationer med...
Avatar billede longgaard Novice
12. december 2002 - 16:42 #3
Den er åbenbart lidt for svær til sølle 30 point, måske kan det hjælpe med lidt ekstra.

Der er nu 90 point til en god ide til logikken i koden.....

Altså: Hvordan skal koden til dannelse af ord se ud?
Avatar billede kennie_nm Nybegynder
12. december 2002 - 21:56 #4
med mindre du har adgang til noget statistik på kendte bogstavkombinationer (der findes ord med 'de' men ikke med 'xx') så bliver du vel nødt til at bruge brute force.

for (int i=1; i<= length('andemad'); i++){ #denne løkke bestemmer tuplelængden
  her har du i pointere, som ikke må pege på samme element
  løkke for hver tuplelængde
    nu tæller du pointerne op, så det altid er den sidste pointer der tælles op.
    Når den sidste pointer rammer length('andemad'), tælles den næstsidste pointer op
    og de efterfølgende pointere nulstilles.
  end løkke
}
Avatar billede killer_bee Nybegynder
19. december 2002 - 12:09 #5
Har løst det.

Her er to funktioner som gør de du vil

void CTesterDlg::MakeAllWords(CString Prefix, CString Remain)
{
    int n = Remain.GetLength();
   
    for(int i =0;i<n;i++){
        MakeAllWords(Prefix + Remain[i], Remain.Mid(i+1));   
    }

    Perm( "",Prefix);
}

void CTesterDlg::Perm(CString Prefix, CString Remain){

    if(Remain.IsEmpty()){

        //HER HAR DU ORDET .. KALD DIN ORDBOG FUNKTION HER
    }
   
    int n = Remain.GetLength();
   
    for(int i =0;i<n;i++){
            Perm( Prefix + Remain[i], Remain.Left(i) + Remain.Mid(i + 1));
    }
}
Avatar billede killer_bee Nybegynder
19. december 2002 - 12:10 #6
du kalder funktionen således:

ordet er "and"

MakeAllWords("","and");
Avatar billede killer_bee Nybegynder
19. december 2002 - 12:12 #7
oops glemte at sige der hvor du skal kalde din ordbog funktion, kald den med Perfix:

  if(Remain.IsEmpty()){
        DinOrdBogFunc(Perfix)
        //HER HAR DU ORDET .. KALD DIN ORDBOG FUNKTION HER
    }
Avatar billede killer_bee Nybegynder
13. januar 2003 - 09:09 #8
Haloooo ku du bruge svaret?? OG LUK spm!!
Avatar billede longgaard Novice
14. januar 2003 - 14:54 #9
Killer Bee -> Jeg har forsøgt mig lidt med dit svar, men det virker ikke helt (compile error) og det har knebet gevaldigt med at finde tid til at puzzle vidre, men det håber jeg at få om en uges tid fra nu.
Avatar billede killer_bee Nybegynder
22. januar 2003 - 14:26 #10
Jeg regnede med at selv ville kunne regne ud at feks CTesterDlg i erklæringen af funktionerne skal erstates med det klasse som du bruger i din applikation,eller fjern det helt og gør funktionerne globale.
Avatar billede killer_bee Nybegynder
22. januar 2003 - 14:30 #11
Jeg fostår ikke du har problemmer med det fordi det er bare ctrl-c ctrl-v dem i din applikation... jeg har testet den i min TesterApp ved at udskrive alle ord i en txt fil.. og det virker..
Avatar billede killer_bee Nybegynder
22. maj 2003 - 08:56 #12
LUK NU SPM!!!!!
Avatar billede longgaard Novice
03. maj 2005 - 23:15 #13
Fik det ikke til at virke, så det er lagt på hylden...

Noget forsinket kommer her lidt point for forsøget.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester