ESERCITAZIONE RUBY - FOR-ARRAY
versione 27/05/2016

ESERCIZIO 1 (FOR-ARRAY)

Costruire un programma che legge una sequenza di N numeri e la riscrive in ordine inverso (l'ultimo letto è il primo ad essere scritto).

SOLUZIONE
def Leggo(i)
   print "Dammi il #{i}^ numero: "
   return gets.to_i
end

arr=[]
for i in 1..10
   arr[i]=Leggo(i)
end

for i in 10.downto(1)
   print "#{arr[i]} "
end
ESERCIZIO 2 (FOR-OGGETTI)

Costruire un programma che legge il cognome e il peso di 10 persone e successivamente fornisce, in ordine, i cognomi delle 3 persone il cui peso è minimo.

SOLUZIONE
...
ESERCIZIO 3 (FOR-ARRAY)

Scrivere un programma che legge l'eta di un gruppo di 10 persone e fornisca le seguenti statistiche:
1) distribuzione per eta' (es. 3 persone di 5 anni, 5 persone di 6 etc.)
2) distribuzione in periodi di 5 anni (es. da 0 a 4 ho 3 persone, da 5 a 9 ho 2 persone etc.)

SOLUZIONE
...
ESERCIZIO 4 (FOR-ARRAY)

Scrivere un programma che legga il primo canto di Dante e mi fornisce il numero di lettere per ogni lettera (non deve distinguere tra minuscolo e maiuscolo!). Per semplicità riportiamo qui di seguito il testo richiesto per lo svolgimento dell'esercizio.

Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura, ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura esta selva selvaggia e aspra e forte che nel pensier rinova la paura!
Tant' è amara che poco è più morte; ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte.
Io non so ben ridir com' i' v'intrai, tant' era pien di sonno a quel punto che la verace via abbandonai.
Ma poi ch'i' fui al piè d'un colle giunto, là dove terminava quella valle che m'avea di paura il cor compunto,
guardai in alto e vidi le sue spalle vestite già de' raggi del pianeta che mena dritto altrui per ogne calle.
Allor fu la paura un poco queta, che nel lago del cor m'era durata la notte ch'i' passai con tanta pieta.
E come quei che con lena affannata, uscito fuor del pelago a la riva, si volge a l'acqua perigliosa e guata,
così l'animo mio, ch'ancor fuggiva, si volse a retro a rimirar lo passo che non lasciò già mai persona viva.
Poi ch'èi posato un poco il corpo lasso, ripresi via per la piaggia diserta, sì che 'l piè fermo sempre era 'l più basso.
Ed ecco, quasi al cominciar de l'erta, una lonza leggiera e presta molto, che di pel macolato era coverta;
e non mi si partia dinanzi al volto, anzi 'mpediva tanto il mio cammino, ch'i' fui per ritornar più volte vòlto.
Temp' era dal principio del mattino, e 'l sol montava 'n sù con quelle stelle ch'eran con lui quando l'amor divino
mosse di prima quelle cose belle; sì ch'a bene sperar m'era cagione di quella fiera a la gaetta pelle
l'ora del tempo e la dolce stagione; ma non sì che paura non mi desse la vista che m'apparve d'un leone.
Questi parea che contra me venisse con la test' alta e con rabbiosa fame, sì che parea che l'aere ne tremesse.
Ed una lupa, che di tutte brame sembiava carca ne la sua magrezza, e molte genti fé già viver grame,
questa mi porse tanto di gravezza con la paura ch'uscia di sua vista, ch'io perdei la speranza de l'altezza.
E qual è quei che volontieri acquista, e giugne 'l tempo che perder lo face, che 'n tutti suoi pensier piange e s'attrista;
tal mi fece la bestia sanza pace, che, venendomi 'ncontro, a poco a poco mi ripigneva là dove 'l sol tace.
Mentre ch'i' rovinava in basso loco, dinanzi a li occhi mi si fu offerto chi per lungo silenzio parea fioco.
Quando vidi costui nel gran diserto, «Miserere di me», gridai a lui, «qual che tu sii, od ombra od omo certo!».
Rispuosemi: «Non omo, omo già fui, e li parenti miei furon lombardi, mantoani per patrïa ambedui.
Nacqui sub Iulio, ancor che fosse tardi, e vissi a Roma sotto 'l buono Augusto nel tempo de li dèi falsi e bugiardi.
Poeta fui, e cantai di quel giusto figliuol d'Anchise che venne di Troia, poi che 'l superbo Ilïón fu combusto.
Ma tu perché ritorni a tanta noia? perché non sali il dilettoso monte ch'è principio e cagion di tutta gioia?».
«Or se' tu quel Virgilio e quella fonte che spandi di parlar sì largo fiume?», rispuos' io lui con vergognosa fronte.
«O de li altri poeti onore e lume, vagliami 'l lungo studio e 'l grande amore che m'ha fatto cercar lo tuo volume.
Tu se' lo mio maestro e 'l mio autore, tu se' solo colui da cu' io tolsi lo bello stilo che m'ha fatto onore.
Vedi la bestia per cu' io mi volsi; aiutami da lei, famoso saggio, ch'ella mi fa tremar le vene e i polsi».
«A te convien tenere altro vïaggio», rispuose, poi che lagrimar mi vide, «se vuo' campar d'esto loco selvaggio;
ché questa bestia, per la qual tu gride, non lascia altrui passar per la sua via, ma tanto lo 'mpedisce che l'uccide;
e ha natura sì malvagia e ria, che mai non empie la bramosa voglia, e dopo 'l pasto ha più fame che pria.
Molti son li animali a cui s'ammoglia, e più saranno ancora, infin che 'l veltro verrà, che la farà morir con doglia.
Questi non ciberà terra né peltro, ma sapïenza, amore e virtute, e sua nazion sarà tra feltro e feltro.
Di quella umile Italia fia salute per cui morì la vergine Cammilla, Eurialo e Turno e Niso di ferute.
Questi la caccerà per ogne villa, fin che l'avrà rimessa ne lo 'nferno, là onde 'nvidia prima dipartilla.
Ond' io per lo tuo me' penso e discerno che tu mi segui, e io sarò tua guida, e trarrotti di qui per loco etterno;
ove udirai le disperate strida, vedrai li antichi spiriti dolenti, ch'a la seconda morte ciascun grida;
e vederai color che son contenti nel foco, perché speran di venire quando che sia a le beate genti.
A le quai poi se tu vorrai salire, anima fia a ciò più di me degna: con lei ti lascerò nel mio partire;
ché quello imperador che là sù regna, perch' i' fu' ribellante a la sua legge, non vuol che 'n sua città per me si vegna.
In tutte parti impera e quivi regge; quivi è la sua città e l'alto seggio: oh felice colui cu' ivi elegge!».
E io a lui: «Poeta, io ti richeggio per quello Dio che tu non conoscesti, a ciò ch'io fugga questo male e peggio,
che tu mi meni là dov' or dicesti, sì ch'io veggia la porta di san Pietro e color cui tu fai cotanto mesti».
Allor si mosse, e io li tenni dietro.

