Autore: Gianluigi

While the Muslim world took delight in innovation, progress and new ideas, much of Christian Europe withered in the gloom, crippled by a lack of resources and a dearth of curiosity. St Augustine had been positively hostile to the concept of investigation and research. ‘Men want to know for the sake of knowing,’ he wrote scornfully, ‘though the knowledge is of no value to them.’ Curiosity, in his words, was nothing more than a disease.

Peter Frankopan

The Silk Roads

Manca il download automatico dei dizionari. Sul touch se tenti di avere la definizione di una parola, in una lingua per cui non c’è il dizionario, il Kindle ti domanda se lo vuoi scaricare. Senza dover andare ne i miei contenuti e inviarlo.
La comoda gesture per passare velocemente da un capitolo all’altro. Lo so c’è la nuova navigazione, ma devi far uscire il menù, scegliere il tipo di navigazione, navigare i capitoli; contro una strisciata verticale del dito.
La mezza cosa: il sensore automatico della luminosità è un po’ pigro e non sempre ci azzecca.

Se avete problemi a far ricaricare la Mi band 2, l’unico modo che ha funzionato per far iniziare la carica è tener premuto il tasto touch per almeno 30 secondi.

The Use of Knowledge in Society  è un testo citatissimo di Hayek scritto nel 1945, contro la pianificazione centralizzata. L’idea fondamentale del testo è che tutta l’informazione necessaria per permettere una pianificazione centralizzata efficiente non è disponibile in maniera “centralizzata”, ma è disponibile solo in maniera parziale e locale. Quindi solo lasciando la libertà agli agenti locali, di utilizzare la conoscenza locale, permette di effettuare scelte ottime. L’altra idea fondamentale è che il sistema dei prezzi viene visto come mezzo efficiente di teletrasmissione delle informazioni locali a tutto il resto del sistema: la variazione di un prezzo di una materia prima o bene, comunica immediatamente l’informazione sul nuovo utilizzo delle risorse interessate.

I meme si diffondono come virus, ma non sono virus. Secondo Nassim Nicholas Taleb la religione è un insieme di meme che si sono rivelati utili. I preti sono parassiti dei meme religiosi?

Un piccolo truffatore, una guerra incombente tra vecchi dei e i nuovi dei tecnologici, il piccolo truffatore sarà stritolato dalla loro lotta? Road book sullo sfondo un’America inusuale. 

In the book From Bacteria to Bach and Back by Daniel Dennet there is this note:

Four people come to a river in the night. There is a narrow bridge, and it can only hold two people at a time. They have one torch and, because it’s night, the torch has to be used when crossing the bridge. Person A can cross the bridge in one minute, B in two minutes, C in five minutes, and D in eight minutes. When two people cross the bridge together, they must move at the slower person’s pace. The question is, can they all get across the bridge in fifteen minutes or less?

This is a well know crossing problem like wolf cabbage and goat problem. Many of this problem are solved by simple Prolog program. But now i want solve this problem with a functional language: F#. A simple solution is (based on this):

open System

//cambia per trovare soluzioni in tempi diversi
let MAX_TIME = 15

type Person = 
  | Person of string * int

type Direction =
  | L
  | R

type Move =
  | Move of Direction * Person list

//estende il modulo List
module List =
  let rec combinations items =
    [
      match items with
      | [] -> ()
      | x::xs ->
        for y in xs do yield x, y
        yield! combinations xs
    ]

let rec Solve cost moves atStart atEnd dir =
  seq {
    if cost > MAX_TIME then ()
    elif Set.isEmpty atStart then yield cost, List.rev moves
    else
      match dir with
      | L ->
        for Person(_, time) as person in atEnd do
          let move = Move(dir, [person])
          yield! Solve (cost + time) (move :: moves) (Set.add person atStart) (Set.remove person atEnd) R
      | R ->
        let combinations = List.combinations (Set.toList atStart)
        for (Person(_, time1) as person1), (Person(_, time2) as person2) in combinations do  
          let move = Move(dir, [person1; person2])
          let persons = set [person1; person2]
          yield! Solve (cost + (max time1 time2)) (move :: moves) (atStart - persons) (atEnd + persons) L
  }      

let Persons =
  set [
    Person("A", 1)
    Person("B", 2)
    Person("C", 5)
    Person("D", 8)
    //Person("E", 1)
  ]

Solve 0 [] Persons Set.empty R
|> Seq.iter (printfn "%A")

 

Executing the program yield the following output (can be executed as is in LINQPad):

(15,
 [Move (R,[Person (“A”,1); Person (“B”,2)]); Move (L,[Person (“A”,1)]);
  Move (R,[Person (“C”,5); Person (“D”,8)]); Move (L,[Person (“B”,2)]);
  Move (R,[Person (“A”,1); Person (“B”,2)])])
(15,
 [Move (R,[Person (“A”,1); Person (“B”,2)]); Move (L,[Person (“B”,2)]);
  Move (R,[Person (“C”,5); Person (“D”,8)]); Move (L,[Person (“A”,1)]);
  Move (R,[Person (“A”,1); Person (“B”,2)])])

So the puzzle have two equivalent solution.

Playing with set of Persons and MAX_TIME constant, is possible to explore solution for different problem.