Код Ката ー Способ тренировки

型かた:ката (установленная последовательность позиций и движений в боевых искусствах); стиль (в кабуки, но и др.); форма

Напишите функцию, которая принимает строку из одного или нескольких слов и возвращает ту же строку, но с перевернутыми всеми словами из пяти или более букв (точно так же, как имя этого Ката). Передаваемые строки будут состоять только из букв и пробелов. Пробелы будут включены только в том случае, если присутствует более одного слова.

Это ката о переворачивании определенных слов. Здоровый вызов. Попробуйте сами. Продолжать. Я вызываю вас. Это простое задание, поэтому, чтобы развлечься, засеките время и посмотрите, насколько быстро вы сможете проехать.



Первое, что я всегда делаю, это делаю быструю игровую площадку. Я хочу иметь возможность запускать попытки как можно быстрее, тем более что я не запомнил и половины всего синтаксиса swift.

Решение

И бламо. Это было немного легче, чем я надеялся. Это базовое программирование.

Дополнительный режим испытаний

Если у вас есть несколько лет опыта работы с кодом, эта ката — прогулка в парке. На самом деле немного проще, так как обычно мне требуется прогулка по парку, чтобы понять их. Это должно быть разминкой для мозга, поэтому давайте попробуем чему-нибудь научиться.

Функция map() в Swift

Функция карты — это одна из тех вещей, которые я игнорировал всю свою кодинговую жизнь. Поскольку я мог существовать без него, я никогда не давал своему мозгу должной порки и не заставлял его учиться. Пора наказать этого плохого мальчика.

Как работает функция карты? Сначала я погуглил. Потом я узнал. Функция карты является методом массива и принимает один аргумент. Этот аргумент является функцией. Он будет запускать эту функцию для каждого элемента в массиве и возвращать новый массив с этими результатами, собранными вместе.

func properize(name: String) -> String {
    return "Mr. " + name
}

let cats = ["Buttons", "Miruku", "Kochan", "Sunshine", "Patches"]

let fancyCats = cats.map(properize)
print(fancyCats) // ["Mr. Buttons", "Mr. Miruku", "Mr. Kochan", "Mr. Sunshine", "Mr. Patches"]

Более того, вы можете отображать с помощью замыканий, что означает, что вам не нужно писать ненужную функцию.

let cats = ["Buttons", "Miruku", "Kochan", "Sunshine", "Patches"]
let fancyCats = cats.map({ (name: String) -> String in
    return "Mr. " + name
})
print(fancyCats) // ["Mr. Buttons", "Mr. Miruku", "Mr. Kochan", "Mr. Sunshine", "Mr. Patches"]

Наконец, это можно свести к этому.

["Buttons", "Miruku", "Kochan", "Sunshine", "Patches"].map({"Mr. \($0)"})
// ["Mr. Buttons", "Mr. Miruku", "Mr. Kochan", "Mr. Sunshine", "Mr. Patches"]

Как видите, мы пропустили много кода. Нам не нужно указывать тип параметра, тип возвращаемого значения, имя параметра или писать оператор return.

Это сексуально. И нет ничего сексуальнее (включая тебя, Крис Эванс), чем написание сложного кода в одну строку. ИДК, это просто самая крутая вещь в мире. Так что это вызов. Превратите код SpinWords в одну строку.

Один лайнер

func spinWords(in sentence: String) -> String {
    String(sentence.components(separatedBy: " ").map({
        $0.count > 4 ? $0.reversed() + " " : $0 + " "
    }).joined().dropLast())
}

И вот мы идем. Впервые воспользовался функцией карты. Не хороший код. Но это щекочет мои нервы, поэтому я оставляю это. Очень рад видеть, насколько проста в использовании функция карты, и сожалею, что не изучил ее 10 лет назад. Но именно для этого и нужны эти Ката. Чтобы познакомить вас с новой средой и, таким образом, заставить вас учиться новым полезным вещам.

Проверьте предыдущую задачу, если вы хотите дать своему мозгу шесть кубиков. Если вы хотите больше испытаний, хлопайте, чтобы я знал, и я опубликую кучу.



P.S.

Я разорен, безработен и начинаю с нуля, пытаясь устроиться на работу iOS-разработчиком. Подпишитесь на мой блог, если вы хотите поддержать меня или если вы находитесь в одной лодке и хотите вместе достичь этой цели.

Спасибо за прочтение. Люблю тебя, увидимся позже. 🐶🇯🇵 さよなら