// 打印文件
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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。