Advertisement
Alexxik

Untitled

Sep 14th, 2023 (edited)
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.69 KB | None | 0 0
  1. // MARK: - Старая задача с собеса
  2. //вы работаете в офисе. Твой друг X приходит на работу в разное время и поэтому у вас редко получается пересечься. Вам дано два массива с интервалами времени, когда в офисе были вы и когда был твой друг. Нужно найти интервалы, когда вы оба были в офисе.
  3. //Пример:
  4. //["10-12", "12-16", "20-23"]
  5. //["13-15", "16-21"]
  6. //
  7. //Output:
  8. //["13-15", "16", "20-21"]
  9.  
  10. func findZipTime(arr1: [String], arr2: [String]) -> [[Int]] {
  11.     let arr1 = arr1.map{$0.split(separator: "-").map{Int($0)!}}.map{$0}
  12.     let arr2 = arr2.map{ $0.split(separator: "-").map{Int($0)!}}.map{$0}
  13.    
  14.     let grouped = (arr1 + arr2).sorted{$0[0] < $1[0]}
  15.     let groupedWithoutFirst = grouped[1..<grouped.count]
  16.     var previous = grouped[0]
  17.    
  18.     var result = [[Int]]()
  19.    
  20.     for interval in groupedWithoutFirst {
  21.         var common: [Int]
  22.         if previous[1] > interval[0] {
  23.             if interval[1] < previous[1] {
  24.                 common = interval
  25.             } else {
  26.                 common = [interval[0], previous[1]]
  27.             }
  28.             result.append(common)
  29.         } else if previous[1] == interval[0] {
  30.             common = [interval[0]]
  31.             result.append(common)
  32.         }
  33.        
  34.         if previous[1] < interval[1] {
  35.             previous = interval
  36.         }
  37.     }
  38.    
  39.     return result
  40. }
  41.  
  42. let interval1 = ["10-12", "13-16", "20-23"]
  43. let interval2 = ["14-15", "16-21"]
  44.  
  45. findZipTime(arr1: interval1, arr2: interval2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement