Linux na 4bitovém mikroprocesoru Intel 4004 z roku 1971? Ale jistě: Linux/4004 (YouTube).
Google Chrome 129 byl prohlášen za stabilní. Nejnovější stabilní verze 129.0.6668.58 přináší řadu novinek z hlediska uživatelů i vývojářů (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube: DevTools Chrome 127-129).
Byly nalezeny a opraveny bezpečnostní chyby CVE-2024-38812 a CVE-2024-38813 s CVSS 9.8 a 7.5 ve VMware vCenter Server. Jedná se o vzdálené spouštění příkazů (RCE) a eskalaci oprávnění.
MojeID rozdává bezpečnostní klíče (tokeny) GoTrust Idem Key pro přístup k online službám veřejné správy (NIA). Ti, kteří již mají, mohou získat tablet ve slosování.
Společnosti Nintendo a Pokémon žalují společnost Pocketpair. Její hra Palworld prý porušuje patenty Nintendo a Pokémon.
RabbitMQ (Wikipedie) byl vydán v nové major verzi 4.0. RabbitMQ je open source messaging a streaming broker napsaný v programovacím jazyce Erlang. Implementuje protokoly AMQP 0-9-1, AMQP 1.0, RabbitMQ Streams, MQTT a STOMP a v HTTP a WebSockets Web STOMP plugin, Web MQTT plugin a management plugin.
Po půl roce vývoje od vydání verze 46 bylo vydáno GNOME 47 s kódovým názvem Denver. Přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře. Krátké představení na YouTube.
Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána v nové verzi 6.3. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu.
Uživatele Windows a Microsoft 365 Business a Enterprise mohou oficiálně používat Python v Excelu. Spolu s knihovnami jako pandas, Matplotlib a NLTK. Jedná se o spolupráci s Anacondou. Microsoft si tento "vynález integrace tabulkových procesorů s externími prostředími" patentoval: US12026560B2. Už před podáním patentu ale mohli uživatelé pro Python v Excelu používat například PyXLL. LibreOffice / OpenOffice.org měl PyUNO.
Provoz Mozilla.social, tj. instance Mastodonu provozované Mozillou, bude 17. prosince 2024 ukončen.
$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:
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 }
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().
@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);
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 ;).
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))).SeqNamí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ě.
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ý :)
Tiskni Sdílej: