Διαδρομές
/
Gleam
Gleam
/
Ασκήσεις
/
Ακόλουθος της μόδας
Ακόλουθος της μόδας

Ακόλουθος της μόδας

Άσκηση εκμάθησης

Εισαγωγή

Πεδία με ετικέτες

Όταν μια παραλλαγή προσαρμοσμένου τύπου περιέχει δεδομένα, ονομάζεται καταγραφή, και κάθε περιεχόμενη τιμή βρίσκεται σε ένα πεδίο.

pub type Rectangle {
  Rectangle(
    Float, // The first field
    Float, // The second field
  )
}

Για να διευκολύνει την αναγνωσιμότητα, η Gleam επιτρέπει στα πεδία να έχουν ετικέτα με όνομα.

pub type Rectangle {
  Rectangle(
    width: Float,
    height: Float,
  )
}

Οι ετικέτες μπορούν να χρησιμοποιηθούν για να δοθούν ορίσματα με οποιαδήποτε σειρά στον κατασκευαστή μιας καταγραφής.

let a = Rectangle(height: 10.0, width: 20.0)
let b = Rectangle(width: 20.0, height: 10.0)

a == b
// -> True

Όταν ένας προσαρμοσμένος τύπος έχει μόνο μία παραλλαγή, τότε μπορεί να χρησιμοποιηθεί η σύνταξη πρόσβασης .label για να πάρεις τα πεδία μιας καταγραφής.

let rect = Rectangle(height: 10.0, width: 20.0)

rect.height // -> 10.0
rect.width  // -> 20.0

Η σύνταξη ενημέρωσης καταγραφής μπορεί να χρησιμοποιηθεί όταν ένας προσαρμοσμένος τύπος έχει μία μόνο παραλλαγή για να δημιουργήσεις μια νέα καταγραφή από μια υπάρχουσα, αλλά με μερικά από τα πεδία να αντικαθίστανται με νέες τιμές.

let rect = Rectangle(height: 10.0, width: 20.0)
let tall_rect = Rectangle(..rect, height: 50.0)

tall_rect.height // -> 50.0
tall_rect.width  // -> 20.0

Οι ετικέτες μπορούν επίσης να χρησιμοποιηθούν κατά την αντιστοίχιση προτύπων για να εξαγάγεις τιμές από καταγραφές.

pub fn is_tall(rect: Rectangle) {
  case rect {
    Rectangle(height: h, width: _) if h >. 20.0 -> True
    _ -> False
  }
}

Αν θέλουμε να αντιστοιχίσουμε μόνο μερικά από τα πεδία, μπορούμε να χρησιμοποιήσουμε τον τελεστή επέκτασης .. για να αγνοήσουμε τα υπόλοιπα πεδία.

pub fn is_tall(rect: Rectangle) {
  case rect {
    Rectangle(height: h, ..) if h >. 20.0 -> True
    _ -> False
  }
}

Οδηγίες

Σε αυτή την άσκηση είσαι μεγάλος φαν του αθλητισμού και μόλις ανακάλυψες το πάθος σου για το μπάσκετ του NBA. Καθώς είσαι νέος στο μπάσκετ του NBA, κάνεις μια βαθιά βουτιά στην ιστορία του NBA, παρακολουθείς ομάδες, προπονητές και τα στατιστικά νικών/ηττών τους, και συγκρίνεις τις ομάδες μεταξύ τους.

Καθώς δεν έχεις ακόμα αγαπημένη ομάδα, θα αναπτύξεις επίσης έναν αλγόριθμο για να καταλάβεις αν πρέπει να υποστηρίξεις κάποια συγκεκριμένη ομάδα.

Έχεις επτά εργασίες που θα σε βοηθήσουν να αναπτύξεις τον δικό σου αλγόριθμο root-for-a-team.

1. Όρισε το μοντέλο

Όρισε την καταγραφή Coach με τα εξής δύο πεδία:

  • name: το όνομα του προπονητή, τύπου String.
  • former_player: δείχνει αν ο προπονητής ήταν πρώην παίκτης, τύπου Bool.

Όρισε την καταγραφή Stats με τα εξής δύο πεδία:

  • wins: ο αριθμός των νικών, τύπου Int.
  • losses: ο αριθμός των ηττών, τύπου Int.

Όρισε την καταγραφή Team με τα εξής τρία πεδία:

  • name: το όνομα της ομάδας, τύπου String.
  • coach: ο προπονητής της ομάδας, τύπου Coach.
  • stats: τα στατιστικά της ομάδας, τύπου Stats.

