Claudio Cherubino's blog Life of a Googler

20Mar/092

Project Euler in F# – Problem 52

After a long break, let's resume with the Project Euler series.

The next one to be solved is Problem 52:

It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order.

Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits.

As usual, we have to break the problem into small pieces and solve these pieces one by one.

As in many other Project Euler problems we have to extract the digits of a number, and this is done by converting the number into a string (i.e. an array of characters) and then casting the characters to integers.

We also need a function to check if two numbers are made of the same digits. For each number we create a set from the sequence of its digits, in order to ignore the order of the items and discard duplicates. Then we apply the standard set comparison operator to get the result.

We have to multiply each positive integer by 2, 3, 4, 5 and 6, so we can define the multiples function, which takes an integer x and returns a list containing five elements, corresponding to 2x, 3x, 4x, 5x and 6x.

Thanks to these three functions, checking if a number and its multiples contain exactly the same digits is very easy. In fact, we generate the list of multiples and test all of them with the same_digits function.

The algorithm to get the answer to the problem is the following: generate an infinite list of integers (remember seq_unfold?), test each number with the check function and return the first value that passes the test.

#light

let digits n =
  n.ToString() |> Seq.map (string >> int)

let same_digits a b =
  Set.equal (Set.of_seq (digits a)) (Set.of_seq (digits b))

let multiples n =
  [2 .. 6] |> Seq.map (fun x -> n * x)

let check n =
  n |> multiples |> Seq.for_all (same_digits n)

let answer =
  1 |> Seq.unfold (fun i -> Some (i, i + 1)) |> Seq.first (fun x -> if check x then Some (x) else None)

There is also a well-known (and tricky) solution for this problem, which was presented in the book "The man who calculated". Did you know it?

Tagged as: , , , , 2 Comments
18Mar/090

Working Capital Camp Catania

Non è destino che io possa partecipare ad uno dei (rari) eventi interessanti che vengono organizzati a Catania.

Nel 2007 venne organizzato il TrinacriaCamp, il primo barcamp siciliano, ma io mi trovavo in Messico per lavoro mentre adesso leggo che Telecom Italia ha scelto proprio la mia città come sede per il Working Capital Camp Catania.

L'obiettivo di questo incontro è sostenere le migliori iniziative imprenditoriali nell'ambito del web 2.0 che verranno sostenute da Telecom Italia stessa con il supporto di dPixel. Per maggiori informazioni il sito di riferimento è http://barcamp.org/workingcapital.

La data del primo incontro, che si terrà a Catania presso l'ex Monastero dei Benedettini, è il 29 Aprile 2009 e ovviamente io in quel periodo sarò all'estero, per la precisione a New York.

Almeno stavolta si tratta di vacanza e non di viaggio di lavoro...

14Mar/092

Fatalità!

Incredibile! Si è scoperto che la canzone vincitrice di Sanremo Giovani, Sincerità di Arisa, è in realtà un plagio.

La versione originale infatti è dei GemBoy e si intitola Fatalità :)

Non ci credete? Date un'occhiata al video:

13Mar/091

Imparare il cinese online

Di recente ho iniziato a studiare la lingua giapponese e, come immaginavo, la parte più difficile è sicuramente quella relativa alla memorizzazione (e alla scrittura) degli ideogrammi.

I kanji giapponesi derivano dagli ideogrammi cinesi e, come per questi ultimi, non c'è altro modo di apprenderli se non fare un sacco di pratica.

Per fortuna ad aiutare gli studenti di lingua cinese esiste un servizio online chiamato Skritter, che permette di fare pratica di scrittura direttamente all'interno del browser, usando il mouse per simulare i tratti del pennino.

Skritter

Così comodo e facile da usare che vorrei avere un servizio simile anche per la lingua giapponese.

Che voi sappiate esiste quello che cerco?

11Mar/090

Mickey Rourke il lottatore

Non è mai stato uno dei miei attori preferiti, ma con The Wrestler mi sono dovuto ricredere su Mickey Rourke.

Il film sembra scritto su misura per l'attore e la scelta del protagonista non poteva essere migliore. Dopo il terribile flop de L'albero della vita (che ancora non sono riuscito a vedere), il regista Aronofsky è riuscito ad ottenere il successo al Festival del Cinema di Venezia e ha sfiorato per pochissimo l'Oscar per il miglior attore protagonista che poi è andato a Sean Penn per Milk.

Non ho visto questo film e quindi non ho presente la prestazione di Sean Penn, ma di sicuro deve essere stato eccezionale per battere un Mickey Rourke così impressionante. E non riesco nemmeno ad immaginare come si fosse inizialmente pensato a Nicholas Cage per questo ruolo. Voi ce lo vedete a fare il lottatore in declino?

PS: in settimana ho visto anche Watchmen, chi mi da qualche spunto interessante di discussione?