Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Inny

Ograniczenie ilości wypisywanych słów z pliku (metody)

inny

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 02.01.2015 19:19

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

  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#2 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 04.01.2015 19:02

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


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#3 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Autor tematu
  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 04.01.2015 20:00

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


  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#4 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 04.01.2015 20:08

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


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#5 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Autor tematu
  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 04.01.2015 21:12

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.


  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#6 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 04.01.2015 22:18

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


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#7 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Autor tematu
  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 05.01.2015 14:42

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.


  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.






Również z jednym lub większą ilością słów kluczowych: inny

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych