abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:33 | IT novinky

    Evropská rada vydavatelů (EPC) předložila Evropské komisi stížnost na americkou internetovou společnost Google kvůli její službě AI Overviews (AI souhrny), která při vyhledávání na internetu zobrazuje shrnutí informací ze zpravodajských serverů vytvořená pomocí umělé inteligence (AI). Evropská komise již v prosinci oznámila, že v souvislosti s touto službou začala firmu Google vyšetřovat. Google obvinění ze strany vydavatelů

    … více »
    Ladislav Hagara | Komentářů: 8
    dnes 04:44 | Komunita

    Ubuntu 26.04 (Resolute Raccoon) už nebude v desktopové instalaci obsahovat GUI nástroj 'Software & Updates'. Důvodem jsou obavy z jeho složitosti pro běžné uživatele a z toho plynoucích bezpečnostních rizik. Nástroj lze doinstalovat ručně (sudo apt install software-properties-gtk).

    NUKE GAZA! 🎆 | Komentářů: 12
    dnes 04:33 | IT novinky

    Thomas Dohmke, bývalý CEO GitHubu, představil startup Entire - platformu pro spolupráci vývojářů a agentů umělé inteligence. Entire získalo rekordních 60 milionů dolarů na vývoj databáze a nástrojů, které mají zefektivnit spolupráci mezi lidmi a agenty umělé inteligence. Dohmke zdůrazňuje potřebu přepracovat tradiční vývojové postupy tak, aby odpovídaly realitě, kdy většinu kódu produkuje umělá inteligence.

    NUKE GAZA! 🎆 | Komentářů: 0
    dnes 04:22 | Zajímavý projekt

    Toyota Connected North America oznámila vývoj open-source herního enginu Fluorite, postaveného na frameworku Flutter. Pro renderování grafiky využívá 3D engine Filament od společnosti Google a dle svého tvrzení cílí na konzolovou kvalitu her. Fluorite je zřejmě navržen tak, aby fungoval i na méně výkonném hardware, což naznačuje možnost použití přímo v ICE systémech vozidel. Zdrojový kód zatím zveřejněný není.

    NUKE GAZA! 🎆 | Komentářů: 0
    dnes 04:11 | Bezpečnostní upozornění

    Byl vytvořen nástroj a postup pro překonání věkového ověření platforem Discord, Kick, Twitch, Snapchat (a možná dalších), kód je open-source a dostupný na GitHubu. Všechny tyto sítě používají stejnou službu k-ID, která určuje věk uživatele scanem obličeje a na původní server posílá pouze šifrovaná metadata, ty ale sociální síť už nedokáže sama nijak validovat, 'útok' spočívá ve vygenerování a podstrčení legitimně vypadajících ověřovacích metadat.

    NUKE GAZA! 🎆 | Komentářů: 6
    včera 14:11 | IT novinky

    Jihokorejská kryptoměnová burza Bithumb přiznala vážné selhání interních systémů, které ji vystavilo riziku sabotáže a nezabránilo chybné transakci v hodnotě přes 40 miliard dolarů (814 miliard Kč). Druhá největší kryptoměnová burza v Koreji minulý týden při propagační akci omylem rozeslala zákazníkům zhruba 620 000 bitcoinů místo 620 000 wonů (8700 Kč). Incident vyvolal pokles ceny bitcoinu o 17 procent. Většinu

    … více »
    Ladislav Hagara | Komentářů: 9
    včera 13:55 | Nová verze

    Google Chrome 145 byl prohlášen za stabilní. Nejnovější stabilní verze 145.0.7632.45 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Zpátky je podpora grafického formátu JPEG XL, viz Platform Status. Odstraněna byla před třemi lety. Nový dekodér JPEG XL jxl-rs je napsán v Rustu. Zobrazování JPEG XL lze vyzkoušet na testovací stránce. Povolit lze v nastavení chrome://flags (Enable JXL image format).

    Ladislav Hagara | Komentářů: 0
    10.2. 22:44 | Nová verze

    Byla vydána nová verze 1.26 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    10.2. 18:11 | Nová verze

    CrossOver, komerční produkt založený na Wine, byl vydán ve verzi 26. Přehled novinek v ChangeLogu. CrossOver 26 vychází z Wine 11.0, D3DMetal 3.0, DXMT 0.72, Wine Mono 10.4.1 a vkd3d 1.18. Do 17. února lze koupit CrossOver+ se slevou 26 %.

    Ladislav Hagara | Komentářů: 16
    10.2. 14:22 | Komunita

    KiCad je nově k dispozici také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit [Mastodon, 𝕏].

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (11%)
     (26%)
     (3%)
     (4%)
     (2%)
     (12%)
     (27%)
    Celkem 851 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: požírání matice

    10.9.2017 19:56 RM
    požírání matice
    Přečteno: 1551×
    Protože o víkendu u sousedů na "růtu" programátoři požírali (možná ještě požírají) matici - stylem od levého horního rohu spirálovitě do středu - a používali k tomu různé jazyky, které já neznam, chtěl bych se zeptat jak na to jít třeba v Perlu 6, který právě studuji? Ale klidně i jiné jazyky, pokud to bude mít rozumnou délku, případně nějaký ten vtip k tomu ;). Jako ukázku dávám svůj kód v Perlu 5.
    $a = [ [1, 3, 5, 7, 6],
           [2, 5, 8, 2, 5],
           [5, 7, 8, 1, 2],
           [4, 2, 3, 5, 6],
           [8, 6, 5, 4, 2] ];
    
    while(@{$a}) {
        push @list, @{shift $a};
        push @list, pop($a->[$j++])  while @{$a->[$j]}; $j--;
        push @list, reverse(@{pop $a});
        push @list, shift($a->[$j])  while $j>0 && @{$a->[--$j]};
    }
    print "@list";
    

    Řešení dotazu:


    Odpovědi

    wamba avatar 10.9.2017 20:46 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: požírání matice
    Např. tvá verze pro Perl 6
    sub snake ($matrix is rw) {
        my @snake;
        while $matrix {
            @snake.push: |.shift with $matrix;                 #left
            @snake.push: |$_».pop with $matrix;                #down
            @snake.push: |.pop.reverse with $matrix;           #right
            @snake.push: |$_».shift.reverse with $matrix;      #up
        }
        @snake
    }
    
    Trochu vylepšená verze
    sub snake2 ($matrix is rw) {
        my @snake;
        my @take = |(
            { .shift },                 #left
            { .map: *.pop },            #down
            { .pop.reverse },           #right
            { .map( *.shift ).reverse } #up
        ) xx *;
        while $matrix {
            my &action = @take.shift;
            @snake.push: |$matrix.&action;
        }
        @snake
    }
    
    Verze s otočením:
    sub snake3 (@matrix is copy) {
        my @snake;
        while @matrix {
            @snake.push: |@matrix.shift;
            @matrix = reverse [Z,] |@matrix;
        }
        @snake
    }
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    11.9.2017 13:08 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Díky, pěkná ukázka.
    11.9.2017 20:12 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Takhle by to v Perlu 5 vypadalo s map místo while:
    while(@{$a}) {
         push @list, @{shift $a};
         push @list, map { pop $_ } @{$a};
         push @list, reverse(@{pop $a});
         push @list, reverse map { shift $_ } @{$a}
    }
    
    Vypadá to lépe, jen za cenu dalšího reverse().
    wamba avatar 11.9.2017 21:19 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: požírání matice
    Ještě u té druhé verze je rozumné mít @take jako nepovinný parametr
    my @spiral = (
        { .shift },                  #right
        { .map: *.pop },             #down
        { .pop.reverse },            #left
        { .map( *.shift ).reverse }, #up
    );
    
    sub snake2 ( @matrix, :@take is copy = |@spiral xx * ) {
        my @snake;
        while @matrix[0] {
            my &action = @take.shift;
            @snake.push: |@matrix.&action;
            #say @matrix;
        }
        @snake;
    }
    
    Pak s tím lze dělat skopičiny jako opačná spirála začínající v pravém horním rohu:
    my @reverse-spiral = |@spiral.rotate.map( { &reverse o $_ } ).reverse xx *;
    say $matrix.&snake2(take => @reverse-spiral);
    
    nebo třeba takovýto had:
    my @right-left-down-up = |(
        { .shift },                   #right
        { .shift.reverse },           #left
        { .map: *.shift   },          #down
        { .map( *.shift ).reverse  }, #up
    ) xx *;                           #repeat
    
    say $matrix.&snake2(take => @right-left-down-up);
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    11.9.2017 23:45 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Díky, těch informací je zatím poskromnu a z dokumentace Perlu 6 se to těžko dedukuje. Myslím, že princip, jak chytře pracovat s vícerozměrným polem, je mi už celkem jasnej. Dál už se tím nějak prokoušu.
    12.9.2017 09:12 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Co znamená to o za &reverse? Jako operátor to nemůžu najít.
    wamba avatar 12.9.2017 09:31 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: požírání matice
    Je to skládaní funkcí viz role Callable. Máš pravdu v dokumentaci se to blbě hledá.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    Řešení 1× (Käyttäjä 11133)
    10.9.2017 20:48 NN
    Rozbalit Rozbalit vše Re: požírání matice
    Poradna neslouzi k vypracovavani domacich ukolu. Kdyz se to resilo na rootu proc lezes sem?
    10.9.2017 21:03 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Protože vím, že o Perl6 se tu už někdo zajímá a mám tak naději, že zde dostanu co hledám ;) První větu nechápu.
    14.9.2017 13:54 kolemjdouci
    Rozbalit Rozbalit vše Re: požírání matice
    Nezivim se jako programator jen obcas neco napisu, ale kdyz vidm takovy zhovadili kod dere se mi na mysl otazka: "Co vas, proboha, lidi nuti pouzivat takove 'zhovadile' zapisy?" Neberte to jako urazku spis jde jen o zamysleni a vas nazor na vec. Netvrdte ze jde o to usetrit 10radku kodu, ktery by zase vedl k lepsi prehlednosti.
    14.9.2017 13:56 NN
    Rozbalit Rozbalit vše Re: požírání matice
    To je proste Perl, takto to vypada i normalne ;) ..
    14.9.2017 14:12 kolemjdouci
    Rozbalit Rozbalit vše Re: požírání matice
    Koukl jsem na rootu na to vlakno a tam je podobny zapis i v Pythonu. No nic
    14.9.2017 19:14 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Tak jsou to skriptovací jazyky, tak bych očekával používání nějakých větších dílčích celků a ne jen elementární instrukce cyklu a pole s indexem. V dotazu mi šlo o nějakou představu, kam se to posunulo u Perlu6, který nabízí daleko větší abstrakci než Perl5, tam bylo možné oproti běžnému imperativnímu programování jen trochu kouzlit se seznamy (což jsem v ukázce trochu využil;). Uvedený příklad s hadem je samozřejmě triviální, jen posloužil jako příklad.
    14.9.2017 19:39 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Možná by vás mohl přesvědčit složitější příklad, také převzatý z z rootu, který jsem si jen mírně upravil podle svého přání:
    my @a = [ [  (0,   0), (100,  0), (100,  44),  (62,  44),   (0,  38), (1, 3) ],
              [ (94, 100),  (28, 50),  (62,  44), (100,  44), (100, 100) ],
              [  (0,  44),  (28, 50),  (94, 100),   (0, 100), (3, 1)     ],
              [ (28,  50),   (0, 44),   (0,  38),  (62,  44)             ]  ]	;
    
    
    for 1..+@a -> $lineo {
        my $b=@a.shift;
    
        my $aflat=@a.List.flat.map({.Str});
        my $bflat=$b.flat.map({.Str}).cache;
        my $intersection = $aflat  (&)  $bflat;
    
        say "$lineo: ", $intersection{$bflat.List}.pairs.Set.keys.sort;
    
        @a.push: $b
    }
    
    Vůbec není nutné uvažovat o nějakém procházení pole a splněné podmínce, ale prostě se vytvoří vždy dvě množiny (jeden řádek a zbytek) na kterých se udělá průnik, a tím se zjistí, jaké dvojice se vyskytují na dalších řádcích. -- Možná by to šlo provést lépe, teprve začínám ;).
    15.9.2017 16:45 gll
    Rozbalit Rozbalit vše Re: požírání matice
    jsem autorem toho posledního kódu na rootu. Tohle by šlo v Perlu6 řešit mnohem elegantněji pomocí hyperoperátoru. Z hlavy to nedám a teď nemám možnost to zkoušet. Jsou tu větší experti na Perl 6. Rád bych viděl jejich řešení.
    15.9.2017 17:01 gll
    Rozbalit Rozbalit vše Re: požírání matice
    **elegantněji než to mé řešení v Pythonu.
    15.9.2017 20:24 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Také budu rád, když někdo ukáže lepší řešení. Já jsem si zatím jenom hrál s "hašovitými" typy a tohle mne napadlo.
    wamba avatar 15.9.2017 23:39 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: požírání matice
    Tak přikládám moje řešení v Perlu 6
    my @a =  [
        [(0, 0), (100, 0), (100, 44), (62, 44), (0, 38)],
        [(94, 100), (28, 50), (62, 44), (100, 44), (100, 100)],
        [(0, 44), (28, 50), (94, 100), (0, 100)],
        [(28, 50), (0, 44), (0, 38), (62, 44)]
    ];
    
    my @result;
    
    for ^@a.elems .combinations(2) -> ($i, $j) {
        next unless @a[$i].any eqv @a[$j].any;
    
        @result[$i].push: $j;
        @result[$j].push: $i;
    }
    
    @result.pairs».say;
    
    Jestli si myslel, že by šlo použít např. X∩, tak jsem narazil na celkem dost problémů.

    Nejvážnější je, že se to chová poněkud divně:
    dd (set(1),set(2)) X∩ set(2),
    vypíše:
    (set(set(1),set(2)), set(set(2))).Seq
    Namísto @a[$i].any eqv @a[$j].any; bych mohl použít [or] @a[$i].list Xeqv @a[$j].list;, kdybych moc chtěl metaoperátory, ale takhle se mi to zdá přímější. Navíc ta část s Junction by se měla vyhodnocovat paralelně.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    16.9.2017 11:47 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Jenom přemýšlím, jak moc to splňuje požadavek absence "naivního prohledávání v cyklu", když řádky (seznamy) se stejně porovnávají každý s každým :). Asi jsem to zadání bral moc doslovně.
    16.9.2017 22:34 RM
    Rozbalit Rozbalit vše Re: požírání matice
    Chvíli jsem zkoumal metaoperátory a spíš mi přijde, že to "divné" chování je vlastnost. Ten průnik nad "hešovitým" typem se chová tak, jakoby se jednalo o hash se stejným klíčem, proto set(set(2)) a ne set(set(2), set(2)) -- dojde ke sloučení, jakoby to byly stejné klíče. Ale možná to blbě chápu.
    20.9.2017 11:18 zero
    Rozbalit Rozbalit vše Re: požírání matice
    Čistě pro zajímavost, v jazyce J by šlo funkci (spiral) napsat třeba takto:
    spiral =: 3 : 0
    M =. y
    r =. ''
    while. #M > 0 do.
      r =. r, {.M
      M =. }.M
      M =. |. |: M
    end.
    r
    )
    
    Určitě to není nejkratší zápis, zato je snadno pochopitelný :)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.