Untitled
unknown
swift
a year ago
1.5 kB
8
Indexable
import Foundation
enum SolutionError: String, Error {
case characterError = "Please provide only 0 or 1"
case convertStringError = "Can't convert string to int"
case intValueNotAllowable = "Converted binary string is not allowable"
}
final class SolutionHelper {
static func containsOnlyBinaryCharacters(_ input: String) -> Bool {
let binaryCharacterSet = CharacterSet(charactersIn: "01")
return input.unicodeScalars.allSatisfy { binaryCharacterSet.contains($0) }
}
static func convertBinaryStringToInt(value: String) -> Int? {
guard let value = Int(value, radix: 2) else {
return 0
}
return value
}
static func isIntAllowable(value: Int) -> Bool {
value >= 1 && value <= 1_000_000
}
}
public func solution(_ S : inout String) throws -> Int {
guard SolutionHelper.containsOnlyBinaryCharacters(S) else {
throw SolutionError.characterError
}
guard var value = SolutionHelper.convertBinaryStringToInt(value: S) else {
throw SolutionError.convertStringError
}
guard SolutionHelper.isIntAllowable(value: value) else {
throw SolutionError.intValueNotAllowable
}
var operations = 0
while value > 0 {
if value % 2 == 0 {
value /= 2
} else if value % 2 != 0 {
value -= 1
}
operations += 1
}
return operations
}
var str = "1111010101111"
print(try solution(&str))
Editor is loading...
Leave a Comment