giovedì 3 marzo 2016

Gli orologi della Susi (quesito 931)

Il Gianni porta la Susi in un romantico negozio che vende orologi inutili. In particolare a Gianni interessa quello digitale sul bancone: un prodigio della tecnica che mostra solo gli orari che corrispondono a un quadrato perfetto (tolto il separatore tra ore e minuti).

«Tra l'una di notte e il successivo mezzogiorno, quanti orari diversi si leggono su questo orologio?»

È su questa domanda che Susi capitola.

Ho lasciato un po' di cose in sospeso: qualche argomento monco su okpanico, dove vedo che juhan, finito col Racket, è passato ad esplorare il Rust, non senza aver buttato un occhio o due su Maxima (mea culpa :-D) e aver scritto molti altri post, che è sempre interessante leggere1; un paio di temi per il neonato Maelström, che dopo i primi vagiti si gode il silenzio del suo mondo; i miei blog, tra cui anche questo… E molte altre cose che non sto ad elencare ché non finirei più.

Ma ho visto la Settimana Enigmistica sul tavolo, ho letto “931° quesito con la Susi”, e perciò eccoci qua.

Il quesito è quello dell'incipit.

Da 1:00 (100) bisogna arrivare alle 12:00 (1200). Si inizia da 10 (10² = 100) e si procede, scoprendo banalmente che l'ultimo quadrato perfetto “utile” è 34² (basta calcolare la radice quadrata di 1200).

Fine.

Ah, no: ci tocca contare gli «orari diversi». Sono quanti sono i numeri tra 10 e 34 (cioè 25 — gli estremi sono inclusi), meno quelli che danno orari impossibili. Ci dobbiamo preoccupare solo delle ultime due cifre (decine ed unità), controllando che siano tra 00 e 59. Se così non fosse, non avremmo un orario possibile.

C'est tout.

Facciamo fare il lavoro sporco al computer, usando qualche linguaggio di programmazione. Mi sembra che il Ruby manchi all'appello. E Ruby sia, anche perché, qui lo dico e non lo nego, il Ruby è bello. Avrà i suoi difetti, mica no; la setta degli haskelliani non lo approverebbe, ma questo si sa… Comunque mi piace per motivi simili allo Smalltalk.

REPL alla mano, risolviamo con questa sola riga, un po' come il one-liner perloso (il suffisso -oso va di moda).

(10..34).map { |n| n*n } .select { |n| n%100 < 60 } .count

Al posto di 34 possiamo metterci l'intero della radice quadrata di 1200 (cioè 12:00). Ma vabbè, non è quello che fa la differenza.

Comunque il Ruby ci dice 15. Ci fidiamo?


  1. Dalla quantità direi che o juhan scrive molto, o io non mi guardo intorno quanto vorrei.

4 commenti:

  1. Un paio di precisazioni: 1) Racket è sempre in corsa solo che Rust è impegnativo; 2) scrivo perché sono ormai fuori dal mondo del lavoro, acciaccato, difficoltà a spostarmi e allora bloggo (ma non vorrei sembrare lamentoso, nèh!).
    E grassietante per la citassione.

    RispondiElimina
  2. Produci sicuramente molto, ma è anche vero che è un po' che non mi guardavo intorno per cui l'effetto è quello di trovarsi di fronte una montagna di cose da leggere che prima non c'era! :-D

    RispondiElimina
  3. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  4. (sembrava che il precedente commento non fosse pubblicato, e invece... effetto websense a singhiozzo!)

    RispondiElimina

Sii educato, costruisci con cura le frasi, rifletti prima di pubblicare, evita parolacce e offese dirette, non uscire dal tema, cerca di non omettere la punteggiatura, evita errori ortografici, rileggi quel che hai scritto.