Track
/
Rust
Rust
/
Esercizi
/
Punti di sella
Punti di sella

Punti di sella

Medio

Introduzione

Hai in programma di costruire una casa sull'albero nel bosco vicino a dove abiti, così da poter ammirare albe e tramonti.

Hai ottenuto da una società di rilevamento locale dei dati che mostrano l'altezza di ogni albero in ciascuna sezione rettangolare della mappa. Devi analizzare ogni griglia della mappa per trovare gli alberi adatti alla casa sull'albero.

Un buon albero deve soddisfare entrambe le condizioni:

  • essere più alto di ogni albero ad est e ad ovest, per avere la vista migliore possibile delle albe e dei tramonti.
  • essere più basso di ogni albero a nord e a sud, per ridurre al minimo le arrampicate.

Istruzioni

Il tuo compito è trovare gli alberi potenziali su cui potresti costruire la tua casa sull'albero.

L'azienda di dati fornisce i dati sotto forma di griglie che mostrano l'altezza degli alberi. Le righe della griglia rappresentano la direzione est-ovest, mentre le colonne rappresentano la direzione nord-sud.

Un albero accettabile sarà il più grande della sua riga, pur essendo il più piccolo della sua colonna.

Una griglia potrebbe non avere affatto alberi validi. Oppure potrebbe averne uno, o addirittura diversi.

Ecco una griglia con esattamente un albero candidato.

      ↓
      1  2  3  4
    |-----------
  1 | 9  8  7  8
→ 2 |[5] 3  2  4
  3 | 6  6  7  1
  • La riga 2 ha i valori 5, 3, 2 e 4. Il valore più grande è 5.
  • La colonna 1 ha i valori 9, 5 e 6. Il valore più piccolo è 5.

Quindi il punto in [2, 1] (riga: 2, colonna: 1) è un ottimo posto per una casa sull'albero.

In Rust gli indici partono da 0

Per convenzione, il contenuto delle sequenze ordinate di valori in Rust è numerato («indicizzato») a partire da 0. Questo vale a prescindere da ciò che dice il resto della descrizione dell'esercizio in questo README, per esempio i riferimenti a indici che partono da 1: dovrai quindi sottrarre 1 per tradurre quei numeri di indice in indici di Rust.

Nota sull'efficienza

Questo esercizio usa un vettore di vettori per memorizzare il contenuto delle matrici. Sebbene questo esercizio sia pensato per aiutare gli studenti a capire concetti di base sui vettori, come l'indicizzazione, e che i tipi di dati annidati sono legittimi, il vettore di vettori è una scelta non ottimale per l'algebra matriciale ad alte prestazioni e per qualsiasi elaborazione efficiente di grandi quantità di dati.

La spiegazione dettagliata di questa inefficienza va oltre lo scopo di questo esercizio e, più in generale, di questo percorso di apprendimento. Questo aspetto è noto come località della cache e, se vuoi saperne di più sui dettagli dell'architettura di un computer moderno, cliccando quel link troverai una buona introduzione.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Rust Exercism

Vuoi iniziare Punti di sella?

Iscriviti a Exercism per imparare e padroneggiare Rust con 99 esercizi e il mentoring di persone reali, tutto gratis.