venerdì 30 luglio 2010

Calcolo numeri primi con espressione regolare

Troppo ghiotta per non ripostarla.

^1?$|^(11+?)\1+$ è un'espressione regolare che ci dice se un numero è primo.

O meglio, è un'espressione regolare che matcha con una stringa composta di n caratteri "1" (cioè "111" = 3 , "1111" = 4, "11111" = 5 e così via) se n NON è primo.

Qui trovate l'originale:
http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/

(OK è data marzo 2007 ma era sulle CodeProject Newsletter di oggi :p )

e questa è la reg exp: ^1?$|^(11+?)\1+$

Se una stringa di "1" lunga n NON la matcha, allora n è primo.
Perché?
E' composta da 2 pezzi:
^1?$ e ^(11+?)\1+$

^1?$ matcha 1 o la stringa vuota (perché 1 e 0 non sono primi):
^ è l'inizio riga
1? è "zero o un '1'"
$ è il fine riga

^(11+?)\1+$ è più complicato.
l'amico, di noulakaz.net, secondo me la spiega bene dal lato tecnico e male dal lato concettuale.

E' banale. Se n è divisibile per m con 2 <= m < n allora n non è primo.
Da questa banalità deriva l'idea, che è la seguente: se una sequenza di n "1" è splittabile in 2 o più sequenze di m "1" (con m < n) allora n non è primo.

Ed è proprio questo che il motore fa. Prende la tua stringa (ad esempio 1111111, cioè 7) e prende "11". A sto punto prova a romperla in uno o più pezzi da "11", ma avanza un "1", quindi non matcha. Poi ci prova con "111", poi con "1111" etc, ma non ci riesce mai.
Con 9 funziona: prova con "11" e non riesce, poi prova con "111" e vede che 9, cioè "111111111" contiene "111", cioè 3, esattamente tre volte, senza resto, quindi matcha.

Con 10 troverà "11", con 12 sempre "11", con 14 "11", ..., con 25 troverà "11111" cioè 5. Si ferma al più piccolo "divisore", per così dire.

E così via. Fa scena, ma in sostanza è una banalità :)

Quindi, se per caso vi troverete un domani con una macchinetta che fa solo espressioni regolari e vi servirà calcolare se un numero è primo, saprete come farlo. Yuppie! :D

mercoledì 21 luglio 2010

I nome LUUUNGHI

Blend... ma perché sei stato progettato da designer???

:((((

venerdì 2 luglio 2010

Ipotetico excerpt dal sorgente di SharePoint 2010:



#region Ctor

public Sharepoint2010()
{
if (System.VirtualizationSystem == VirtualizationSystems.VirtualBox) then _sbregabalònMode = true;

this.ContinueConstructionNormally();
}

#endregion Ctor



Quanti di voi stanno avendo questo sospetto?!

giovedì 17 giugno 2010

Quant'è bella la Object Composition

A tutti piace tanto, l'object composition di WPF e Silverlight.

Però presenta a volta qualche "piccolissimo" inconveniente.

Esempio:
ho perso 3/4 d'ora oggi nel tentativo di capire perché diavolo un form contenuto in uno dei tab di un tabpanel, con un numero di campi più elevato rispetto a quelli contenuti negli altri tab, fosse sparito.

La grid che lo conteneva era a posto.
I contenitori di quell'istanza di TabControl tutti su Auto.
Il numero di righe della grid contenuta nel tab che contiene il form era sufficientemente grande per mostrare tutto il form.
Tutte le dimensioni settate su Auto... incomprensibile.

Dopo qualche tempo l'illuminazione.. che sia il template del TabControl (che ho fatto giorni e giorni fa e ormai non so più nemmeno dov'è finita)?.

Il template del TabControl è costituito da 4 parti principali, una per ciascuno dei seguenti casi: tabs posti sopra il contenitore, posti sotto, posti a dx e posti a sx.

Ebbene, ecco come stava la situazione nel template del TabControl:

Template -> Grid -> TemplateTop -> Border -> Border -> Grid -> StackPanel -> ContentTop... questo simpatico contentTop aveva la MaxWidth settata!!! AAAAAHHH!

Seguiranno incubi con matriosche.

martedì 15 giugno 2010

ping 1.1.1.1

Oggi al lavoro si litigava sui timeout.

Per provare un timeout ho pingato 1.1.1.1

E ha risposto!! :)

http://www.ip-adress.com/map/Map_of_Australia/6f781ed45273f945

è un posto in mezzo al nulla in Australia.

Qualcuno ha qualche idea?

giovedì 10 giugno 2010

Ottimismo in Expression Blend



Catastrofeee!!! Hai messo x:key vuoto!!!