» Poradna » Programy

Všechny možné kombinace délek nástrojů. (PYTHON)

 | Microsoft Windows 10 Chrome 91.0.4472.77

Dobrý den.Tak to dnes zkusím znovu, možná, že mi někdo stihne poradit, než mi tu otázku zase nějaký pohotový admin, jež každého považuje za studenta a každý problém za domácí úkol, uzamkne.Potřeboval bych poradit s programem, jež by mi vyflusl všechny možné kombinace součtů následujících délek - 20,20,25,25,30,30,35,35,40,40,100,100,100,100,200,200,515,515,515,515mm.Pro srozumění - nejedná se o školní domácí úkol, ale jsou to délky matric na ohraňovacím lisu... potřebuji zjistit veškeré možné kombinace sestavitelných délek, prostě pro přehled.Dále jsem také včera psal, že kdyby byl program napsaný v pythonu, bylo by to super - to z důvodu, že v pythonu jsem zkoušel občas něco sesmolit, čistě jako samouk pro zábavu a mám ho tedy v pc nainstalovaný. A vzhledem k tomu, že mám ještě jednu matrici a asi čtyři druhy razníků, kde se ty délky segmentů liší, mohl bych si je do vzorce snadno dosadit a zjistit i kombinace ostatních nástrojů.Tak snad jsem objasnil situaci natolik, aby nebylo nutné ten dotaz hned uzamknout. Do komentu ještě hodím program, který jsem se včera pokusil sesmolit... sice to vyhodí celkem dost kombinací, ale bohužel ne všechny... to už je nad mé síly. Děkuji za případné tipy.

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 Chrome 91.0.4472.77

https://pastebin.com/JntquseZŘíkal jsem si, jestli PYTHON třeba nemá nějakou funkci, která by tohle přímo řešila...//nedávejte sem celý kód, používejte služby typu Pastebin! Admin//

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 88.0

https://pastebin.com/gd7BnheFMam silny pocit deja-vu, velmi podobny dotaz tady uz jednou byl.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 91.0.4472.77

Ano, jednou před lety jsem řešil ideální kombinaci segmentů do konkrétní délky, máte dobrou paměť. :) Já Vám moc děkuji. Paráda.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 60.0

Možná kdybys míň vysvětloval, proč ti admin nemá zamknout tvůj dotaz a víc řekl, kde máš problém, tak bys udělal líp.Jinak zadal jsem do googlu "combinations python" a hned první odkaz je:https://docs.python.org/3/library/itertools.htmlJestliže tam máš funkce, které ti vyplivnou všechny kombinace, tak nechápu, jak ti nějaká může chybět!Jestli chápu správně tvůj problém, tak jde o toto:1) potřebuješ si nejdříve označit ty jednotlivé délky čísly 1..N. (v tvém případě je N=20)2) pak vygeneruješ v cyklu klasicky všechny 1 až N-prvkové kombinace z čísla N3) pak čísla 1..N v těch kombinacích nahradíš těmi svými délkami.4) teď máš všechny kombinace vygenerované. Pro kontrolu jich musí být celkem 2^N -1 (v tvém případě 1 048 575). Pozn. Celkem všech kombinací do daného čísla N je 2^N, což je součet čísel na řádce Pascalovského trojúhelníku odpovídající číslu N. Pro tebe ale nemá význam 0-prvková kombinace, která je právě jedna, takže ji odečítám od celku, protože tu generovat nebudeš.5) a tím se ti ten problém nyní zúžil na pouhé sčítání jednotlivých délek v těch kombinacích a dále redukci těch kombinací, které jsou stejné, protože se ti ty délky (tj. prvky těch kombinací) v tom tvém setu opakují.6) až to budeš mít, tak bys měl zjistit, že v případě tvého zadání lze z daných čísel sestavit 18224 unikátních kombinací délek, které dohromady tvoří 626 různých součtů dělek.Kde máš tedy problém a co ti není jasné?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android AppleMAC-Safari 5.0

Tady je jednoduché řešení, které:1. Najde všechny možné součty délek.2. Pro každý možný součet délek ukáže (jenom) nejkratší seznam dílů, kterým lze takové délky dosáhnout.https://pastebin.com/Hf3aJSiz

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 78.0

To "jednoduche" reseni je vyrazne delsi a komplikovanejsi nez to, co jsem sem hodil pred tremi dny Ale fakt je, ze tvuj program to vypise setridene podle delky - na to bych musel k tomu svemu pridat dva radky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 78.0

A jeste ti to vynechava nektera mozna reseni

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 91.0.4472.77

Ano, je tam bohužel copy&paste chyba. Místo "while explore[0][0] < len(counts):" tam má být jenom "while explore:" Pak to vypíše všech 623 délek.Jinak tvůj algoritmus je zbytečně neefektivní. Dokáže sice (po úpravě) vyhledat všechny možné způsoby, jak dosáhnout určité délky, ale to (pokud vím) nebylo cílem. Můj algoritmus pro každou dosažitelnou délku vyhledá jenom nejkatší možné řešení a větve „stromu“ vedoucí ke stejným délkám ořeže.(I když, pravda, dá se najít „protipříkladová“ posloupnost délek, u které taková optimalizace nepomůže.)

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 78.0

Ano, tvuj program je "interne efektivnejsi", o tom neni sporu. Bohuzel je take mnohem vic nachylny na chyby a mnohem slozitejsi na pochopeni. A tazatele asi pramalo zajima, jestli se k vysledku dostane za 0,2 nebo 0,3 sekundy :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 78.0

A jeste bych rad nekdy pochopil, jak se tvuj program dopocital k mozne delce "3150". Ale nejsem dost masochista, abych se v nem hrabal a hledal, kde mas chybu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android AppleMAC-Safari 5.0

Chybu mám v tom, že místo "sel + 1" má být "i + 1".No tak jo. Tak jsi mě přistihl. https://pastebin.com/XYz9CcNjŽádný masochismus bych v tom nehledal. Vzpomínám si na slova jednoho přednášejícího: „Ono by to bylo o tolik efektivnější, kdybyste to měl správně!!!“Jo. Přesně tento případ, bohužel.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Python, Domácí úkol, Úkol, Samouk