novembre 2013

annuncio pubblicitario
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.
Scarica