Autorské riešenie
Pri riešení tejto úlohy nám pomôže rozbor konkrétneho prípadu zo zadania úlohy. Vežička zostavená z troch kociek s rozmermi a posunmi [[12, 1], [10, 5], [8, 0]] je stabilná, lebo priemet P ťažiska T telesa zloženého z dvoch horných kociek leží na hornej hrane spodnej kocky. Ak uvažujeme vežičku bez hornej kocky s rozmermi a posunmi [[10, 5], [8, 0]], tak tá je nestabilná, lebo priemet P ťažiska T vrchnej kocky leží mimo hornú hranu spodnej kocky. Presvedčíme sa o tom nasledovným výpočtom. V prípade telies s rovnakou hustotou, môžeme pre výpočet x-ovej súradnice ťažiska sústavy dvoch telies namiesto vzťahu s hmotnosťami xt = (xt1 * m1 + xt2 * m2) / (m1 + m2) použiť vzťah s objemami telies, t.j. xt = (xt1 * V1 + xt2 * V2) / (V1 + V2) Pri použití tohto vzťahu na sústavu viacerých telies (kociek) musíme testovať či sú stabilné všetky sústavy zhora prvých 2, 3, ... n kociek. Výsledné riešenie úlohy zapísané v programovacom jazyku Python môže vyzerať nasledovne:
def je_stabilna(vezicka): # inicializácia x-posunu a objemu telesa # (x_nad, objem_nad) umiestneného nad skúmanou kockou veza = vezicka.copy() a, x_nad = veza.pop(0) objem_nad = a ** 3 # zisťovanie či teleso z kociek (x_nad, objem_nad) je stabilné # nad aktuálne skúmanou kockou for a, x in veza: # zistenie či priemet ťažiska telesa z kociek (x_nad), # leží na hornej podstave skúmanej kocky stabilna = x - a / 2 <= x_nad <= x + a / 2 if not stabilna: return False # výpočet rozmerov nového telesa rozšíreného o skúmanú kocku - # pre ďalšiu iteráciu cyklu objem = a ** 3 x_nad = (objem_nad * x_nad + objem * x) / (objem_nad + objem) objem_nad = objem_nad + objem return stabilna # ilustračný príklad print(je_stabilna([[12, 1], [10, 5], [8, 0]])) # ilustračný príklad bez hornej kocky # print(je_stabilna([[10, 5], [8, 0]])) # prípad, keď 3D veža je nestabilná a 2D je stabilná # print(je_stabilna([[2, -1], [1, -0.5], [1.8, 0]])) Táto úloha je zameraná na:
Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojilo 11 tímov z kategórie GURU. Plný počet bodov dosiahli tímy seesharp a BonifacGroup, ktorým gratulujeme. V riešeniach sme zaregistrovali nasledovné nedostatky, vychádzajúce najčastejšie z nedôslednej analýzy problému, tvorby menej efektívneho riešenia či z pretrvávajúcich programátorských zlozvykov:
|
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |