Из кода строчки не выкинешь

Достоин ли ты работать в Альфа-банке? Пройди тест на минимальные правки!

Искать ошибки в коде — одно из важных умений программиста. В нашем совместном с Альфа-банком проекте читателям предлагается замечательный тест в специальном жанре: задачи на минимальное исправление ошибок. Что это такое? Перед вами есть код, он работает, но работает неправильно. Чтобы его исправить, его нужно поправить совсем чуть-чуть, а именно: переименовать один символ, поменять два символа в внутри одной строки местами или поменять местами две строки кода. То есть, по сути, никакого нового кода писать не надо — только манипулировать с уже имеющимся, да и то совсем немного. Как и в случае нашего прошлого теста с Альфа-банком, в конце вы можете оставить почту. Лучших пригласят на собеседование.

Правила теста просты: перед вами семь карточек с кодом и поле, куда нужно вписать ответ.  Как уже говорилось, все задачи на минимальное исправление, то есть нужно либо переименовать один символ в одной строке, либо поменять два символа местами в одной строке, либо поменять местами две строки.

Предположим, вы нашли строку, которую хотите исправить. Например:

1 правильно процитируйте пыхтелку из «Винни-Пуха»
2 если я чешу в затылке
3 не беда
4 в голове моей опилке
5 да-да-да!

Тогда в поле ответа вы пишете правильную версию строки (с исправленным символом или переставленными местами символами):

4: в голове моей опилки

Обратите внимание, что после номера строки, в которую вы вносите изменения, ставится двоеточие и пробел. Теперь что делать, если вы хотите поменять две строки местами. Например:

1 правильно процитируйте пыхтелку из «Винни-Пуха»
2 мишка очень любит мед
3 в самом деле почему
4 почему, кто поймет
5 мед так нравится ему

Тогда в поле ответа вы пишете так:
3: почему, кто поймет
4: в самом деле, почему

Снова заметьте, что после номера строки идет двоеточие, а строки разделены переносом строки. А, и еще: если строчки кода не помещаются в окошко, ничего страшного: его можно скролить вправо. Ну вот, кажется, и все. Вы готовы к испытаниям, можете приступать.



// Нужно найти минимальный элемент в массиве.
// Сейчас всегда выдает очень большое число

func min(_ array: [Int]) -> Int {
    var minElement = Int.max

    for i in 0 ..< array.count {
        if (array[i] > minElement) {
            minElement = array[i]
        }
    }

    return minElement
}
// Степень тройки

func isPowerOfThree(_ n: Int) -> Bool {
    if n <= 0 {
        return false
    }

    var m = n

    while m % 3 == 0  {
        m /= 3
    }

    return n == 1
}
// Метод должен сортировать строку по возрастанию( abcde...z )
// Сейчас сортирует по убыванию

- (NSString *)sortedString:(NSString *)inputString {
   NSMutableArray *charArray = [NSMutableArray new];

   for (int i = 0; i < inputString.length; ++i) {
       [charArray addObject:[NSString stringWithFormat:@"%c", [inputString characterAtIndex:i]]];
   }

   NSString *resultString = [[charArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj2, id  _Nonnull obj1) {
       return [obj1 compare:obj2];
   }] componentsJoinedByString:@""];

   return resultString;
}
// Ищем, содержит ли массив повторяющиеся значения
// Сейчас не работает

func containsDuplicate(_ nums: [Int]) -> Bool {
    var set = Set<Int>()

    for num in nums {
        if (set.insert(num).inserted == false) {
            return false
        }
    }
    return true
}
// Нужно развернуть строку. 
// Сейчас из строки abcd получается строка dccd.

func reverseString(_ s: String) -> String {
    var helperString = Array(s.characters)
    let length = s.characters.count

    for i in 0 ..< (length / 2) {
        let rightIndex = length - i - 1
        let tmp = helperString[rightIndex]

        helperString[i] = tmp
        helperString[rightIndex] = helperString[i]
    }

    return String(helperString)
}
// Найти длину самой длинной увеличивающейся подпоследовательности.

func lengthOfLIS(_ nums: [Int]) -> Int {
    var lengths = [Int](repeatElement(1, count: nums.count))
    var maxLength = 0

    for i in 0 ..< nums.count {
        for j in 0 ..< i {
            if (nums[j] < nums[i]) {
                lengths[i] = max(lengths[i] + 1, lengths[j])
            }
        }
        maxLength = max(maxLength, lengths[i])
    }

    return maxLength
}
// Найти длину самой длинной подстроки без повторяющихся символов.

func lengthOfLongestSubstring(_ s: String) -> Int {
    let n = s.characters.count
    let charsString = s.utf8CString

    var set = Set<String>()
    var i = 0
    var j = 0
    var answer = 0

    while i < n && j < n {
        let currentCharRight = String(charsString[j])
        let currentCharLeft = String(charsString[i])

        if (set.contains(currentCharRight) == false) {
            set.insert(currentCharRight)
            answer = max(answer, j - i + 1)
            i += 1
        } else {
            set.remove(currentCharLeft)
            j += 1
        }
    }

    return answer
}

Поделиться результатами

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.