SOLUZIONE
...
ESERCIZIO 5 (FOR-ARRAY)

Costruire un programma che determini, in una sequenza di valori casuali compresi tra -50 e 50, il più piccolo numero maggiore del minino.

SOLUZIONE
...
ESERCIZIO 6 (FOR-ARRAY)

Generare 2 sequenze casuali composte da un numero di lettere dell'alfabeto maiuscole pari a 10. Visualizzare successivamente l'array unione contenente le lettere presenti nel primo oppure nel secondo elenco senza duplicati

SOLUZIONE
...
ESERCIZIO 7 (FOR-ARRAY)

Generare una sequenza di 8 numeri interi da 1 a 3. Stabilire successivamente se è palindroma ovvero se la sequenza letta da sinistra verso destra genera la stessa successione di numeri che si ottiene leggendo la stessa da destra verso sinistra.

SOLUZIONE
...
ESERCIZIO 8 (FOR-ARRAY)

Si scriva una funzione "to_hour" che dati 3 argomenti
h = ora del giorno (numero tra 0 e 23)
d = giorno del mese (numero tra 1 e 31)
m = numero del mese (numero tra 1 e 12)
controlla che la data sia corretta e la converte in ore dall'inizio dell'anno. Attenzione che alle ore 0 del 1 gennaio deve restituire 0 ore come risultato.

Ricordo che: gennaio 31 giorni - febbraio 28 giorni - marzo 31 giorni - aprile 30 giorni - maggio 31 giorni - giugno 30 giorni - luglio 31 giorni - agosto 31 giorni - settembre 30 giorni - ottobre 31 giorni - novembre 30 giorni. - esame 25/08/2014

SOLUZIONE
...
ESERCIZIO 9 (FOR-ARRAY)

Costruire un programma che legge 14 parole e stampa tutte le coppie composte da parole che risultano essere l'una l'anagramma dell'altra

SOLUZIONE
...
ESERCIZIO 10 (FOR-ARRAY)

Costruire un programma che legge una sequenza di N numeri e scrive la deviazione standard di tale sequenza. La deviazione standard è espressa mediante questa formula:

SOLUZIONE
...
ESERCIZIO 12 (FOR-ARRAY)

Costruire un programma che stampi tutte le possibili colonne (sono 313=1.594.323) della schedina del totocalcio (non eseguirlo!).

  1 2 3 4 5 6 7 8 9 10 11 12 13
1° colonna 1 1 1 1 1 1 1 1 1 1 1 1 1
2° colonna 1 1 1 1 1 1 1 1 1 1 1 1 2
3° colonna 1 1 1 1 1 1 1 1 1 1 1 1 X
4° colonna 1 1 1 1 1 1 1 1 1 1 1 2 1
5° colonna 1 1 1 1 1 1 1 1 1 1 1 2 2
6° colonna 1 1 1 1 1 1 1 1 1 1 1 2 X
7° colonna 1 1 1 1 1 1 1 1 1 1 1 X 1
8° colonna 1 1 1 1 1 1 1 1 1 1 1 X 2
9° colonna 1 1 1 1 1 1 1 1 1 1 1 X X
° ° ° ° ° °
213-1 colonna X X X X X X X X X X X X 2
213-1 colonna X X X X X X X X X X X X X

