Claudio Cherubino's blog Life of a Googler

19Nov/083

Project Euler in F# – Problem 19

When someone asks me what are the advantages of F# in comparison with the other functional programming languages, usually the first thing I answer is the .Net Framework.

This framework provides the developers with a plethora of libraries and functions that cover almost all the requirements you can imagine and if you need something that is missing, you will surely develop it on top of solid basis.

I can prove this by showing you the F# solution to Project Euler problem number 19:

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?

After the first time I read the problem I started wondering on how to check whether a given date is a Sunday and a "smart" solution suddenly came into my mind.

The .Net Framework contains a robust set of classes and functions to work on dates and F# can use them as C#, VB.Net and all the other supported languages.

The algorithm implemented works in the following way: we create a starting DateTime object representing 1 Jan 1901 and then continue adding 1 month (using the AddMonths function) until we get to year 2001.

For each DateTime objects returned by this sequence we check if its DayOfWeek property is equal to DayOfWeek.Sunday (.Net magic!). In this case we keep the value otherwise we simply discard it.

Eventually we just have to count the number of items (i.e. DateTime objects) left and we get the result.

Let's translate the algorithm into F# syntax and we get the following code:

#light
open System

let startDate = new DateTime(1901, 1, 1)

let euler19 = startDate
              |> Seq.unfold (fun (x : DateTime) -> Some(x, x.AddMonths(1)))
              |> Seq.take_while (fun (x : DateTime) -> x.Year < 2001)
              |> Seq.filter (fun (x : DateTime) -> x.DayOfWeek = DayOfWeek.Sunday)
              |> Seq.length
11Nov/083

Il pagamento in natura

Non capita tutti i giorni di leggere un'offerta di lavoro come quella che segue e che ho trovato qualche giorno fa su un sito di annunci gratuiti:

Cercasi webmaster

Azienda agricola cerca web master disposto a costruire semplice sito web aziendale. Offresi fornitura vitalizia di arance rosse IGT in vista anche dei futuri aggiornamenti.

Ho tralasciato i contatti per correttezza, ma se siete interessati alle arance posso sempre farveli avere in privato. :wink:

Ditelo che leggendo il titolo pensavate si parlasse di altro!

7Nov/080

Catania è…

...stupirsi che una volante dei Carabinieri faccia fermare un'auto che percorre la corsia dedicata agli autobus.

5Nov/083

Vietato guardare i cartoni animati

Uno dei film più attesi del 2008 è stato sicuramente Wall-e e le critiche che ha ricevuto in tutto il mondo sono state assolutamente entusiaste, eppure nel nostro paese i risultati di pubblico non sono stati per niente al livello delle aspettative.

Fino a ieri mi chiedevo il perchè di questa differenza rispetto al resto del mondo, poi ho finalmente compreso la motivazione.

I miei programmi di ieri sera prevedevano proprio di andare a vedere il nuovo film della Pixar, peccato aver scoperto che nessun cinema della mia città (Catania) lo proponeva più in prima serata, e tutto ciò dopo poco più di una settimana dal debutto!

Come sempre in Italia vale l'equazione "cartone animato = prodotto per bambini" e quindi l'ultimo spettacolo utile era quello delle 18.30.

In compenso potevo godermi ben quattro spettacoli di quel capolavoro che è High School Musical 3, anche con inizio alle 22.45!

Senza pensare che fra poco al cinema non ci sarà altro che Massimo Boldi o Christian De Sica per sbancare il botteghino di Natale come ogni anno.

Come fare adesso a criticare quelli che Wall-e se lo scarichereranno illegalmente? :mrgreen: