IEEE news novembre 2013 Speciale Android Applicazioni in evidenza su Google Play Store Gratuita. Bussola professionale che sfrutta la bussola digitale del tablet o smartphone, il GPS, ed eventualmente Internet Gratuita. Accordi musicali per principianti e professionisti Accordi Olimpiadi di informatica Risposte ai quesiti precedenti 1. Quesito matematico (medio) Dimostrare che tra tutti i rettangoli di perimetro dato, quello di area massima è un quadrato. Risposta. Consideriamo il semiperimetro p, perché il risultato è identico. Sia b la base e h l’altezza, A l’area. h = p –b. A = b (p –b) = b p – b2. Devo massimizzare A(b). La derivata è p – 2 b. Eguaglio a 0, p = 2 b, cioè la base è uguale all’altezza e quindi è un quadrato. Resta da provare che è un massimo: studio il segno della derivata: A’ > 0 per 2 b < p , A’ < 0 per 2 b > p, quindi l’area prima cresce poi diminuisce, cioè sia ha un massimo in p = 2 b, c.v.c (Come Volevasi Cercare). Si poteva trovare semplicemente la risposta con considerazioni geometriche. Se considero un rettangolo e dilato la base contraendo l’altezza mantenendo il perimetro, fino a farlo tendere a 4 segmenti, il perimetro resta inalterato ma l’area tende a 0. 2. Quesito informatico (medio) Sunnydale (sunny) Il problema Sunnydale è una città che - per ragioni storiche e ambientali - ospita un elevatissimo numero di vampiri. Per ragioni cutanee i vampiri non possono sopportare la luce solare e, storicamente, hanno sempre avuto enormi difficoltà a viaggiare col sole alto nel cielo; l'attraversamento delle gallerie sotterranee di Sunnydale è sempre stato il mezzo preferito dai vampiri per muoversi nella città. I continui crolli delle gallerie hanno creato dei fori nei soffitti, rendendone alcune troppo luminose per un attraversamento tranquillo e sereno. Harmony, una ragazza-vampiro, passeggia per le gallerie di Sunnydale quando il suo amico Spike le telefona per invitarla a casa sua. Purtroppo ella si muove per le gallerie sotterranee secondo una regola tanto semplice quanto tassativa: ad ogni svincolo sceglie sempre e comunque la galleria meno luminosa per paura di rovinare la propria pelle. Sapendo che non esistono due gallerie egualmente luminose, bisogna determinare se Harmony possa raggiungere la casa sotterranea di Spike e, in caso affermativo, quante gallerie le sono necessarie per arrivare. Dati di input La prima riga del file input.txt è composta da quattro numeri interi N, M, H e S: il primo rappresenta il numero degli svincoli (numerati da 1 a N), il secondo rappresenta il numero delle gallerie, il terzo rappresenta l'indice dello svincolo in cui si trova Harmony quando riceve la telefonata; il quarto, infine, rappresenta l'indice dello svincolo della casa di Spike. Ognuna delle successive M righe descrive una galleria e contiene tre numeri interi A, B e L separati da uno spazio: i primi due rappresentano gli svincoli collegati dalla galleria mentre il terzo rappresenta il suo grado di luminosità. Dati di output Il file output.txt dovrà contenere un unico numero intero: -1 se Harmony non riuscirà a raggiungere Spike; altrimenti, il numero di gallerie che ella percorrerà prima di raggiungerlo. Assunzioni 2 ≤ N ≤ 50000 1 ≤ M ≤ 50000 Non esistono due gallerie con la stessa luminosità L. Per ogni galleria, 1 ≤ L ≤ M. 1 ≤ H, S ≤ N Esempi di input/output File input.txt File output.txt 5 1 2 3 4 5 1 2 6 2 3 4 5 1 4 1 5 5 1 3 2 6 4 File input.txt File output.txt 3 2 2 1 3 1 2 2 3 1 -1 Note I nomi Sunnydale, Harmony e Spike sono proprietà di Joss Whedon e Mutant Enemy Inc. Risposta (programma in C) #include <stdio.h> #include <stdlib.h> #define STDIO /* #define DEBUG */ typedef struct n { int node; int brightness; struct n *next; } node; int N, M, H, S; node** adjList; int error(int err) { switch (err) { case 1: fprintf(stderr, "Errore di apertura files.\n"); break; case 2: fprintf(stderr, "Errore di lettura.\n"); break; case 3: fprintf(stderr, "Errore in un arco.\n"); break; default: fprintf(stderr, "Errore sconosciuto.\n"); } exit(err); } int main() { FILE *in, *out; node* temp; node* chosen; int A, B, L; int last; int i; #ifdef STDIO in = stdin; out = stdout; #else in = fopen("input.txt", "r"); out = fopen("output.txt", "w"); #endif if ( in == NULL || out == NULL ) error(1); if ( fscanf(in, " %d %d %d %d", &N, &M, &H, &S) != 4 ) error(2); /* Vogliamo che i nodi siano indicizzati a partire da 0 */ H--; S--; adjList = (node**) calloc(N, sizeof(node*)); for ( i = 0 ; i < M ; i++ ) { if ( fscanf(in, " %d %d %d", &A, &B, &L) != 3 ) error(2); if ( A < 1 || A > N || B < 1 || B > N || L < 1 || L > M ) error(3); /* Vogliamo che i nodi siano indicizzati a partire da 0 */ A--; B--; for ( temp = adjList[A] ; temp != NULL ; temp = temp->next ) if ( temp->node == B ) error(2); temp = (node*) malloc(sizeof(node)); temp->node = B; temp->brightness = L; temp->next = adjList[A]; adjList[A] = temp; for ( temp = adjList[B] ; temp != NULL ; temp = temp->next ) if ( temp->node == A ) error(2); temp = (node*) malloc(sizeof(node)); temp->node = A; temp->brightness = L; temp->next = adjList[B]; adjList[B] = temp; } /* L'unico modo per, arrivati ad un nodo, tornare indietro e` quello di ripercorre l'ultimo arco: ricordare l'ultimo nodo visitato e` sufficiente. */ last = -1; for ( i = 0 ; H != S ; i++ ) { chosen = NULL; for ( temp = adjList[H] ; temp != NULL ; temp = temp->next ) if ( chosen == NULL || temp->brightness < chosen->brightness ) chosen = temp; #ifdef DEBUG if ( chosen != NULL ) fprintf(stderr, "%d (%d) ", H + 1, chosen->brightness); #endif /* Se il nodo in cui siamo ha grado 0 oppure l'arco scelto ci fa tornare indietro Harmony non raggiungera` Spike */ if ( chosen == NULL || chosen->node == last ) break; last = H; H = chosen->node; } #ifdef DEBUG fprintf(stderr, "%d\n", H + 1); #endif if ( H == S ) fprintf(out, "%d\n", i); else fprintf(out, "-1\n"); return 0; } Nuovi quesiti 1. Quesito logico matematico (medio) Fra tutti i parallelepipedi a base quadrata e di assegnato volume V, trova quello con superficie totale minima. 2. Quesito informatico (medio) Il problema Il dottor Hubb è un appassionato di astronomia. Possiede una carta astronomica planare, composta dai due assi del piano cartesiano aventi l'origine in posizione (0,0). La carta è suddivisa in quattro quadranti delimitati dagli assi cartesiani, dove a ciascun quadrante viene assegnata una lettera distinta. Le stelle nella carta planare sono rappresentate mediante coordinate intere e un valore di intensità. Precisamente, ciascuna stella è rappresentata da una tripla x, y, k, per individuare le coordinate (x, y) del centro della stella e la sua intensità espressa mediante un intero k {1,2,3}. Al dottor Hubb piace molto scattare delle foto digitali al cielo stellato. Ciascuna foto digitale è composta da zeri e da uni. Lo sfondo del cielo è rappresentato dagli zeri, mentre una stella x, y, k è rappresentata dagli uni in accordo al valore di k: 1 1 111 1 1 111 11111 111 1 In tal caso, la coordinata (x, y) si riferisce all'uno in posizione centrale. Le stelle possono parzialmente sovrapporsi nelle foto ma le loro coordinate sono sicuramente distinte come coppie di valori. Purtroppo il dottor Hubb è un pasticcione. La sua carta astronomica contiene N stelle, e lui ha scattato una foto digitale di taglia M x M, ma non ricorda in quali quadranti. Per l'elevata tecnologia adottata, non ci sono distorsioni ottiche: basta sovrapporre la foto digitale alla carta planare in una posizione opportuna, per farle combaciare e poter così ricostruire il quadrante (o i quadranti) di appartenenza. Le risposte ammissibili sono A, B, C, D, AD, AB, BC, CD, ABCD, mentre AC, BD, ABC, ecc., non sono considerate valide. Suggerimento: Quadrettare a griglia il piano cartesiano con le coordinate intere, assegnando le coordinate (x, y) al quadratino avente (x, y) come coordinata dello spigolo inferiore sinistro. Dati in input Il file di input contiene una sequenza di righe. La prima riga contiene il valore di N e M. Le N righe successive rappresentano le N stelle nella carta astronomica, ciascuna riga contenente una tripla x, y, k, interpretata in accordo a quanto descritto sopra. Le M righe finali rappresentano la foto digitale, ogni riga contenente una sequenza di M valori scelti tra zeri e uni. Dati in output Il file di output contiene una sola delle risposte ammissibili, A, B, C, D, AD, AB, BC, CD, ABCD, in base alla posizione della foto digitale rispetto ai quadranti della carta astronomica. Assunzioni I numeri sono rappresentati con il segno. Le coordinate (x, y) sono coppie di numeri, dove -1000 < x, y < 1000. Per la conformazione della carta stessa e della foto c'è esattamente una risposta da fornire (non è possibile che la foto appaia due o più volte in posizioni distinte). La foto non taglia le stelle: una stella è interamente catturata dalla foto oppure non è catturata affatto. Infine, se una stella ha centro nel quadrante A ma la sua intensità è tale che induca un uno nel quadrante B, per esempio, allora la stella viene considerata a cavallo dei due quadranti A e B (non conta solo il centro, ma anche l’intensità). Esempio di input File input.txt 9 -3 -2 -1 -2 1 1 2 2 -3 1000100 0100000 0000100 0001110 0011111 0111110 0110100 7 6 2 1 7 3 3 -1 -1 Pesce robot spione IEEE CS (agosto 2013) Ricercatori Del Virginia Tech hanno sviluppato il robot Cyro 7 1 1 2 1 1 3 2 1 1 Robot pesce spione Cyro È ampio 1,7 metri e pesa 77 chili. Ha motori elettrici che muovono 8 bracci robotici. Camuffato da animale marino, e dotato in futuro di web cam, può essere usato anche a scopi di spionaggio militare. Memorie di nuova generazione IEEE CS (agosto 2013), Greg Atwood, Soo-Ik Chae, Simon S.Y. Shim Schema di memoria PRAM Memoria MRAM A confronto Le memorie, volatili e non, sono un componente essenziale dei PC, dei tablet e smartphone. Nei dispositivi mobili sono la parte più costosa, alla pari con il display. La capacità è aumentata sempre nel rispetto della famosa legge di Moore: un raddoppio a parità di prezzo ogni 18 mesi. Ora però molti sintomi fanno pensare che si sia vicini a limiti di natura fisica e tecnologica. Del resto, le tecnologie usate risalgono agli anni ’70, nessuna nuova tecnologia è stata utilizzata su vasta scala. Una rivoluzione è alle porte: dalla microelettronica alla nano elettronica. Si useranno strati dell’ordine di pochi atomi o addirittura uno sono, e nuovi materiali come il grafene. L’architettura più usata per le memorie di oggi è basata sulle porte NAND con transistor e capacità integrate. Una nuova tecnologia, che promette velocità e densità 10 volte superiori, è basata sul resistore come unità di memorizzazione. Avevamo già parlato su questa rubrica, tempo fa, di un nuovo componente il Memristore: fra il transistor e il resistore, una tecnologia ancora in fase di sviluppo. Già disponibili sono i chip basati su resistori. Vi sono tre tipi di RAM resistive non volatili: phase-change RAM (PRAM), magnetic RAM (MRAM) e resistive RAM (ReRAM). Le PRAM usano due fasi di composti chimici del gruppo dello zinco, chiamati calcogenidi. Le due fasi sono quella amorfa ad alta resistività, e quella cristallina a bassa. Le MRAM utilizzano un meccanismo magnetico: la direzione di magnetizzazione di elettrodi ferromagnetici. Infine, le ReRAM si basano su fasi di transizione di ossidi di metallo: TMO (Transition Metal Oxides). Il primo trasmettitore FM al grafene IEEE Spectrum (21/11/2013) Ricercatori della Columbia University hanno realizzato NEMS (Nano Electro Mechanical System), un integrato di nano elettronica al grafene che realizza un piccolissimo e completo trasmettitore FM.