Menu
Coddy logo textTech

Mettere tutto insieme

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 53 di 66.

challenge icon

Sfida

Facile

Riceverai sei input. Il primo input è un comando che può essere add, check oppure sell. Il secondo input è il nome di un articolo. Il terzo input è un numero che rappresenta la quantità da vendere (per il comando sell) oppure la quantità iniziale (per il comando add). Il quarto input è un elenco di nomi di articoli presenti nell'inventario, separati da virgole. Il quinto input è un elenco di prezzi corrispondenti a ciascun articolo, separati da virgole. Il sesto input è un elenco di quantità corrispondenti a ciascun articolo, separati da virgole.

Crea un sistema completo di gestione dell'inventario che gestisca tutte e tre le operazioni: aggiunta di articoli, controllo delle scorte e vendita di articoli. Usa una HashMap per memorizzare i dati dell'inventario, dove la chiave è il nome dell'articolo e il valore è una tupla contenente il prezzo e la quantità (f64, i32).

Requisiti:

  • Importa HashMap da std::collections
  • Leggi il primo input (comando) e rimuovi gli spazi bianchi
  • Leggi il secondo input (nome dell'articolo) e rimuovi gli spazi bianchi
  • Leggi il terzo input (valore di quantità/prezzo) e rimuovi gli spazi bianchi
  • Analizza il terzo input come f64
  • Leggi il quarto input (nomi degli articoli separati da virgole) e rimuovi gli spazi bianchi
  • Leggi il quinto input (prezzi separati da virgole) e rimuovi gli spazi bianchi
  • Leggi il sesto input (quantità separate da virgole) e rimuovi gli spazi bianchi
  • Crea una HashMap<String, (f64, i32)> mutabile per l'inventario
  • Dividi i nomi degli articoli in corrispondenza delle virgole
  • Dividi i prezzi in corrispondenza delle virgole e analizza ciascuno come f64
  • Dividi le quantità in corrispondenza delle virgole e analizza ciascuna come i32
  • Inserisci ogni articolo nell'inventario con il prezzo e la quantità corrispondenti, sotto forma di tupla
  • Usa un'espressione match sul comando per determinare quale operazione eseguire
  • Per il comando add:
    • Usa .entry() e .or_insert() per aggiungere l'articolo se non esiste, usando il terzo input come prezzo e 0 come quantità iniziale
    • Stampa: Added [item_name] to inventory
    • Stampa: Price: $[price]
    • Stampa: Quantity: 0
  • Per il comando check:
    • Usa .get() per verificare se l'articolo esiste
    • Usa un'espressione match per gestire Option
    • Se è Some, stampa:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Se è None, stampa: [item_name] is not in stock
  • Per il comando sell:
    • Analizza il terzo input come i32 per ottenere la quantità da vendere
    • Usa .get() per verificare se l'articolo esiste
    • Usa un'espressione match per gestire Option
    • Se è Some:
      • Verifica se la quantità attuale è sufficiente
      • Se sì, aggiorna l'inventario con la nuova quantità e stampa:
        • Sold [quantity_to_sell] [item_name]
        • Total: $[total_price]
        • Remaining stock: [new_quantity]
      • Se no, stampa:
        • Insufficient stock for [item_name]
        • Available: [current_quantity]
    • Se è None, stampa: [item_name] is not in stock
  • Per qualsiasi altro comando, stampa: Invalid command

Input:

  • Prima riga: comando (add, check oppure sell)
  • Seconda riga: nome dell'articolo (ad es., Tablet)
  • Terza riga: numero (prezzo per add, quantità per sell, ignorato per check)
  • Quarta riga: nomi degli articoli separati da virgole (ad es., Laptop,Mouse,Keyboard)
  • Quinta riga: prezzi separati da virgole (ad es., 999.99,25.50,75.00)
  • Sesta riga: quantità separate da virgole (ad es., 15,50,30)

Output:

  • Per il comando add:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • Per il comando check (l'articolo esiste):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • Per il comando check (l'articolo non esiste): [item_name] is not in stock
  • Per il comando sell (scorte sufficienti):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • Per il comando sell (scorte insufficienti):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • Per il comando sell (l'articolo non esiste): [item_name] is not in stock
  • Per un comando non valido: Invalid command

Provalo tu

use std::collections::HashMap;
use std::io;

fn main() {
    // Leggi gli input
    let mut command = String::new();
    io::stdin().read_line(&mut command).expect("Failed to read line");
    let command = command.trim();
    
    let mut item_name = String::new();
    io::stdin().read_line(&mut item_name).expect("Failed to read line");
    let item_name = item_name.trim();
    
    let mut value_input = String::new();
    io::stdin().read_line(&mut value_input).expect("Failed to read line");
    let value_input = value_input.trim();
    
    let mut items_input = String::new();
    io::stdin().read_line(&mut items_input).expect("Failed to read line");
    let items_input = items_input.trim();
    
    let mut prices_input = String::new();
    io::stdin().read_line(&mut prices_input).expect("Failed to read line");
    let prices_input = prices_input.trim();
    
    let mut quantities_input = String::new();
    io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
    let quantities_input = quantities_input.trim();
    
    // Crea l'HashMap inventory
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: Scrivi il tuo codice qui sotto
    // Analizza gli input separati da virgole e popola inventory
    // Usa un'espressione match su command per gestire le operazioni add, check e sell
    // Ricorda di produrre i messaggi appropriati in base a command
    
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online