Код Ката ー Способ тренировки
型かた:ката (установленная последовательность позиций и движений в боевых искусствах); стиль (в кабуки, но и др.); форма
Напишите функцию, которая принимает строку из одного или нескольких слов и возвращает ту же строку, но с перевернутыми всеми словами из пяти или более букв (точно так же, как имя этого Ката). Передаваемые строки будут состоять только из букв и пробелов. Пробелы будут включены только в том случае, если присутствует более одного слова.
Это ката о переворачивании определенных слов. Здоровый вызов. Попробуйте сами. Продолжать. Я вызываю вас. Это простое задание, поэтому, чтобы развлечься, засеките время и посмотрите, насколько быстро вы сможете проехать.
Первое, что я всегда делаю, это делаю быструю игровую площадку. Я хочу иметь возможность запускать попытки как можно быстрее, тем более что я не запомнил и половины всего синтаксиса 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-разработчиком. Подпишитесь на мой блог, если вы хотите поддержать меня или если вы находитесь в одной лодке и хотите вместе достичь этой цели.
Спасибо за прочтение. Люблю тебя, увидимся позже. 🐶🇯🇵 さよなら