Strumenti Utente

Strumenti Sito


it:examples:project_euler_-_problem_p151

Project Euler - Problem 151

From here

Una stamperia esegue 16 lavorazioni (jobs) ogni settimana ed ogni lavorazione richiede un foglio speciale di formato A5.

Ogni lunedi mattina, il caporeparto apre una nuova busta, la quale contiene un foglio speciale di formato A1.

Procede quindi a dimezzarlo, ottenendo due fogli di formato A2. Quindi taglia uno di questi a metà ottenendo due fogli di formato A3 e via dicendo, finchè ottiene il foglio di formato A5 che è necessario per la prima lavorazione della settimana.

Tutti i fogli non utilizzati sono riposti di nuovo nella busta.

All'inizio di ognuna delle lavorazioni seguenti, prende un foglio a caso dalla busta. Se è di formato A5 lo utilizza. Se è di formato maggiore, ripete il procedimento di dimezzamento finchè ottiene il foglio di formato A5 e tutti i rimanenti fogli sono riposti ancora nella busta.

Escludendo la prima e l'ultima lavorazione di ogni settimana, trovare la probabilità (durante la settimana) che il caporeparto trovi un singolo foglio nella busta

Dare la risposta arrotondata a sei posizioni decimali usando il formato x.xxxxxx.

Risposta: puoi trovarla da solo eseguendo il codice forth! ;-)


Una soluzione in gforth (in 87 millisecondi):

#! /usr/bin/gforth
 
: p151  { a5 a4 a3 a2 -- F: res }
    0.0e                                              { F: res  }
    a5 a4 a3 a2 + + +                                 { W: left }
    1 left = a5 1 <> and if 1.0e to res then
    a5   0 > if a5 1-  a4     a3     a2    recurse  a5 s>d d>f f*  res f+    to res then
    a4   0 > if a5 1+  a4 1-  a3     a2    recurse  a4 s>d d>f f*  res f+    to res then
    a3   0 > if a5 1+  a4 1+  a3 1-  a2    recurse  a3 s>d d>f f*  res f+    to res then
    a2   0 > if a5 1+  a4 1+  a3 1+  a2 1- recurse  a2 s>d d>f f*  res f+    to res then
    left 0 > if res left s>d d>f f/                                          to res then
    res
;
 
1 1 1 1 p151
." The answer is " 6 set-precision f. cr
bye
it/examples/project_euler_-_problem_p151.txt · Ultima modifica: 2013-06-06 21:26 (modifica esterna)