2. Δημιούργησε τον προπονητή μιας ομάδας

Υλοποίησε τη συνάρτηση create_coach που παίρνει ως παραμέτρους το όνομα του προπονητή και την κατάστασή του ως πρώην παίκτη, και επιστρέφει την καταγραφή Coach:

create_coach("Larry Bird", True)
// -> Coach(name: "Larry Bird", former_player: True)

3. Δημιούργησε τα στατιστικά μιας ομάδας

Υλοποίησε τη συνάρτηση create_stats που παίρνει ως παραμέτρους τον αριθμό των νικών και τον αριθμό των ηττών, και επιστρέφει την καταγραφή Stats:

create_stats(58, 24)
// -> Stats(wins: 58, losses: 24)

4. Δημιούργησε μια ομάδα

Υλοποίησε τη συνάρτηση create_team που παίρνει ως παραμέτρους το όνομα της ομάδας, τον προπονητή και την καταγραφή, και επιστρέφει την καταγραφή Team:

let coach = create_coach("Larry Bird", True)
let stats = create_stats(58, 24)
create_team("Indiana Pacers", coach, stats)
// -> Team(
//   name: "Indiana Pacers",
//   coach: Coach(name: "Larry Bird", FormerPlayer = True),
//   stats: Stats(wins: 58, losses: 24),
// ) 

5. Αντικατέστησε τον προπονητή

Καθώς οι ιδιοκτήτες των ομάδων του NBA είναι ανυπόμονοι, ανακάλυψες ότι τα άσχημα αποτελέσματα μιας ομάδας συχνά οδηγούσαν στην αντικατάσταση του προπονητή. Υλοποίησε τη συνάρτηση replace_coach που παίρνει ως παραμέτρους την ομάδα και τον νέο της προπονητή, και επιστρέφει την ομάδα αλλά με τον νέο προπονητή:

let coach = create_coach("Larry Bird", True)
let record = create_stats(58, 24)
let team = create_team("Indiana Pacers", coach, record)

let new_coach = create_coach("Isiah Thomas", True)
replace_coach(team, new_coach)
// -> Team(
//   name: "Indiana Pacers",
//   coach: Coach(name: "Isiah Thomas", FormerPlayer = True),
//   stats: Stats(wins: 58, losses: 24),
// ) 

6. Έλεγξε αν είναι η ίδια ομάδα

Καθώς ψάχνεις μέσα στα στατιστικά, κρατάς λίστες με ομάδες και τις καταγραφές τους. Μερικές φορές κάνεις λάθος και υπάρχουν διπλές εγγραφές στη λίστα σου. Υλοποίησε τη συνάρτηση is_same_team που παίρνει δύο ομάδες και επιστρέφει True αν είναι η ίδια ομάδα, αλλιώς επιστρέφει False:

let pacers_coach = create_coach("Larry Bird", True)
let pacers_stats = create_stats(58, 24)
let pacers_team = create_team("Indiana Pacers", pacers_coach, pacers_stats)

let lakers_coach = create_coach("Del Harris", False)
let lakers_stats = create_stats(61, 21)
let lakers_team = create_team("LA Lakers", lakers_coach, lakers_stats)

is_same_team(pacers_team, lakers_team)
// -> False

7. Έλεγξε αν πρέπει να υποστηρίξεις μια ομάδα

Έχοντας εξετάσει πολλές ομάδες και αγώνες, κατέληξες σε έναν αλγόριθμο. Αν ισχύει ένα από τα παρακάτω, υποστηρίζεις αυτή την ομάδα:

  • Το όνομα του προπονητή είναι "Gregg Popovich"
  • Ο προπονητής είναι πρώην παίκτης
  • Το όνομα της ομάδας είναι "Chicago Bulls"
  • Η ομάδα έχει κερδίσει 60 ή περισσότερους αγώνες
  • Η ομάδα έχει περισσότερες ήττες από νίκες

Υλοποίησε τη συνάρτηση root_for_team που παίρνει μια ομάδα και επιστρέφει True αν πρέπει να υποστηρίξεις αυτή την ομάδα, αλλιώς επιστρέφει False:

let spurs_coach = create_coach("Gregg Popovich", False)
let spurs_stats = create_stats(56, 26)
let spurs_team = create_team("San Antonio Spurs", spurs_coach, spurs_stats)
root_for_team(spurs_team)
// -> True
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Gleam Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ακόλουθος της μόδας;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Gleam με 33 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.