Advertisement
mikolajmki

swift_na5

Jan 22nd, 2023
1,379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 6.51 KB | None | 0 0
  1. import Foundation
  2.  
  3. enum Obywatelstwo: CaseIterable {
  4.     case hiszpanskie, niemieckie, polskie;
  5. }
  6.  
  7. enum RodzajGry: CaseIterable {
  8.   case single, double, singleAndDouble;
  9. }
  10.  
  11. class Osoba {
  12.     var imie: String;
  13.     var nazwisko: String;
  14.     var waga: Double
  15.     var wzrost: Double
  16.     var pesel: String;
  17.     var obywatelstwo: Obywatelstwo;
  18.    
  19.     init(imie: String, nazwisko: String, waga: Double, wzrost: Double, pesel: String, obywatelstwo: Obywatelstwo) {
  20.         self.imie = imie ;
  21.         self.nazwisko = nazwisko;
  22.         self.waga = waga;
  23.         self.wzrost = wzrost;
  24.         self.pesel = pesel;
  25.         self.obywatelstwo = obywatelstwo;
  26.     }
  27.    
  28.     func obliczWiek() -> Double {
  29.         var peselRok: String = "20" + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 0 )]) + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 1 )]);
  30.         var peselMiesiac: Int = Int(String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 2)]) + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 3)]))! - 20;
  31.         var peselDzien: String = String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 4)]) + String(self.pesel[pesel.index(pesel.startIndex, offsetBy: 5)]);
  32.  
  33.         let formatter = DateFormatter();
  34.         formatter.dateFormat = "yyyy/MM/dd";
  35.         let rokUrodzenia = formatter.date(from: "\(peselRok)/\(peselMiesiac)/\(peselDzien)");
  36.         let date = formatter.date(from: "2023/01/23");
  37.         var wiek = rokUrodzenia!.distance(to: date!);
  38.         wiek = wiek / (60 * 60 * 24 * 365);
  39.        
  40.         return wiek;
  41.     }
  42.  
  43.     func printDane() {
  44.       print(" ")
  45.       print("imie: \(self.imie) nazwisko: \(self.nazwisko)");
  46.       print("waga: \(self.waga) wzrost: \(self.wzrost) pesel: \(self.pesel) obywatelstwo: \(self.obywatelstwo)");
  47.     }
  48. }
  49.  
  50. class Tenisista: Osoba {
  51.   var rodzaj: RodzajGry;
  52.   var najPozycja: Int;
  53.   var sumaPunktow: Int;
  54.   var obecnaPozycja: Int;
  55.   var turnieje: [(nazwa: String, punkty: Int)];
  56.  
  57.   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)]) {
  58.     self.rodzaj = rodzaj;
  59.     self.najPozycja = najPozycja;
  60.     self.sumaPunktow = sumaPunktow;
  61.     self.obecnaPozycja = obecnaPozycja;
  62.     self.turnieje = turnieje;
  63.     super.init(imie: imie, nazwisko: nazwisko, waga: waga, wzrost: wzrost, pesel: pesel, obywatelstwo: obywatelstwo);
  64.   }
  65.  
  66.   func dodajTurniej(nazwa: String, punkty: Int) {
  67.     guard punkty > 0 || punkty < 100 else {
  68.       fatalError("Zle miejsce.")
  69.     }
  70.     self.turnieje.append((nazwa: nazwa, punkty: punkty));
  71.   }
  72.  
  73.   override func printDane() {
  74.     super.printDane();
  75.     print("rodzaj: \(self.rodzaj) najPozycja: \(self.najPozycja) sumaPunktow: \(self.sumaPunktow) obecnaPozycja: \(self.obecnaPozycja) turnieje: \(self.turnieje) pozycja: \(self.obecnaPozycja)")
  76.     }
  77. }
  78.  
  79. class Ranking {
  80.   var tenisisci: [Tenisista] = [];
  81.  
  82.   init (tenisisci: [Tenisista]) {
  83.     for t in tenisisci {
  84.       self.tenisisci.append(t);
  85.     }
  86.   }
  87.  
  88.   func printDane() {
  89.     for t in self.tenisisci {
  90.       t.printDane();
  91.     }
  92.   }
  93.  
  94.   func printDouble() {
  95.     for t in self.tenisisci {
  96.       if (t.rodzaj == RodzajGry.double) {
  97.         t.printDane();
  98.       }
  99.     }
  100.   }
  101.  
  102.   func najmlodsi() {
  103.     var sortedTen = self.tenisisci.sorted{$0.obliczWiek() < $1.obliczWiek()};
  104.     for i in 0...2 {
  105.       sortedTen[i].printDane();
  106.     }
  107.   }
  108.  
  109.   func znajdz(imie: String, nazwisko: String) -> Tenisista {
  110.       return tenisisci.filter{$0.imie == imie && $0.nazwisko == nazwisko}[0]
  111.     }
  112.  
  113.   func aktualizuj(imie: String, nazwisko: String, nazwa: String, punkty: Int) {
  114.     for t in self.tenisisci {
  115.       if (t.imie == imie && t.nazwisko == nazwisko) {
  116.         t.dodajTurniej(nazwa: nazwa, punkty: punkty)
  117.       }
  118.     }
  119.   }
  120.  
  121.   func aktualizujPozycje(imie: String, nazwisko: String, pozycja: Int) {
  122.     for t in self.tenisisci {
  123.       if (t.imie == imie && t.nazwisko == nazwisko) {
  124.         t.obecnaPozycja = pozycja;
  125.       }
  126.     }
  127.   }
  128.  
  129.   func aktualizujTurniej(nazwa: String, daneOsob: [[String]], punkty: [Int]) {
  130.       var i = 0;
  131.       for osoba in daneOsob {
  132.         aktualizuj(imie: osoba[0], nazwisko: osoba[1], nazwa: nazwa, punkty: punkty[i]);
  133.         aktualizujPozycje(imie: osoba[0], nazwisko: osoba[1], pozycja: pozycja(punkty: punkty[i]));
  134.         i += 1;
  135.       }
  136.   }
  137.  
  138.   func pozycja(punkty: Int) -> Int {
  139.     switch (punkty) {
  140.       case 1200...1500:
  141.         return 1;
  142.       case 900...1200:
  143.         return 2;
  144.       case 700...900:
  145.         return 3;
  146.       case 400...700:
  147.         return 4;
  148.       case 300...400:
  149.         return 5;
  150.       case 200...300:
  151.         return 6;
  152.       default:
  153.         return 7;
  154.     }
  155.   }
  156. }
  157.  
  158. let o = Osoba(imie: "Mikolaj", nazwisko: "Marcinkowski", waga: 80, wzrost: 195, pesel: "01271912345", obywatelstwo: Obywatelstwo.polskie)
  159.  
  160. o.printDane();
  161. print(o.obliczWiek());
  162.  
  163. 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: []);
  164.  
  165. t.dodajTurniej(nazwa: "Kiepski turniej", punkty: 1);
  166. t.printDane();
  167.  
  168. var tenis: [Tenisista] = []
  169.  
  170. for i in 0...2 {
  171.   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: []))
  172. }
  173.  
  174. 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: []);
  175.  
  176. var found: Bool = false;
  177.  
  178. for t in tenis {
  179.   t.printDane()
  180.   if (t.obywatelstwo == Obywatelstwo.hiszpanskie && t.rodzaj == RodzajGry.double) {
  181.     print(">>> Znaleziono <<<")
  182.     t.printDane();
  183.     found = true;
  184.   }
  185. }
  186.  
  187. print(" ")
  188. found ? print("Znaleziono") : print("Nie znaleziono")
  189.  
  190. let r = Ranking(tenisisci: tenis);
  191. r.printDane();
  192. r.printDouble();
  193. r.najmlodsi();
  194. print(r.znajdz(imie: "Jan", nazwisko: "Kowalski"));
  195. r.aktualizuj(imie: "Jan", nazwisko: "Kowalski", nazwa: "Turniej bardzo slaby", punkty: 40);
  196. r.aktualizujTurniej(nazwa: "Turniej jeszcze gorszy", daneOsob: [["Jan", "Kowalski"], ["Jan000", "Kowalski000"]], punkty: [500, 800]);
  197. r.printDane();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement