Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// I место – Kotlin 241, Swift 278
- /// Kotlin:
- return text.split(".").map{val w=it.split(" ")
- val v=w.map{it.toLowerCase()}
- var r=""
- var i=w.size
- while(i-->0){
- if(i>0&&v[i]!=w[i]&&v[i-1]!=w[i-1]){r+=w[i-1]+" "+w[i];i--}else r+=v[i]
- r+=" "}
- r.trim().capitalize()}.joinToString(". ").trim()
- /// Swift:
- return text.split{$0=="."}.map{let w=$0.split{$0==" "}
- var (v,r,i)=(w.map{$0.lowercased()},"",w.count)
- while i>0{i-=1
- if i>0,v[i] != w[i],v[i-1] != w[i-1]{r+=w[i-1]+" "+w[i]
- i-=1}else{r+=v[i]}
- r+=i>0 ?" ":""}
- return"\(r.removeFirst())".uppercased()+r}.joined(separator:". ")+"."
- /// II место – Kotlin 343
- val p="[а-я]*"
- val r="Сок$p Т$p|Ха$p С$p|Люк$p С$p".toRegex()
- 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(" ")
- /// III место – Swift 441
- return text.components(separatedBy:".").dropLast().reduce(""){
- var r=""
- var t=r
- let c=$1.components(separatedBy:" ").filter{$0 != ""}
- var i=1
- for w in c{
- if["Хан","Сокол","Люк"].first(where:w.hasPrefix) != nil,i<c.count,c[i].first!==c[i].uppercased().first!{t=w}else{var m=w
- if c[0]==w{m=m.lowercased()}
- if c.last==w{m=m.prefix(1).uppercased()+m.dropFirst()}
- m=t=="" ?m:t+" "+m
- r=r=="" ?m:m+" "+r
- t=""}
- i+=1}
- return($0=="" ?$0:$0+" ")+r+"."}
- /// тест-кейсы
- XCTAssertEqual(yodifier.yodify("Йода."), "Йода.")
- XCTAssertEqual(yodifier.yodify("Хан Соло."), "Хан Соло.")
- XCTAssertEqual(yodifier.yodify("Хану Соло."), "Хану Соло.")
- XCTAssertEqual(yodifier.yodify("Хана Соло."), "Хана Соло.")
- XCTAssertEqual(yodifier.yodify("Сокол Тысячелетия."), "Сокол Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Соколу Тысячелетия."), "Соколу Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Сокола Тысячелетия."), "Сокола Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Люк Скайуокер."), "Люк Скайуокер.")
- XCTAssertEqual(yodifier.yodify("Люку Скайуокеру."), "Люку Скайуокеру.")
- XCTAssertEqual(yodifier.yodify("Люка Скайуокера."), "Люка Скайуокера.")
- XCTAssertEqual(yodifier.yodify("Привет Хану Соло."), "Хану Соло привет.")
- XCTAssertEqual(yodifier.yodify("Привет Соколу Тысячелетия."), "Соколу Тысячелетия привет.")
- XCTAssertEqual(yodifier.yodify("Привет Люку Скайуокеру."), "Люку Скайуокеру привет.")
- XCTAssertEqual(yodifier.yodify("Хан Соло Сокола Тысячелетия."), "Сокола Тысячелетия Хан Соло.")
- XCTAssertEqual(yodifier.yodify("Хана Соло Сокол Тысячелетия."), "Сокол Тысячелетия Хана Соло.")
- XCTAssertEqual(yodifier.yodify("Сокола Тысячелетия Хан Соло."), "Хан Соло Сокола Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Сокол Тысячелетия Хана Соло."), "Хана Соло Сокол Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Люк Скайуокер Сокола Тысячелетия."), "Сокола Тысячелетия Люк Скайуокер.")
- XCTAssertEqual(yodifier.yodify("Люка Скайуокера Сокол Тысячелетия."), "Сокол Тысячелетия Люка Скайуокера.")
- XCTAssertEqual(yodifier.yodify("Сокола Тысячелетия Люк Скайуокер."), "Люк Скайуокер Сокола Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Сокол Тысячелетия Люка Скайуокера."), "Люка Скайуокера Сокол Тысячелетия.")
- XCTAssertEqual(yodifier.yodify("Лучшему другу Хана Соло."), "Хана Соло другу лучшему.")
- XCTAssertEqual(yodifier.yodify("Хана Соло лучше пилота нет."), "Нет пилота лучше Хана Соло.")
- XCTAssertEqual(yodifier.yodify("Единым Ханом Соло не."), "Не Ханом Соло единым.")
- XCTAssertEqual(yodifier.yodify("О Хане Соло ходит много слухов."), "Слухов много ходит Хане Соло о.")
- XCTAssertEqual(yodifier.yodify("Достойному пилоту оставь ключ зажигания Сокола Тысячелетия."
- ), "Сокола Тысячелетия зажигания ключ оставь пилоту достойному.")
- XCTAssertEqual(yodifier.yodify("Нужен новый пилот Соколу Тысячелетия умелый."), "Умелый Соколу Тысячелетия пилот новый нужен.")
- XCTAssertEqual(yodifier.yodify("Хочу завладеть твоим Соколом Тысячелетия."), "Соколом Тысячелетия твоим завладеть хочу.")
- XCTAssertEqual(yodifier.yodify("О Соколе Тысячелетия слагают легенды."), "Легенды слагают Соколе Тысячелетия о.")
- XCTAssertEqual(
- yodifier.yodify(
- "Панцирь черепахи как покрывающий Сокол Тысячелетия слой грязи. Он тормозит твой корабль."
- ), "Грязи слой Сокол Тысячелетия покрывающий как черепахи панцирь. Корабль твой тормозит он."
- )
- XCTAssertEqual(
- yodifier.yodify("Голова Люка Скайуокера торчит из люка Сокола Тысячелетия."),
- "Сокола Тысячелетия люка из торчит Люка Скайуокера голова."
- )
- XCTAssertEqual(
- yodifier.yodify("Люку кабины нужна шторка. Только ситхи тонируют стекла."),
- "Шторка нужна кабины люку. Стекла тонируют ситхи только."
- )
- XCTAssertEqual(
- yodifier
- .yodify("Настало время твоего друга мохнатого соло."), "Соло мохнатого друга твоего время настало."
- )
- XCTAssertEqual(
- yodifier
- .yodify("Твой корабль прошлого тысячелетия безнадежно устарел."), "Устарел безнадежно тысячелетия прошлого корабль твой."
- )
- XCTAssertEqual(
- yodifier
- .yodify("Твой корабль прошлого тысячелетия безнадежно устарел."), "Устарел безнадежно тысячелетия прошлого корабль твой."
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement