google code jam exercise——File Fix It

前几天一直卡在Making Chess Board那道题上,目前还没有完全解决,打算先跳过。这次是Round 1B 2010的第一道题,还算比较简单,具体如下。

在Linux系统中,创建文件夹需要使用mkdir,如果父文件夹不存在则需要先创建父文件夹,题目先给出一组已经创建的文件路径,然后给出一组需要创建的文件路径,计算最少的mkdir的次数。当然,没有使用mkdir -p。

直接的想法就是,对已经创建的路径进行hash,放入dict,所以读取一个已经创建的路径的时候,先查看整个路径是否已经在dict中,如果不在,将其添加到dict中,剥掉最后一层,继续检查路径是否在dict中,如果在,则结束。

同样地,创建给出的文件路径时,先检查整个路径,然后一层一层的剥掉。如果不存在,则mkdir加1.

用什么做dict的key呢?如何剥掉最后一层呢?

这里使用os.path.girname(path),返回path去掉最后一层的值,跟/有关,总是去掉最后一个/及其后面的字符串,到最后留下根目录/。所以一开始需要将/加入dict中。path始终是字符串,可以做dict的key。

代码如下:

复制代码
#!/usr/bin/python
#encoding:UTF-8
#Filename:FileFixIt.py

import sys
import os

inname = "input.txt"
outname = "output.txt"
if len(sys.argv)>1:
    inname = sys.argv[1]
    outname = inname.rstrip(".in")
    outname = outname + ".out"
fin = open(inname,"r")
fout = open(outname,"w")

testCaseNum = int(fin.readline().rstrip("\n"))
caseNum = 0

for caseNum in xrange(1,testCaseNum+1):
    (createdNum,toCreateNum)=[int(val) for val in fin.readline().rstrip("\n").split()]
    createdDict = dict()
    createdDict["/"] = 1
    for i in range(createdNum):
        line = fin.readline().rstrip("\n")
        while(1):
            if line not in createdDict:
            #    print "not in dict",line
                createdDict[line] = 1
                line = os.path.dirname(line)
            else:
                break
    mkdirCnt = 0
    for i in xrange(toCreateNum):
        line = fin.readline().rstrip("\n")
        while(1):
            if line not in createdDict:
            #    print "not in dict",line
                createdDict[line] = 1
                line = os.path.dirname(line)
                mkdirCnt = mkdirCnt + 1
            else:
                break

    answer = "Case #%d: %d\n" %(caseNum,mkdirCnt)
    fout.write(answer)

fin.close()
fout.close()
复制代码

最后small和large case测试都通过了。

 

posted @   Frandy.CH  阅读(268)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示