Předvánoční slevová akce Java týden
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Lamač přesmyček

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Možná se vám již někdy stalo, že jste v časopisu, novinách nebo jinde narazili na nějakou záludnou přesmyčku a nemohli jste ji vyřešit. Pomůže Vám tento jednoduchý program – Lamač přesmyček.

O programu

Lamač přesmyček je jednoduchý, snadno ovladatelný program napsaný v Javě. Neinstaluje se a v počítači nezanechává žádné soubory.

Použití

Přesmyčka se napíše do textového pole a po stisku klávesy enter dojde k jejímu vyřešení. Vyřešení by mělo být prakticky okamžité.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Délka přesmyčky není nijak omezena. Na velikosti písmen nezáleží.

Pokud nebude nalezeno žádné odpovídající slovo, stále je možnost najít ho ručně ve výpisu permutací. Výpis permutací je možné provést až do délky 10 znaků nebo 25 000 permutací.

Slovníky

Vestavěné
  • český – 1 070 713 slov
  • anglický – 632 184 slov (včetně slov s apostrofem)
Uživatelské

Uživatel má možnost přidat vlastní slovníky.

Mohou být přidány pouze textové soubory s kódováním UTF-8, na příponě souboru nezáleží. Každý řádek představuje jeden záznam. Jediná prováděná úprava je oříznutí každého řádku od bílých znaků. Na velikosti znaků opět nezáleží.

Dodatečné informace

Ke spuštění je vyžadovaná Java 8.

Repozitář se zdrojovými kódy: https://github.com/…agram-Solver


Galerie

Program byl vytvořen v roce 2015.

 

Stáhnout

Staženo 3501x (5.61 MB)
Aplikace je včetně zdrojových kódů v jazyce java

 

 

Program pro vás napsal Hartrik
Avatar
Jak se ti líbí článek?
7 hlasů
Autor měl dříve programování jen jako hobby, nyní studuje informatiku na vysoké škole.
Všechny články v sekci
Zdrojákoviště Java - JavaFX
Aktivity (1)

 

 

Komentáře

Avatar
Mediel
Redaktor
Avatar
Mediel:28.1.2013 20:02

Ahoj, myslíš, že bys sem mohl dát i zdroják?

Odpovědět
28.1.2013 20:02
Nechci vám ukazovat, jak dobrý jsem já ... Chci vám ukázat, jak dobrý můžete být vy ... Když uvěříte ... V sami sebe...
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:28.1.2013 21:36

Funguje to perfektně. Taky bych rád viděl zdrojový kód

Odpovědět
28.1.2013 21:36
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:28.1.2013 23:04

Není to obfuskované - můžete dekompilovat :)

Odpovědět
28.1.2013 23:04
https://www.facebook.com/peasantsandcastles/
Avatar
Hartrik
Redaktor
Avatar
Hartrik:28.1.2013 23:23

Ty šmejde :)
Ještě uvidím, ale nevím co na tom chcete zkoumat - je to jen metoda co hledá všechny možnosti a cyklus co hledá shody v seznamu slov...

 
Odpovědět
28.1.2013 23:23
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Hartrik
Petr Nymsa:29.1.2013 8:16

Já vím, ale běhá ti to vcelku rychle, tak si chci jenom kouknout, ale pokud nechceš poskytovat kód, nemusíš :)

Odpovědět
29.1.2013 8:16
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Hartrik
Redaktor
Avatar
Hartrik:29.1.2013 17:18

Přidal jsem zdrojové kódy a odeslal ke schválení.

 
Odpovědět
29.1.2013 17:18
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Hartrik
Petr Nymsa:31.1.2013 20:57

Můžu se zeptat jak jsi optimalizoval vyhledávání ? Zkouším napsat vlastně kopii tvého programu v C#. Využívám stejné slovníky jako ty ale mám tam 216159 slov, což už samo o sobě zpomaluje prohledávání. DO zdrojáků jsem nekoukal, ale jak prohazuješ písmena ? Já spočítám všechny možnosti, což je faktoriál počtu písmen. A potom náhodně prohazuju písmena, dokud se netrefí do věty, která ještě nebyla vygenerovaná. Vím a sám to vidím že tohle není nejrychlejší způsob, u slov nad 6 písmen to už celkem trvá. Takže řešení přes Random je to nejhloupější, ale nenapadá mě jiné řešení

Odpovědět
31.1.2013 20:57
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Hartrik
Redaktor
Avatar
Hartrik:31.1.2013 23:10

Vyhledávání jsem nijak neoptimalizoval, jen jsem použil nějakou kolekci na způsob hašování tabulky, která by měla mít rychlejší vkládání nových položek, navíc nepovoluje více stejných záznamů a vyhledávání v ní je 1300x rychlejší než procházení všech prvků s metodou equals - tak jsem to měl ve verzi 1.0.
Pro zjištění všech obměn jsem použil jakousi rekurzivní metodu. Teď ti nedokážu napsat jak funguje, našel jsem ji na googlu a trochu upravil. Obměny slova také vkládám do kolekce popsané výše. Faktoriál je jen k signalizaci postupu.
Abych byl upřímný tak se mi moc nelíbí, že chceš můj program napodobit (i když mi to dělá určitým způsobem dobře :) ), obávám se, že tak přijdu o "exkluzivitu" Lámače presmyček...

 
Odpovědět
31.1.2013 23:10
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Hartrik
Petr Nymsa:1.2.2013 11:42

Děkuji za odpověď, ale upřímně, těhle programů už je desítky, tak jako jiných programů a celkem jsem si chtěl vyzkoušet jak mi to poběží rychle. Možná z toho nakonec udělám aplikaci přímo pro windows 8, vadit snad nebude ne ? :)

Odpovědět
1.2.2013 11:42
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Hartrik
Fugiczek:1.2.2013 11:48

Když se bojíš že přijdeš o exkluzivitu, proč tedy zveřejňuješ zdrojáky, to je jak kdyby jsi se toho programu vzdal :-D

 
Odpovědět
1.2.2013 11:48
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Fugiczek
David Čápka:1.2.2013 12:05

Do zdrojáků si může uvést licenci, nikde přeci nepovoluje aby mu to někdo vzal :) Navíc nevím, co by z toho kdo měl, stejně bude druhý.

Odpovědět
1.2.2013 12:05
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na David Čápka
Fugiczek:1.2.2013 12:10

Licenci tam nemá a navíc ji hromada lidí přehlíží, nebo se jen nad ní pousměje. Druhý, to je spekulativní, možná zde na devbooku, jinde ne.

 
Odpovědět
1.2.2013 12:10
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Fugiczek
David Čápka:1.2.2013 12:15

Minimálně v té aplikaci vidím copyright :) Prakticky ze všech C# programů (a většiny Javových) se dají vytahat zdrojáky a nevím o tom, že by s tím byl problém, když to někdo publikuje bez změny, přijde se na to.

Odpovědět
1.2.2013 12:15
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na David Čápka
Fugiczek:1.2.2013 12:22

Jo tak normální člověk to celý nezkopíruje, jen se podívá jak to funguje a udělá to podle sebe. Jen se mi líbí, že zveřejňuje kódy a pak si stěžuje že někdo chce udělat napodobeninu :-D Kopíruje se hodně programů a her například GTA a Saints Row, kde SR kopíruje GTA, nebo hromadu lidí se snaží udělat napodobeninu Minecraftu, která by byla výkonější, samozřejmě zatím neúspěšně.

 
Odpovědět
1.2.2013 12:22
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:1.2.2013 12:24

Téměř každá hra je vlastně napodobenina - např. všechny strategie jsou vlastně kopie Duny... :D

Odpovědět
1.2.2013 12:24
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:1.2.2013 13:01

Neřekl jsem že kopíruji kód, pouze jsem chtěl udělat aplikaci, na podobném principu, aplikace by byla umístěná na Windows store a momentálěn musím do neděle stihnou 6 aplikací, jde o rychlost, ne o kvalitu aplikací, jedná se o malou soutěž o mobily. Každopádně nechci aby mě někdo nařknul že kopíruji, ale jak řekl Luboš Běhounek Satik , všechno je kopie všeho, hodně málo je originál :)

Odpovědět
1.2.2013 13:01
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michael Olšavský:1.2.2013 13:24

Jestli je to do nejake souteze, tak nemam nic proti oopii napadu, ale kopirovat algoritmy by si nemusel :-D zkus to udelat sam.

 
Odpovědět
1.2.2013 13:24
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michael Olšavský
Petr Nymsa:1.2.2013 13:29

Kopírovat algoritmy ? o_O Pouze jsem se zeptal jestli to řešil tak jak já, ale jenom nějak optimalizoval. Zdroják od jeho programu jsem ještě neotevřel a za celou dobu jsem si vždy napsal vše sám. Nemám zapotřebí kopírovat, co z toho budu mít ? Nic, nenaučím se to, nepochopím. Chtěl jsem se zeptat jakým způsobem to řešil a jen tak mimochodem, popsaných algoritmů je stovky ale nejsou k nim kódy, o to jde. Stačí třeba naznačit jak by mohl algoritmus fungovat, viz příklady (Select sort, Quick Sort, Algoritmus vlny, algoritmus Plechovky) apod.

Odpovědět
1.2.2013 13:29
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michael Olšavský:1.2.2013 13:34

Tak v pohodě. :-) Vystihl si co sem chtěl říct kdyby si to kopiroval.

 
Odpovědět
1.2.2013 13:34
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michael Olšavský
Petr Nymsa:1.2.2013 13:40

Aktuálně dělám rychle jiné, neužitečné a nesmyslné aplikace. Microsoftu jde pouze o čísla aplikací na Windows store, a mě ten mobil celkem láká :D

Odpovědět
1.2.2013 13:40
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Michael Olšavský
Fugiczek:1.2.2013 13:43

Je tam pouze algoritmus na tvoření kombinací slov z těch písmen, nic složitého a na vyhledávání používá jen z HashSetu metodu contains(). Z této aplikace bych si tak možná akorát vyparsoval slovník :-D

 
Odpovědět
1.2.2013 13:43
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Fugiczek
Petr Nymsa:1.2.2013 13:45

Slovník už mám, dokonce s dvojnásobkem slov :D. Právě jsem se ptal na způsob jak zkoušel kombinace, můj způsob při 720 kombinacích (slovo o délce 5ti znaků) trvá už celkem nepřiměřeně dlouho :(

Odpovědět
1.2.2013 13:45
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Petr Nymsa
Fugiczek:1.2.2013 13:47

Má to tu i se zdrojákama tak nahlédni jak to dělá. Čtením zdrojáků se taky spoustu věcí naučíš ;-)

 
Odpovědět
1.2.2013 13:47
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Petr Nymsa
Luboš Běhounek Satik:1.2.2013 14:21

Která část je nejpomalejší?
Tvoření všech kombinací nebo vyhledávání?

Odpovědět
1.2.2013 14:21
https://www.facebook.com/peasantsandcastles/
Avatar
Hartrik
Redaktor
Avatar
Hartrik:1.2.2013 14:32

Myslel jsem to spíš tak, aby se tady hned nezačaly povalovat spousty lámačů přesmyček - byl to můj originální nápad to přece musí každý pochopit... jinak mi je to jedno.
Zdroják jsem uvolnil protože vím že to dokáže každý trouba i bez něj a chtěl jsem vám vyjít vstříc.
A pokud vám jde o slovník, tak je tam něj odkaz :)

 
Odpovědět
1.2.2013 14:32
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:1.2.2013 14:41

Když jsme u těch slovníků - nevíte někdo, kde zadarmo sehnat nějaký český slovníky na scrabble (kris-kros)? :)

Editováno 1.2.2013 14:42
Odpovědět
1.2.2013 14:41
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:1.2.2013 14:50

Tvoření kombinací je nejpomalejší, prohelání a porovnání se slovníkem je v pohodě, resp. rychlost je taková, kterou celkem očekávám.

http://ucnk.ff.cuni.cz/retrograd10.php Zde máš 3 slovníky který obsahují dohroamdy přes 200 000 slov, což už je slušný číslo :)

Editováno 1.2.2013 14:51
Odpovědět
1.2.2013 14:50
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Hartrik
Petr Nymsa:1.2.2013 14:52

Rozhodně nebudu sem přidávat další lámač přesmyček, už mám vymyšlené i jiné aplikace, tkeré bych mohl umístit na Windows store, jde spíš o to ,že tahle má alespoň malý smysl použití :D

Odpovědět
1.2.2013 14:52
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Hartrik
Redaktor
Avatar
Hartrik:1.2.2013 14:55

V pořádku ;)

 
Odpovědět
1.2.2013 14:55
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:1.2.2013 14:58

A jak ty kombinace tvoříš?
5 písmen není moc, aby byl nějak důvod k dlouhému trvání... :)

Odpovědět
1.2.2013 14:58
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:1.2.2013 16:12

Viz několik příspěvků nahoře

Odpovědět
1.2.2013 16:12
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Petr Nymsa
Luboš Běhounek Satik:1.2.2013 16:55

Aha, random, to se pak nediv :D

Použij buďto rekurzi nebo třeba zásobník.
Přes zásobník:

public struct StackData
    {
        public String prefix;
        public String charsToPermutate;

        public StackData(String prefix, String charsToPermutate)
        {
            this.prefix = prefix;
            this.charsToPermutate = charsToPermutate;
        }
    }
private List<String> GetAllCombinations(String word)
        {
            Stack<StackData> stackRecord = new Stack<StackData>();
            List<String> words = new List<string>();

            stackRecord.Push(new StackData("", word));

            while (stackRecord.Count > 0)
            {
                StackData w = stackRecord.Pop();

                if (w.charsToPermutate.Length == 0) // finalni permutace
                {
                    words.Add(w.prefix);
                    continue;
                }

                for (int i = 0; i < w.charsToPermutate.Length; i++)
                {
                    StackData tmp = new StackData(w.prefix + w.charsToPermutate[i], w.charsToPermutate.Remove(i, 1));
                    stackRecord.Push(tmp);
                }

            }

            return words;
        }
Editováno 1.2.2013 16:56
Odpovědět
1.2.2013 16:55
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:1.2.2013 19:34

To už vypadá zajímavě ale budu to muset povylepšit nebo nějak předělat, neboť u slova lokomotiav, tedy přesmyčka slova lokomotiva, to dělá asi miliardu kombinací, resp. nedočkáš se výsledku :D.

Edit: Ne, stackoverflow, to se stane :D

Editováno 1.2.2013 19:34
Odpovědět
1.2.2013 19:34
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:1.2.2013 20:07

Stack overflow nastane většinou při příliš hluboké (nebo špatně napsané) rekurzi, protože každé volání funkce (i v rekurzi) na zásobník aplikace přidá nějaké hodnoty (parametry funkce, případně obsahy registrů) a tenhle zásobník je defaultně velký jen 1MB.

Obejít to můžeš právě použitím kolekce Stack, která zásobník simuluje, ale není na zásobníku, takže má přístup k celé paměti.

(Pozor - neplést zásobník aplikace (stack) a zásobník (Stack) jako kolekci .NETu)

Odpovědět
1.2.2013 20:07
https://www.facebook.com/peasantsandcastles/
Avatar
Hartrik
Redaktor
Avatar
Hartrik:2.2.2013 21:08

