难以让readLine()在HackerRank上按需运行

时间:2017-02-03 13:28:06

标签: swift readline

我正在尝试提交30天代码的HackerRank Day 6 Challenge

我能够在Xcode Playground中完成任务而没有问题,但是HackerRank的网站说我的方法没有输出。我昨天遇到了一个问题,因为浏览器出现了问题,但清理缓存,从Safari切换到Chrome等似乎无法解决我在这里遇到的问题。我认为我的问题在于inputString

  

任务   给定长度为N且从0到N-1索引的字符串S,将其偶数索引和奇数索引字符打印为单行上的2个以空格分隔的字符串(有关详细信息,请参阅下面的示例)。 / p>      

输入格式

     

第一行包含一个整数(测试用例的数量)。   后续行的每一行都包含一个String,。

     

约束

     
      
  • 1 <= T <= 10
  •   
  • 2 <= S的长度&lt;万
  •   
     

输出格式

     

对于每个String(其中0&lt; = j&lt; = T-1),打印S的偶数索引字符,后跟空格,后跟S的奇数索引字符。

这是我提交的代码:

import Foundation

let inputString = readLine()!

func tweakString(string: String) {
    // split string into an array of lines based on char set
    var lineArray = string.components(separatedBy: .newlines)

    // extract the number of test cases
    let testCases = Int(lineArray[0])

    // remove the first line containing the number of unit tests
    lineArray.remove(at: 0)

    /*
    Satisfy constraints specified in the task
     */
    guard lineArray.count >= 1 && lineArray.count <= 10 && testCases == lineArray.count else { return }

    for line in lineArray {
        switch line.characters.count {
        // to match constraint specified in the task
        case 2...10000:
            let characterArray = Array(line.characters)
            let evenCharacters = characterArray.enumerated().filter({$0.0 % 2 == 0}).map({$0.1})
            let oddCharacters = characterArray.enumerated().filter({$0.0 % 2 == 1}).map({$0.1})

            print(String(evenCharacters) + " " + String(oddCharacters))
        default:
            break
        }
    }
}

tweakString(string: inputString)

我认为我的问题在于inputString。我正在“按原样”接受它并在我的方法中格式化它。我已经为第6天找到了解决方案,但我似乎无法在Swift中找到任何解决方案。

感谢您的阅读。我欢迎有关如何让这件事过去的想法。

2 个答案:

答案 0 :(得分:1)

readLine()从标准输入中读取单行 表示您的inputString仅包含第一行 输入数据。你必须在一个循环中调用readLine()来获取 剩余的输入数据。

所以你的程序看起来像这样:

func tweakString(string: String) -> String {
    // For a single input string, compute the output string according to the challenge rules ...
    return result
}

let N = Int(readLine()!)! // Number of test cases

// For each test case:
for _ in 1...N {
    let input = readLine()!
    let output = tweakString(string: input)
    print(output)
}

(强制展开是可以接受的,因为格式为 输入数据记录在挑战描述中。)

答案 1 :(得分:1)

嗨,阿德里安,你应该每行打电话readLine()!。这里是该挑战的一个示例答案;

import Foundation

func letsReview(str:String){
    var evenCharacters = ""
    var oddCharacters = ""
    var index = 0
    for char in str.characters{
        if index % 2 == 0 {
            evenCharacters += String(char)
        }
        else{
            oddCharacters += String(char)
        }
        index += 1
    }
    print (evenCharacters + " " + oddCharacters)
}

let rowCount = Int(readLine()!)!

for _ in 0..<rowCount {
    letsReview(str:String(readLine()!)!)
}