martedì 27 ottobre 2015

Quesito con la Susi n. 929 meno 1 (928)

Cappero, mi stava sfuggendo il quesito con la Susi n. 928. Se questo fosse stato pubblicato al posto del successivo, cioè il 929 che verrà, sarebbe stato meglio… Ma vallo a spiegare che non è primavera.

Il quesito, una volta sfronzolato, è questo: trovare il numero x tale che, concatenando x con 2 e con la metà di x, si ottenga un numero palindromo (senza considerare l'eventuale separatore decimale). Con “numero palindromo” intendo un numero che è lo stesso se letto da sinistra verso destra (come facciamo di solito) o se letto da destra verso sinistra.

Nell'indovinello il numero x è l'età del nonno, per cui non ci aspettiamo che sia minore di 30, tanto per fissare un limite1. Del resto l'età di un uomo non supera i 99 troppo spesso, per cui fissiamo come limite 100 (escluso).

Non ci resta che provare provare provare fino a trovare ciò che cerchiamo. Facciamoci “aiutare” dal computer com'è nello spirito di questa serie; sarebbe più divertente fare osservazioni ulteriori (e v'invito a farle) che ci evitino questa banale ricerca, che sarebbe anche molto noiosa se fatta a mano senza le ulteriori osservazioni di cui sopra.

Banco alle ciande e cercherò di non riripetermi, ma ma se volete squarciare il velo potete leggere la nota messa alla parola successiva2. Se3 volete squarciare il velo potete leggere la nota messa alla parola successiva alla4 precedente5 (parola? frase?) Però però ci dovreste essere già arrivati da soli.

Vista la tremenda banalità e ripetitività non metto ciò su github; però questo non vuol dire che vi debba piacere il bianco sul nero.

Facciamolo “strano” in Perl

Un one-liner da questa parte, un one-liner da quella parte, un due tre.

print grep{$_ eq reverse($_)}map{$_."2".(($_/2)=~s/\.//r)}20..99

Lo eseguite dalla riga di comando con perl -e e non dimenticatevi di racchiuderlo tra ' (quello che forse usate per fare l'apostrofo dopo 〈po'〉, se non scrivete invece 〈pò〉, che è un erroruccio ortografico secondo l'ortografia corrente, ma chissà che sarà in futuro mentre i vecchi e gli stolti travestiti da eruditi si lamenteranno della corruzione dei costumi e della lingua per colpa dei barbari ignoranti — dito contro e pollice verso — gli stessi ignoranti che ci hanno portato all'italiano: povero latino!)

Bla bla.

Non è il massimo e il risultato vero dovete “dedurlo” voi dall'output, che è precisamente 592295. Cioè 59:2=29.5, per dirla come l'ha detta quello che ha scritto il quizito… Non è difficile visto che l'età del nonno non può essere 5 né 592, per cui dovrà essere 59…

Si può fare qualcosa di simile con Ruby, e verrebbe bene anche in GolfScript/Golfrun, secondo me. E anche in J. Però vi e (soprattutto) mi risparmio.


  1. Può un trentenne essere nonno? Se a 14 anni avesse avuto la sua prima figlia o il suo primo figlio e questi avessero a loro volta avuto il primo bambino a 14… A 28 anni si può già essere nonni!

  2. Naaa, avete letto male: non era la parola “successiva”, bensì la “parola successiva”.

  3. Sì, questa è una parola che viene dopo, ma è un se, come seee.

  4. Questa è un'altra parola successiva, avete ragione… ma vi siete fermati troppo presto a leggere: la frase continua, perché al grido di “parola successiva alla…” voi dovreste urlare la domanda: successiva a cosa?

  5. Ci siamo. Non vi siete divertiti? Io sì… L'età del nonno è un numero di due cifre, yz. Abbiamo due possibilità: yz2ZY e yz22ZY (minuscole e maiuscole servono solo per distinguere ciò che in realtà è indistinguibile — se non fosse che in realtà la posizione la distingue ma solo nel contesto, vi pare?). Si ha la prima se yz è divisibile esattamente per due e ciò avviene quando z è pari o 0; ma yz diviso 2 deve fare ZY, quindi dobbiamo avere che z = 2Y, ma anche Z < y, cioè 2y < y, che è impossibile. Concludiamo che yz non può essere pari. Dunque sarà dispari (cioè z deve essere dispari) e consideriamo la seconda possibilità: yz22ZY. Da cui sappiamo che 2 deve essere la prima cifra del risultato di yz/2 (quindi y potrà essere solo 4 o 5); Z è la seconda cifra, e Y, essendo la cifra decimale della divisione per due di un numero intero dispari, dovrà essere 5 (quindi scartiamo il 4 prima considerato: y è 5). Per quanto riguarda Z, dobbiamo avere che 1z/2 = Z + 0.5, cioè 1z - 1 = 2×z. Ma 1z è 10 + z, e perciò: 10 + z − 1 = 2z da cui ricaviamo subito che z è 9. Soluzione: 592295 (59/2=29.5). Come al solito ci possono essere altri modi di trovare la soluzione, magari anche migliori, più eleganti, più immediati…. Cercateli.

Nessun commento:

Posta un commento

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.