华为OD机试真题2023_Swift_100_打印文件

// 打印文件
    func HW2023006() {
        var lineArr: [String] = []
        // 测试用例
//        lineArr = ["IN 1 1", "IN 1 2", "IN 1 3", "IN 2 1", "OUT 1", "OUT 2", "OUT 2"]
//        lineArr = ["IN 1 1", "IN 1 3", "IN 1 1", "IN 1 3", "OUT 1", "OUT 1", "OUT 1", "OUT 1", "OUT 1", "OUT 2"]
        // 开始代码
        let _ = readLine()
        while let line = readLine() {
            lineArr.append(String(line))
        }
        var tempC = 0 // 输入信息的计数,控制循环次数
        var inputDic:[String: [[Int]]] = [:] // 打印任务的嵌套字典,key:打印机编号 value:大数组里面包含了一个个小数组,每个小数组包含两个元素,第一个是优先级,第二个是输入的信息编号 从1开始编号的
        var index = 0 // 输入的信息编号初始值为0
        while tempC < lineArr.count {
            let temp: [String] = lineArr[tempC].components(separatedBy: " ") // 获取输入的一条条信息,并用空格切割
            if temp[0] == "IN" { // 如果第一个元素是IN,则表示输入信息
                index += 1 // 输入的信息编号+1,从1开始计数
                var inIns: [Int] = []
                var inList: [[Int]] = []
                inIns.append(Int(temp[2])!) // 将优先级添加进数组inIns
                inIns.append(index) // 将输入的信息编号添加进数组inIns
                if inputDic.keys.contains(temp[1]) { // 判断该打印机是否已经包含在字典中
                    // 如果包含拿出该打印机存对应在字典里的value值,并赋值给inList数组
                    inList = inputDic[temp[1]] ?? []
                    // 给inList数组在添加一条该打印机下新的任务信息
                    inList.append(inIns)
                }else {
                    // 直接给inList数组在添加一条该打印机下新的任务信息
                    inList.append(inIns)
                }
                // 将最新的inList数组信息更新到字典里的该打印机下
                inputDic.updateValue(inList, forKey: temp[1])
            }else if temp[0] == "OUT" { // 如果第一个元素是OUT,则表示输出信息
                if !inputDic.keys.contains(temp[1]) { // 判断该打印机信息是否包含在字典里
                    // 如果不包含,直接打印NULL
                    print("NULL")
                    tempC += 1 // 循环次数+1
                    continue // 跳出本次循环
                }
                // 如果包含,拿出该打印机的信息
                var outList: [[Int]] = inputDic[temp[1]] ?? []
                if outList.count == 0 { // 如果该打印机的信息是空数组直接打印NULL
                    print("NULL")
                }else {
                    // 如果有信息,则对信息进行排序
                    outList = outList.sorted { a, b in
                        if a[0] == b[0] {
                            // 如果优先级一样,输入的信息编号升序排列
                            return a[1] < b[1]
                        }else {
                            // 优先级降序排列
                            return a[0] > b[0]
                        }
                    }
                    
                    print(outList[0][1])  // 打印输入的信息编号
                    outList.removeFirst() // 移除已经被打印的信息
                    inputDic.updateValue(outList, forKey: temp[1]) // 将处理过的打印信息更新到字典里
                }
            }
            tempC += 1
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容