CyberChef je webová aplikace pro analýzu dat a jejich kódování a dekódování, šifrování a dešifrování, kompresi a dekompresi, atd. Často je využívaná při kybernetických cvičeních a CTF (Capture the Flag). Vydána byla nová major verze 10 (aktuálně 10.4.0). Přehled novinek v Changelogu.
UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch OTA-1 Focal založené na Ubuntu 20.04 Focal Fossa.
Společnost Red Hat slaví 30 let.
Ve věku 91 let zemřel izraelský informatik Ja'akov Ziv, spolutvůrce bezztrátových kompresních algoritmů LZ77, LZ78 a LZW (Lempel–Ziv–Welch).
Byla představena nová Arduino deska Arduino UNO R4 s 32bitovým MCU RA4M1 (Arm Cortex-M4). Desku lze zatím získat pouze v rámci early access programu.
Operační systém MidnightBSD, fork FreeBSD optimalizovaný pro desktop s prostředím Xfce, byl vydán ve verzi 3.0. Přehled novinek v poznámkách k vydání.
Na GOG.com běží Spring Sale. Při té příležitosti lze získat zdarma počítačovou hru Neurodeck: Psychological Deckbuilder (ProtonDB).
Alex Ellis upozornil 15. března, že firma Docker se chystala zrušit bezplatný hosting open-source projektů na Docker Hubu. Po vlně odporu se představitelé firmy omluvili a posléze byl původní záměr odvolán.
Ve věku 94 let zemřel Gordon Moore, mj. spoluzakladatel společnosti Intel a autor Moorova zákona.
Mercurial (Wikipedie), software pro SCM (Source Code Management), byl vydán ve verzi 6.4. Přehled novinek v poznámkách k vydání. Ve dnech 5. až 7. dubna proběhne konference Mercurial Paris.
Zdravim vsechny,
Vstup
Ma nekdo nejaky napad na chytry algoritmus?
#!/usr/bin/perl use 5.010; use warnings; use strict; use List::Util qw{first}; use Benchmark; our $VERSION = 0.001; my $string = '234781802319q8019810328103982104398021483049823094830498023982094823028340932840923830483201223'; my @multiregexp = ( qr{ \A \d+ . \z }msx, qr{ \$ }msx, ); timethese( 1000000, { more => sub { my $trueregexp = first { $string ~~ $_ } @multiregexp; }, one => sub { my $tt = $string ~~ m{\A \d+ . \z|\$}msx ? 1 : 0; }, one_better => sub { my $tt = $string ~~ m{\A \d+ . \z|\A .* \$ .* \z}msx ? 1 : 0; }, } );mi vypíše
Benchmark: timing 1000000 iterations of more, one, one_better... more: 3 wallclock secs ( 2.72 usr + 0.00 sys = 2.72 CPU) @ 367647.06/s (n=1000000) one: 14 wallclock secs (13.69 usr + 0.01 sys = 13.70 CPU) @ 72992.70/s (n=1000000) one_better: 12 wallclock secs (12.06 usr + 0.00 sys = 12.06 CPU) @ 82918.74/s (n=1000000)když
$string
upravím a přidám na konec $
, tak
more: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 311526.48/s (n=1000000) one: 12 wallclock secs (13.74 usr + 0.00 sys = 13.74 CPU) @ 72780.20/s (n=1000000) one_better: 1 wallclock secs ( 2.04 usr + 0.00 sys = 2.04 CPU) @ 490196.08/s (n=1000000)a když smažu
q
z takto upraveného $string
more: 3 wallclock secs ( 2.18 usr + 0.00 sys = 2.18 CPU) @ 458715.60/s (n=1000000) one: 1 wallclock secs ( 1.39 usr + 0.00 sys = 1.39 CPU) @ 719424.46/s (n=1000000) one_better: 0 wallclock secs ( 1.36 usr + 0.00 sys = 1.36 CPU) @ 735294.12/s (n=1000000)atp.
first
ještě dá na výstup, který ten regexp bude true
ještě se to dá otestovat jako
more_better => sub { my $tt = $string ~~ @multiregexp ? 1 : 0; }které je nejrychlejší ve všech předešlých případech
use 5.010; use warnings; use strict; use List::Util qw{first}; our $VERSION = 0.001; my $string = '23478180231x98019810328103982104398021483049823094830498023982094823028340932840923830483201223$'; my @multiregexp = ( qr{ \A \d+ . \z }msx, qr{ \$ }msx, ); my $trueregexp = first { $string ~~ $_ } @multiregexp; say 'tento regexp vyhovuje ', $trueregexp;a když to nebude dostatečně rychlé, tak to chce vědět více o těch regexp-ech popř. o tom řetězci, aby se dalo navrhnout něco efektivnějšího
Takze dekuji vsem za kometare.
Spojeni do jednoho velkeho regexpu jak je navrzeno vyse by snad splnilo podminku na rychle vyhledavani, nicmene jsem skoncil na tom ze je potreba i pomerne rychla reakce na to kdyz uzivatel nejaky regulani vyraz prida/ubere/zmeni a konstrukce toho dloooouheho regularniho vyrazu a jeho kompilace je prilis pomala.
Vysledne reseni je nakonec zalozene na tom, ze ty regularni vyrazy - tedy alespon vetsinaz nich ma v sobe nejaky pevny retezec, napriklad "[0-9]ABC[0-9]" a pomoci techto retezcu lze udelat index a v tom indexu najit podmnozinu regexu ktere se pak matchuji sekvencne. Vetsinou jsou to regexy slozitejsi nez v tom prikladu, ale obvykle to jde a tech par stovek regexu, ze kterych se neda nejaky rozumny retezec vyextraovat se bude prochazet sekvencne az kdyz se nenajde jinde.
Tiskni
Sdílej: