• + 0 comments

    Swift

    func encryption(s: String) -> String {
        let strLength = s.count
        let squareRootOfLength = Double(strLength).squareRoot()
        let columnCount = Int(ceil(squareRootOfLength))
        var grid = [[Character]]()
        var encodedString = ""
        
        var columnNumber = 0
        var row = [Character]()
        
        //Creating grid
        for charactor in s {
            if columnNumber < columnCount {
                row.append(charactor)
                columnNumber += 1
            }else{
                grid.append(row)
                row.removeAll()
                row.append(charactor)
                columnNumber = 1
            }
        }
        grid.append(row)
        
        //Creating encoded string by reading the grid
        for columnNumber in 0...columnCount - 1 {
            for row in grid {
                guard columnNumber < row.count else {
                    break
                }
                encodedString += String(row[columnNumber])
            }
            encodedString  += columnNumber < columnCount ? " " : ""
        }
        
        return encodedString
    }