Pratybos
Penkios užduotys. Kiekviena — viena funkcija tavo algo projekte. Sprendimų
nerodom; rodom, ką turi gauti.
Visos naudoja *metrics.Counter ir visos turi būti determinuotos: tas pats
iškvietimas — tas pats skaičius.
1. LinearFindAll(items []Item, artist string, c *metrics.Counter) []int
Grąžina visų įrašų, kurių Artist sutampa, indeksus.
Kiek palyginimų sunaudoja? Palygink su LinearFind. Kodėl skaičius nepriklauso
nuo to, kiek atitikmenų rado?
2. MinRating(items []Item, c *metrics.Counter) (Item, bool)
Grąžina prasčiausiai įvertintą įrašą. false, jei biblioteka tuščia.
Skaičiuok palyginimus tarp įvertinimų. n įrašų bibliotekoje turi gautis tiksliai n−1. Jei gauni n — lygini pirmą elementą su pačiu savimi.
3. CountInYearRange(items []Item, from, to int, c *metrics.Counter) int
Kiek įrašų patenka į metų intervalą (imtinai).
Skaičiuok kiekvieną intervalo tikrinimą. Ar gali atsakyti neperžiūrėjęs visų įrašų? Užsirašyk atsakymą — 6 ir 11 pamokose jis pasikeis.
4. Verify(items []Item) error
Patikrina, kad kiekvieno įrašo Year ir Rating telpa į rėžius, ir grąžina
klaidą su pirmo netinkamo įrašo ID.
Paleisk su savo sugeneruota biblioteka. Tada sugadink vieną eilutę library.jsonl
ranka ir paleisk dar kartą.
5. AverageComparisons(items []Item, seed int64, trials int) float64
Atsitiktinai renka trials pavadinimų iš pačios bibliotekos, ieško kiekvieno
ir grąžina vidutinį palyginimų skaičių.
Su 1000 įrašų ir pakankamai bandymų turi gauti apie 500 — tai ir yra vidutinis atvejis, apie kurį kalbėjom. Patikrink.
Tada padaryk tą patį su pavadinimais, kurių bibliotekoje nėra. Ką gauni ir kodėl skiriasi?