Před chvílí jsem nahrál novou verzi.
Změny: gui, přidán anglický slovník (480 000 slov), informace a na velikosti písmen už nezáleží...

 
Odpovědět
2.2.2013 21:08
Avatar
Michal
Neregistrovaný
Avatar
Michal:3.2.2013 13:01

VYhledávač přesmyček online: http://anagrammer.org/

 
Odpovědět
3.2.2013 13:01
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na Michal
Hartrik:3.2.2013 13:33

Tak o tom jsem nevěděl (teda narazil jsem na to, ale myslel jsem si že tam přesmyčky jen tvoří)...
Nicméně můžu navíc nabídnout podporu diakritiky a výpis všech obměn.

 
Odpovědět
3.2.2013 13:33
Avatar
Michal
Neregistrovaný
Avatar
Odpovídá na Hartrik
Michal:6.2.2013 10:13

Napiš mi na mail, diakritiku bychom mohli vyzkoušet i online, jen těch kombinací asi bude podstatně méně.

 
Odpovědět
6.2.2013 10:13
Avatar
Hartrik
Redaktor
Avatar
Hartrik:8.2.2013 22:05

Změny v nové verzi

  • podpora dlouhých slov
  • lépe čitelný kód
  • značné zmenšení velikosti
 
Odpovědět
8.2.2013 22:05
Avatar
eliška
Neregistrovaný
Avatar
eliška:9.4.2013 19:26

twle nevěděla sem přesmičky ale ten server je nej:O:O:O :D

 
Odpovědět
9.4.2013 19:26
Avatar
Hartrik
Redaktor
Avatar
Hartrik:2.6.2013 13:04

Změny v nové verzi

  • celý kód jsem kompletně přepsal (a okomentoval) - aby vyhovoval zásadám OOP
  • změněn vzhled (look and feel) - nyní stejný na všech platformách
  • načítání slovníků a vypisování permutací je o dost rychlejší

Do popisu jsem zapomněl napsat, že aktuální rychlost zjistíte najetím na progressbar. (obrázek 2)

 
Odpovědět
2.6.2013 13:04
Avatar
Hartrik
Redaktor
Avatar
Hartrik:5.2.2015 14:53

Tak jsem zase nahrál novou verzi, která více odpovídá mým současným znalostem.

Hlavní změny v bodech:
• kompletní přepis + přechod na Javu 8
• změna vzhledu (JavaFX)
• délka přesmyčky již není omezena
• přidán správce slovníků, podpora pro uživatelské slovníky
• značně rozšířeny vestavěné slovníky
• "líné" načítání vestavěných slovníků (po částech)
• řešení přesmyček má nyní nízkou časovou složitost -> vyřešení libovolně dlouhé přesmyčky v řádu milisekund

Editováno 5.2.2015 14:54
 
Odpovědět
5.2.2015 14:53
Avatar
d_p
Člen
Avatar
d_p:10.2.2015 14:01

Ahoj,

neslo by, aby se slova pri vypisu radila podle abecedy? Tzn aá ií rř a ne písmena s diakritikou na konci...

Kdyz si pridam slovnik a program pak ukoncim, musim ho pridavat znova. Nemohl by si program pridane slovniky pamatovat?

Jak velke slovniky lze pridavat? Pridal jsem tri s cca 3000000 slovy a dalsi uz ne...

Dik

 
Odpovědět
10.2.2015 14:01
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na d_p
Hartrik:10.2.2015 19:26

Ahoj,

Řazení opravím, nějak jsem si toho ani nevšiml.

Něco takového plánuji do další verze.

Není to nijak omezené, záleží na dostupné paměti. Mám v plánu zkusit ještě nějaké jiné struktury pro ukládání slov, možná se tam toho poté vejde víc...

 
Odpovědět
10.2.2015 19:26
Avatar
mjezek
Člen
Avatar
mjezek:1.6.2017 14:51

Nefunguje přesmyčka:
mldachýa - dmýchala

 
Odpovědět
1.6.2017 14:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 45 zpráv z 45.