Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- enum Obywatelstwo: CaseIterable {
- case hiszpanskie, niemieckie, polskie;
- }
- enum RodzajGry: CaseIterable {
- case single, double, singleAndDouble;
- }
- class Osoba {
- var imie: String;
- var nazwisko: String;
- var waga: Double
- var wzrost: Double
- var pesel: String;
- var obywatelstwo: Obywatelstwo;
- init(imie: String, nazwisko: String, waga: Double, wzrost: Double, pesel: String, obywatelstwo: Obywatelstwo) {
- self.imie = imie ;
- self.nazwisko = nazwisko;
- self.waga = waga;
- self.wzrost = wzrost;
- self.pesel = pesel;
- self.obywatelstwo = obywatelstwo;
- }
- func obliczWiek() -> Double {
- var peselRok: String = "20" + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 0 )]) + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 1 )]);
- var peselMiesiac: Int = Int(String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 2)]) + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 3)]))! - 20;
- var peselDzien: String = String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 4)]) + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 5)]);
- let formatter = DateFormatter();
- formatter.dateFormat = "yyyy/MM/dd";
- let rokUrodzenia = formatter.date(from: "\(peselRok)/\(peselMiesiac)/\(peselDzien)");
- let date = formatter.date(from: "2023/01/23");
- var wiek = rokUrodzenia!.distance(to: date!);
- wiek = wiek / (60 * 60 * 24 * 365);
- return wiek;
- }
- func printDane() {
- print(" ")
- print("imie: \(self.imie) nazwisko: \(self.nazwisko)");
- print("waga: \(self.waga) wzrost: \(self.wzrost) pesel: \(self.pesel) obywatelstwo: \(self.obywatelstwo)");
- }
- }
- class Tenisista: Osoba {
- var rodzaj: RodzajGry;
- var najPozycja: Int;
- var sumaPunktow: Int;
- var obecnaPozycja: Int;
- var turnieje: [(nazwa: String, punkty: Int)];
- init(imie: String, nazwisko: String, waga: Double, wzrost: Double, pesel: String, obywatelstwo: Obywatelstwo, rodzaj: RodzajGry, najPozycja: Int, sumaPunktow: Int, obecnaPozycja: Int, turnieje: [(nazwa: String, punkty: Int)]) {
- self.rodzaj = rodzaj;
- self.najPozycja = najPozycja;
- self.sumaPunktow = sumaPunktow;
- self.obecnaPozycja = obecnaPozycja;
- self.turnieje = turnieje;
- super.init(imie: imie, nazwisko: nazwisko, waga: waga, wzrost: wzrost, pesel: pesel, obywatelstwo: obywatelstwo);
- }
- func dodajTurniej(nazwa: String, punkty: Int) {
- guard punkty > 0 || punkty < 100 else {
- fatalError("Zle miejsce.")
- }
- self.turnieje.append((nazwa: nazwa, punkty: punkty));
- }
- override func printDane() {
- super.printDane();
- print("rodzaj: \(self.rodzaj) najPozycja: \(self.najPozycja) sumaPunktow: \(self.sumaPunktow) obecnaPozycja: \(self.obecnaPozycja) turnieje: \(self.turnieje) pozycja: \(self.obecnaPozycja)")
- }
- }
- class Ranking {
- var tenisisci: [Tenisista] = [];
- init (tenisisci: [Tenisista]) {
- for t in tenisisci {
- self.tenisisci.append(t);
- }
- }
- func printDane() {
- for t in self.tenisisci {
- t.printDane();
- }
- }
- func printDouble() {
- for t in self.tenisisci {
- if (t.rodzaj == RodzajGry.double) {
- t.printDane();
- }
- }
- }
- func najmlodsi() {
- var sortedTen = self.tenisisci.sorted{$0.obliczWiek() < $1.obliczWiek()};
- for i in 0...2 {
- sortedTen[i].printDane();
- }
- }
- func znajdz(imie: String, nazwisko: String) -> Tenisista {
- return tenisisci.filter{$0.imie == imie && $0.nazwisko == nazwisko}[0]
- }
- func aktualizuj(imie: String, nazwisko: String, nazwa: String, punkty: Int) {
- for t in self.tenisisci {
- if (t.imie == imie && t.nazwisko == nazwisko) {
- t.dodajTurniej(nazwa: nazwa, punkty: punkty)
- }
- }
- }
- func aktualizujPozycje(imie: String, nazwisko: String, pozycja: Int) {
- for t in self.tenisisci {
- if (t.imie == imie && t.nazwisko == nazwisko) {
- t.obecnaPozycja = pozycja;
- }
- }
- }
- func aktualizujTurniej(nazwa: String, daneOsob: [[String]], punkty: [Int]) {
- var i = 0;
- for osoba in daneOsob {
- aktualizuj(imie: osoba[0], nazwisko: osoba[1], nazwa: nazwa, punkty: punkty[i]);
- aktualizujPozycje(imie: osoba[0], nazwisko: osoba[1], pozycja: pozycja(punkty: punkty[i]));
- i += 1;
- }
- }
- func pozycja(punkty: Int) -> Int {
- switch (punkty) {
- case 1200...1500:
- return 1;
- case 900...1200:
- return 2;
- case 700...900:
- return 3;
- case 400...700:
- return 4;
- case 300...400:
- return 5;
- case 200...300:
- return 6;
- default:
- return 7;
- }
- }
- }
- let o = Osoba(imie: "Mikolaj", nazwisko: "Marcinkowski", waga: 80, wzrost: 195, pesel: "01271912345", obywatelstwo: Obywatelstwo.polskie)
- o.printDane();
- print(o.obliczWiek());
- let t = Tenisista(imie: "Mikolaj", nazwisko: "Marcinkowski", waga: 80, wzrost: 195, pesel: "01271912345", obywatelstwo: Obywatelstwo.polskie, rodzaj: RodzajGry.single, najPozycja: 200, sumaPunktow: 500, obecnaPozycja: 100, turnieje: []);
- t.dodajTurniej(nazwa: "Kiepski turniej", punkty: 1);
- t.printDane();
- var tenis: [Tenisista] = []
- for i in 0...2 {
- tenis.append(Tenisista(imie: "Jan\(i)\(i)\(i)", nazwisko: "Kowalski\(i)\(i)\(i)", waga: 80 + Double(i), wzrost: 195, pesel: "01271912345", obywatelstwo: Obywatelstwo.polskie, rodzaj: RodzajGry.single, najPozycja: 200, sumaPunktow: 600 + i * 100, obecnaPozycja: 100, turnieje: []))
- }
- tenis[1] = Tenisista(imie: "Jan", nazwisko: "Kowalski", waga: 80, wzrost: 195, pesel: "01271912345", obywatelstwo: Obywatelstwo.hiszpanskie, rodzaj: RodzajGry.double, najPozycja: 200, sumaPunktow: 500, obecnaPozycja: 100, turnieje: []);
- var found: Bool = false;
- for t in tenis {
- t.printDane()
- if (t.obywatelstwo == Obywatelstwo.hiszpanskie && t.rodzaj == RodzajGry.double) {
- print(">>> Znaleziono <<<")
- t.printDane();
- found = true;
- }
- }
- print(" ")
- found ? print("Znaleziono") : print("Nie znaleziono")
- let r = Ranking(tenisisci: tenis);
- r.printDane();
- r.printDouble();
- r.najmlodsi();
- print(r.znajdz(imie: "Jan", nazwisko: "Kowalski"));
- r.aktualizuj(imie: "Jan", nazwisko: "Kowalski", nazwa: "Turniej bardzo slaby", punkty: 40);
- r.aktualizujTurniej(nazwa: "Turniej jeszcze gorszy", daneOsob: [["Jan", "Kowalski"], ["Jan000", "Kowalski000"]], punkty: [500, 800]);
- r.printDane();
Advertisement
Add Comment
Please, Sign In to add comment