SOLUZIONE
...
ESERCIZIO M.1 (FOR-ARRAY2)

Costruire un programma che generi in modo casuale una matrice NxN di numeri interi e restituisca 2 vettori contenenti rispettivamente la somma di ogni riga e di ogni colonna

SOLUZIONE
...
ESERCIZIO M.2 (FOR-ARRAY2)

Costruire un programma che disponga in una tabella 3x3 la sequenza di numeri interi da 1 a 9 (non devono esserci ripetizioni!) in modo che la somma delle righe e delle colonne valga sempre 15

SOLUZIONE
...
ESERCIZIO M.3 (FOR-ARRAY2)

Generare una matrice NxM (N righe e M colonne) riempita a scacchiera con asterischi '*' e spazi bianchi, e nella quale il primo elemento in posizione (1,1) sia un asterisco. La matrice deve essere salvata in una variabile che si chiama '$chess_matrix'.
La matrice deve essere rappresentata come un Array di Array nel quale ogni elemento può essere un asterisco o uno spazio bianco. E.g. ['*', ' ', '*', ' ', ...] (simulazione).

SOLUZIONE
...
ESERCIZIO M.4 (FOR-ARRAY2)

Siano A una matrice nxm e B mxn. Costruire il programma che produce e stampa la matrice prodotto AxB. L'elemento p[r][c] viene calcolato mediante la seguente formula

SOLUZIONE
...

ESERCIZIO M.5 (FOR-ARRAY2)

Scrivere la funzione "otto_regine" che risolve il rompicapo (o problema) delle otto regine. Il problema consiste nel trovare una disposizione di otto regine (pezzo degli scacchi) su una scacchiera 8x8 in modo tale che nessuna di esse possa catturarne un'altra usando i movimenti standard della regina (esempio due regine non si possono trovare sulla stessa riga colonna o diagionale della scacchiera). Ad esempio nel caso 4x4 (una soluzione possibile) è la seguente.
+---+---+---+---+
|   | R |   |   |
+---+---+---+---+
|   |   |   | R |
+---+---+---+---+
| R |   |   |   |
+---+---+---+---+
|   |   | R |   |
+---+---+---+---+

la funzione deve restituire un vettore di vettori di interi. Ogni elemento del vettore è un possibile soluzione. Ogni soluzione è un vettore di 8 interi da 0 a 7. Il valore in posizione r rappresenta la colonna c dove la regina è posizionata sulla scacchiera.
Ad esempio nel problema 4x4 la soluzione deve contenere questo array [1,3,0,2]
cioe' la prima regina e' alla posizione (0,vec[0]) = 0 riga 1 colonna
cioe' la seconda regina e' alla posizione (1,vec[1]) = 1 riga 3 colonna
cioe' la terza regina e' alla posizione (2,vec[2]) = 2 riga 0 colonna
cioe' la quarta regina e' alla posizione (3,vec[3]) = 3 riga 2 colonna - esame 25/08/2014

SOLUZIONE
...
ESERCIZIO M.6 (FOR-ARRAY2)

Scrivere un programma che data una matrice RxC di interi compresi nell'intervallo 0..9  determini il numero di colonne che hanno elementi crescenti. Ad esempio se ho la seguente matrice:
+---+---+---+---+---+
| 1 | 5 | 3 | 6 | 9 |
+---+---+---+---+---+
| 4 | 3 | 5 | 7 | 8 |
+---+---+---+---+---+
| 4 | 9 | 7 | 5 | 9 |
+---+---+---+---+---+
| 8 | 2 | 9 | 1 | 6 |
+---+---+---+---+---+

il nostro programma deve restituire 2 (la prima e la terza colonna rispettano la richiesta mentre le altre no).

SOLUZIONE
...
ESERCIZIO M.7 (FOR-ARRAY2)

Scrivere un programma che data una matrice RxC di interi compresi nell'intervallo 0..9  determini il numero di sottomatrici i cui elementi hanno una somma pari a 10. Ad esempio se ho la seguente matrice:
+---+---+---+---+---+
| 1 | 5 | 3 | 6 | 10|
+---+---+---+---+---+
| 2 | 3 | 1 | 7 | 8 |
+---+---+---+---+---+
| 4 | 11| 15 | 10|
+---+---+---+---+---+
| 8 | 2 | 31 | 6 |
+---+---+---+---+---+

il nostro programma deve stampare 3 (le 2 sottomatrici di 1 solo elemento contenenti il valore 10 e la matrice 2x2 con elemento iniziale posto sulla riga 2 colonna 2 {il conteggio delle righe e delle colonne parte da 0}.

SOLUZIONE
...