←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Inny
Ograniczenie ilości wypisywanych słów z pl...

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 02.01.2015

Witam,

 

Otóż istnieje sobie taka jedna gra, słowotok, w której gracz łączy ze sobą sąsiadujące litery, które mają utworzyć słowo.

Dolny limit - 3

Górny limit - 16 liter

Plansza wygląda tak:

S%C5%82owotok-179x300.jpg

Teraz tak, mam pod program podpiętą bazę danych słów ( 30 mb ). Macie jakieś pomysły, jak zrobić, by za pomocą wpisanych przeze mnie liter ( a jest ich 16 ), były wypisywane słowa na ekranie?

 

Aktualnie procedura do znajdywania słów wygląda w taki sposób i niestety, na nic więcej nie mogę wpaść:

  while not eof(plik) do
  begin
    count:=0;
    readln(plik, s);    // czytam slowo
    dlugosc:=length(s);  // pobieram dlugosc slowa
    if((dlugosc >= 3) AND (dlugosc<=16)) then // warunek by bylo slowo w slowotoku
    begin
        for i:=1 to dlugosc do // petla od 1 do dlugosci odczytanego slowa
        begin
        for j:=1 to 16 do // petla po wszystkich wpisanych literach
                begin
                if(s[i] = g_znaki[j]) then inc(count); 
                end;
        end;
    if(count=dlugosc) then writeln(s);
    end;
  end;

Niestety, jest to o wiele za mało, bo prawie w dalszym ciągu wypisuje mi +1000 słów. Oczywiście, mógłbym zablokować to, by słowa rozpoczynające się z taką samą frazą ( np. absurdalny, absurd, absurdalnie, absurdalność), ale w dalszym ciągu będę miał bardzo dużo wyników.

 

Myślałem, by zastosować tablicę dwuwymiarową i wpisywać np. litery od lewej strony, ale z tym by było naprawdę dużo zabawy, bo jest tyle kombinacji, że masakra xD

 


Użytkownik Wielkie Jol edytował ten post 02.01.2015 19:25
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 04.01.2015

a co konkretnie chcesz osiągnąć? bo nic z tego twojego słowotoku nie rozumiem xD

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 04.01.2015

a co konkretnie chcesz osiągnąć? bo nic z tego twojego słowotoku nie rozumiem xD

 

Słowotok to gra na telefony mobilne, w której co rundę która trwa 1:30 min pojawiają się nowe litery. Nową literę można ułożyć poprzez łączenie ze sobą sąsiednich liter. Czyli np. z obrazka, w którym załączyłem wyżej możemy odczytał słowo wół. ( 3 od góry lewy rząd, 2 dolne ).

 

Teraz chcę napisać program, w którym będzie mi pokazywało jakiś zasób słów, które będę mógł ułożyć z wpisanych przez siebie 16 liter.

 

Takie niby 'oszustwo', 'kod', jak zwał tak zwał :P

Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 04.01.2015

czyli ty wpisujesz 16 liter a program szuka w slowniku wszystkie slowa ktore można z tych liter ułożyc?

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 04.01.2015

Tak, wchodzę z 16 literami ( wpisuje sobie wszystkie, które mam podane akurat w danej rundzie ) i chcę, by każde możliwe słowo, jakie może powstać za pomocą połączenia się ze sobą liter było wypisane, czyli jak mam np.

 

A L C O 

H O L O

R P A S

 

To z takiej planszy można ułożyć np. słowo PAS, za pomocą połączenia się od siebie liter 3 na samym dole. Jedna litera nie może zostać użyta dwa razy.

 

Ja doszedłem tylko do tego, by wpisane przez siebie litery utworzyły wszystkie możliwe słowa, jakie mogą powstać za pomocą tych liter, a wiadomo,  to będzie słów od cholery przy pliku 30mb.

Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 04.01.2015

no ok ale są jakies zasady dotyczące tego że litery muszą ze sobą sąsiadować czy coś? bo jeśli nie to rozwiązanie sprowadza się do ułożenia wszystkich wariacji bez powtórzeń zbioru i wyszukania ich w słowniku. Jeśli zas muszą ze sobą sąsiadować litery to najprościej będzie brać każdą literę i jej sąsiedztwo i sprawdzać czy wyraz jest w słowniku - np rekurencyjnie

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 05.01.2015

Tak, muszą ze sobą sąsiadować, inaczej z 16 liter można właśnie by było ułożyć bardzo dużo wyrazów, czego przykładem jest kod, który podałem wyżej ( ogranicza on się tylko do wyświetlania wyrazów, które mają od 3 do 16 słów i właśnie składają się tylko z wpisanych przez siebie liter.

Odpowiedz