Advertisement
gloomylego

Alfa Contest Winners

Dec 12th, 2018
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 7.35 KB | None | 0 0
  1. /// I место – Kotlin 241, Swift 278
  2.  
  3. /// Kotlin:
  4.  
  5. return text.split(".").map{val w=it.split(" ")
  6. val v=w.map{it.toLowerCase()}
  7. var r=""
  8. var i=w.size
  9. while(i-->0){
  10. if(i>0&&v[i]!=w[i]&&v[i-1]!=w[i-1]){r+=w[i-1]+" "+w[i];i--}else r+=v[i]
  11. r+=" "}
  12. r.trim().capitalize()}.joinToString(". ").trim()
  13.  
  14. /// Swift:
  15.  
  16. return text.split{$0=="."}.map{let w=$0.split{$0==" "}
  17. var (v,r,i)=(w.map{$0.lowercased()},"",w.count)
  18. while i>0{i-=1
  19. if i>0,v[i] != w[i],v[i-1] != w[i-1]{r+=w[i-1]+" "+w[i]
  20. i-=1}else{r+=v[i]}
  21. r+=i>0 ?" ":""}
  22. return"\(r.removeFirst())".uppercased()+r}.joined(separator:". ")+"."
  23.  
  24. /// II место – Kotlin 343
  25.  
  26. val p="[а-я]*"
  27. val r="Сок$p Т$p|Ха$p С$p|Люк$p С$p".toRegex()
  28. return text.split('.').filter{!it.isEmpty()}.map{val s=it.trim().replace(r,"@").split(' ').map{it.toLowerCase() }.reversed().joinToString(" ","",".").capitalize();val i=r.findAll(it).map{it.value}.toList().reversed().iterator();s.replace("@".toRegex()){i.next()}}.joinToString(" ")
  29.  
  30. /// III место – Swift 441
  31.  
  32. return text.components(separatedBy:".").dropLast().reduce(""){
  33. var r=""
  34. var t=r
  35. let c=$1.components(separatedBy:" ").filter{$0 != ""}
  36. var i=1
  37. for w in c{
  38. if["Хан","Сокол","Люк"].first(where:w.hasPrefix) != nil,i<c.count,c[i].first!==c[i].uppercased().first!{t=w}else{var m=w
  39. if c[0]==w{m=m.lowercased()}
  40. if c.last==w{m=m.prefix(1).uppercased()+m.dropFirst()}
  41. m=t=="" ?m:t+" "+m
  42. r=r=="" ?m:m+" "+r
  43. t=""}
  44. i+=1}
  45. return($0=="" ?$0:$0+" ")+r+"."}
  46.  
  47.  
  48.  
  49. /// тест-кейсы
  50.         XCTAssertEqual(yodifier.yodify("Йода."), "Йода.")
  51.         XCTAssertEqual(yodifier.yodify("Хан Соло."), "Хан Соло.")
  52.         XCTAssertEqual(yodifier.yodify("Хану Соло."), "Хану Соло.")
  53.         XCTAssertEqual(yodifier.yodify("Хана Соло."), "Хана Соло.")
  54.         XCTAssertEqual(yodifier.yodify("Сокол Тысячелетия."), "Сокол Тысячелетия.")
  55.         XCTAssertEqual(yodifier.yodify("Соколу Тысячелетия."), "Соколу Тысячелетия.")
  56.         XCTAssertEqual(yodifier.yodify("Сокола Тысячелетия."), "Сокола Тысячелетия.")
  57.         XCTAssertEqual(yodifier.yodify("Люк Скайуокер."), "Люк Скайуокер.")
  58.         XCTAssertEqual(yodifier.yodify("Люку Скайуокеру."), "Люку Скайуокеру.")
  59.         XCTAssertEqual(yodifier.yodify("Люка Скайуокера."), "Люка Скайуокера.")
  60.         XCTAssertEqual(yodifier.yodify("Привет Хану Соло."), "Хану Соло привет.")
  61.         XCTAssertEqual(yodifier.yodify("Привет Соколу Тысячелетия."), "Соколу Тысячелетия привет.")
  62.         XCTAssertEqual(yodifier.yodify("Привет Люку Скайуокеру."), "Люку Скайуокеру привет.")
  63.         XCTAssertEqual(yodifier.yodify("Хан Соло Сокола Тысячелетия."), "Сокола Тысячелетия Хан Соло.")
  64.         XCTAssertEqual(yodifier.yodify("Хана Соло Сокол Тысячелетия."), "Сокол Тысячелетия Хана Соло.")
  65.         XCTAssertEqual(yodifier.yodify("Сокола Тысячелетия Хан Соло."), "Хан Соло Сокола Тысячелетия.")
  66.         XCTAssertEqual(yodifier.yodify("Сокол Тысячелетия Хана Соло."), "Хана Соло Сокол Тысячелетия.")
  67.         XCTAssertEqual(yodifier.yodify("Люк Скайуокер Сокола Тысячелетия."), "Сокола Тысячелетия Люк Скайуокер.")
  68.         XCTAssertEqual(yodifier.yodify("Люка Скайуокера Сокол Тысячелетия."), "Сокол Тысячелетия Люка Скайуокера.")
  69.         XCTAssertEqual(yodifier.yodify("Сокола Тысячелетия Люк Скайуокер."), "Люк Скайуокер Сокола Тысячелетия.")
  70.         XCTAssertEqual(yodifier.yodify("Сокол Тысячелетия Люка Скайуокера."), "Люка Скайуокера Сокол Тысячелетия.")
  71.         XCTAssertEqual(yodifier.yodify("Лучшему другу Хана Соло."), "Хана Соло другу лучшему.")
  72.         XCTAssertEqual(yodifier.yodify("Хана Соло лучше пилота нет."), "Нет пилота лучше Хана Соло.")
  73.         XCTAssertEqual(yodifier.yodify("Единым Ханом Соло не."), "Не Ханом Соло единым.")
  74.         XCTAssertEqual(yodifier.yodify("О Хане Соло ходит много слухов."), "Слухов много ходит Хане Соло о.")
  75.         XCTAssertEqual(yodifier.yodify("Достойному пилоту оставь ключ зажигания Сокола Тысячелетия."
  76.             ), "Сокола Тысячелетия зажигания ключ оставь пилоту достойному.")
  77.         XCTAssertEqual(yodifier.yodify("Нужен новый пилот Соколу Тысячелетия умелый."), "Умелый Соколу Тысячелетия пилот новый нужен.")
  78.         XCTAssertEqual(yodifier.yodify("Хочу завладеть твоим Соколом Тысячелетия."), "Соколом Тысячелетия твоим завладеть хочу.")
  79.         XCTAssertEqual(yodifier.yodify("О Соколе Тысячелетия слагают легенды."), "Легенды слагают Соколе Тысячелетия о.")
  80.         XCTAssertEqual(
  81.             yodifier.yodify(
  82.                 "Панцирь черепахи как покрывающий Сокол Тысячелетия слой грязи. Он тормозит твой корабль."
  83.             ), "Грязи слой Сокол Тысячелетия покрывающий как черепахи панцирь. Корабль твой тормозит он."
  84.         )
  85.         XCTAssertEqual(
  86.             yodifier.yodify("Голова Люка Скайуокера торчит из люка Сокола Тысячелетия."),
  87.             "Сокола Тысячелетия люка из торчит Люка Скайуокера голова."
  88.         )
  89.         XCTAssertEqual(
  90.             yodifier.yodify("Люку кабины нужна шторка. Только ситхи тонируют стекла."),
  91.             "Шторка нужна кабины люку. Стекла тонируют ситхи только."
  92.         )
  93.        
  94.         XCTAssertEqual(
  95.             yodifier
  96.                 .yodify("Настало время твоего друга мохнатого соло."), "Соло мохнатого друга твоего время настало."
  97.         )
  98.         XCTAssertEqual(
  99.             yodifier
  100.                 .yodify("Твой корабль прошлого тысячелетия безнадежно устарел."), "Устарел безнадежно тысячелетия прошлого корабль твой."
  101.         )
  102.         XCTAssertEqual(
  103.             yodifier
  104.                 .yodify("Твой корабль прошлого тысячелетия безнадежно устарел."), "Устарел безнадежно тысячелетия прошлого корабль твой."
  105.         )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement