`
qingyujingyu427
  • 浏览: 27739 次
社区版块
存档分类
最新评论

google code jam practice problems

阅读更多

Problem description can be found here.

A. Alien Numbers

Follow is the solution:

    public String getTargetNumber(String alienNumber,String srcLang,String targetLang) {
        String ret = "";
        // convert alienNumber to decimal number first
        int decimalNumber = 0;     
        //the base of src language. 几进制
        int srcBaseNum = srcLang.length();
        //the base of target language.
        int targetBaseNum = targetLang.length();
        // alien number length
        int alienLen = alienNumber.length();
        
        //begin to calculate decimal number corresponding to alienNumber
        int i = alienLen;
        while(i>0) {
            decimalNumber += srcLang.indexOf(alienNumber.charAt(alienLen-i))*Math.pow(srcBaseNum,i-1);
            i--;
        }        
        
        //convert decimal number to target alien number system's nubmer
        // refer the information about how to convert decimal to binary or hex
        while(decimalNumber!=0) {
            int remainder = decimalNumber%targetBaseNum;
            decimalNumber = decimalNumber/targetBaseNum;
            ret = targetLang.charAt(remainder) + ret;
        }
        return ret;
    }
 

B. Always Turn Left

Follow is the solution:

public class AlwaysTurnLeft {

    Map<Integer,Integer> dict = new HashMap<Integer, Integer>();
    final int NORTH_VALUE = 1; //0001
    final int SOUTH_VALUE = 2; //0010
    final int WEST_VALUE = 4;  //0100
    final int EAST_VALUE = 8;  //1000
    
    final int NORTH =0;
    final int WEST = 1;
    final int SOUTH = 2;
    final int EAST = 3;
    
    public AlwaysTurnLeft() {
        dict.put(NORTH,NORTH_VALUE);
        dict.put(WEST,WEST_VALUE);
        dict.put(SOUTH,SOUTH_VALUE);
        dict.put(EAST,EAST_VALUE);
    }
    
    class Coordinate {
        public Coordinate() {            
        }
        public Coordinate(int _x, int _y) {
            x = _x;
            y = _y;
        }
        public int x;
        public int y;
    }
    
    int process(String path, int direction, List<Map<Integer,Integer>> mazeInfo, Coordinate curCoor) { 
        char[] arr = path.toCharArray();
        for(int i=1;i<arr.length-1;i++) {
            if(mazeInfo.size()<=curCoor.x) {
                mazeInfo.add(new HashMap<Integer,Integer>());
            }
            Map<Integer,Integer> rowMap = mazeInfo.get(curCoor.x);
            if(rowMap.get(curCoor.y)==null) {
                rowMap.put(curCoor.y,0);
            }
            int cellInfo = rowMap.get(curCoor.y);
            char c = arr[i];
            switch(c) {                
                case 'W':  
                    int toAddValue = dict.get(direction);       
                    if(cellInfo/toAddValue%2==0) {
                        rowMap.put(curCoor.y,cellInfo+toAddValue);
                    }
                    switch(direction) {                        
                        case NORTH: curCoor.x--; break;
                        case WEST: curCoor.y--; break;
                        case SOUTH: curCoor.x++; break;
                        case EAST: curCoor.y++; break;
                    }
                    break;
                case 'R':
                    direction--;
                    break;
                case 'L':
                    direction++;
                    break;
            }            
            direction += 4;
            direction %= 4;            
        }
        return direction;
    }
    
    public List<String> getMazeInfo(String entrance_to_exit, String exit_to_entrance) {  
        // At begin, the direction is SOUTH.
        int direction = SOUTH;
        // mazeInfo represent information for maze
        // Map<Integer, Integer> 
        // key is maze column index(maybe a negative number, because the entrance is at [0,0].).
        // value represents information for all directions that current cell can walk to.
        List<Map<Integer,Integer>> mazeInfo = new ArrayList<Map<Integer,Integer>>();
        // add information for entrance.
        mazeInfo.add(new HashMap<Integer,Integer>());
        mazeInfo.get(0).put(0,0);
        Coordinate curCoor = new Coordinate(0,0);
        
        List<String> ret = new ArrayList<String>();     
        // process path for entrance to exit
        direction = process(entrance_to_exit,direction,mazeInfo,curCoor);
        // for entrance cell, add north possibility
        mazeInfo.get(0).put(0,mazeInfo.get(0).get(0)+NORTH_VALUE);
        // for exit cell, add corresponding direction possibility. should add information for exit first.
        if(mazeInfo.size()<=curCoor.x) {
            mazeInfo.add(new HashMap<Integer,Integer>());
        }
        if(mazeInfo.get(curCoor.x).get(curCoor.y)==null) {
            mazeInfo.get(curCoor.x).put(curCoor.y,0);
        }
        mazeInfo.get(curCoor.x).put(curCoor.y,mazeInfo.get(curCoor.x).get(curCoor.y)+dict.get(direction));
        // turn right twice(180 degrees clockwise)
        direction += 2;
        direction %= 4;
        //process path for exit to entrance
        direction = process(exit_to_entrance,direction,mazeInfo,curCoor);
        for(Map<Integer,Integer> m : mazeInfo) {
            SortedSet<Integer> keySet = new TreeSet<Integer>(m.keySet());   
            StringBuilder sb = new StringBuilder();
            for(Integer key : keySet) {    
                sb.append(Integer.toHexString(m.get(key)));
            }
            ret.add(sb.toString());
        }
        return ret;
    }
    
    
    public static void main(String args[]) throws Exception {
        AlwaysTurnLeft t = new AlwaysTurnLeft();
        List<String> list = t.getMazeInfo("WWRWLWLWRRWLWLWRRWLWWLWLWRRWWWWRRWLWLWRRWRWLWLWRRWLWLWRWWWWRWLWLWW","WWLW");
        for(String s : list) {
            System.out.println(s);
        }
    }
}
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style> <style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>
分享到:
评论

相关推荐

    Google_code_jam.rar_Google jam_google code jam_google code jam j

    Google Code Jam是谷歌举办的一项全球性的编程竞赛,旨在挑战参赛者的算法设计和问题解决能力。这个压缩包"Google_code_jam.rar"包含了某位参赛者对Google Code Jam比赛中的问题的解决方案。从标签"google_jam"、...

    Google code jam - World Finals 2017-Problem A. Dice Straight

    抱歉,CSDN目前无法设置免费资源,感兴趣的话在我博客下留言,我可以用邮件发给你。 Small input of Google code jam - World Finals 2017-Problem A. Dice Straight

    google code jam

    google code jam

    google codejam2014

    google codejam2014源代码

    GCJ.rar_code jam_google code jam

    《GCJ.rar_code jam_google code jam》是2008年Google Code Jam第三轮网络竞赛的编程代码资源,其中包含了lym和windy两位顶尖程序员的解决方案。这个压缩包是编程爱好者和参赛者宝贵的参考资料,它揭示了在解决算法...

    SQL Practice Problems

    It's easy to find basic SQL syntax and keyword information online. What's hard to find is challenging, well... It contains challenging problems, which develop your ability to write high quality SQL code.

    google_codejam:Google Codejam挑战的代码

    【Google Codejam:全球顶尖编程挑战的深度剖析】 Google Codejam是谷歌主办的一项年度国际级编程竞赛,旨在挑战参赛者解决复杂算法问题的能力。自2003年起,这个比赛吸引了世界各地的编程爱好者和专业人士参与,它...

    google code jam Qualification Round 2011题解 参考源码

    自己写的源码,希望各位看官指出不足之处,好交流进步

    CodeJam:Google Code Jam 练习题的解决方案

    Google Code Jam 练习题的解决方案 在与给定问题具有相同标题的 java 类中找到解决方案。 在这一点上,所有解决方案都针对在明确提到的作为良好起点的问题 每个解决方案都需要从命令行运行一个参数,一个包含问题...

    google_codejam_stats:用于检查Google Code Jam轮次统计信息的网站

    Google Code Jam统计用于检查Google Code Jam轮次统计信息的网站为什么? 已经有一些很棒的网站(例如和 ),但它们仅提供截至2017年的数据。该网站使用于2018年推出的新Google Competitions API来收集并显示有关...

    Code of Practice for Project Management for Development(5th) 无水印原版pdf

    Code of Practice for Project Management for Construction and Development(5th) 英文无水印原版pdf 第5版 pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自...

    code-jam:Google Code Jam 解决方案

    【Google Code Jam】是Google主办的一项全球性的编程竞赛,旨在挑战程序员解决算法问题的能力。参赛者需要编写程序来解决一系列逐步增加难度的编程问题。这个压缩包“code-jam-master”很可能包含了一些参赛者或爱好...

    GoogleCodeJam:我的Google Code Jam旅程

    我的Google Code Jam旅程记录我的GCJ旅程的回购。 每年更新。 年日期圆形的结果评论2020年5月2日1C2020年4月20日1B数学太多2020年4月11日1A2020年4月4日资质做得好2019年5月4日1C搞砸了2019年4月28日1B需要更多练习...

    BS 6349-1-3:2021 General Code of practice for geotechnical desig

    BS, EN 6349-1-3-2021 General — Code of practice for geotechnical design.pdf

    codejam:解决Code Jam 2021及更早版本的问题的解决方案

    这个资料库包含我在2021年之前解决Google Code Jam竞赛问题的解决方案,无论是在竞赛期间提交还是经过深思熟虑。 源代码使用Java,每个源文件都包含对所用算法的描述。 src目录中的Java软件包包含按Code Jam版本和...

    Codejam:我的 Google Codejam 解决方案

    《Google Codejam:JavaScript实战解析》 Google Codejam,一项全球知名的编程竞赛,吸引着无数程序员挑战自我,提升技能。本篇文章将深入探讨如何利用JavaScript解决Codejam中的问题,通过具体的实战案例,揭示...

    Code-Jam-practice

    【标题】"Code-Jam-practice" 指的是一系列针对Google Code Jam竞赛的练习项目。Google Code Jam是全球知名的一项编程竞赛,旨在挑战参赛者的算法设计和问题解决能力。参与者需要用编程语言来解决一系列复杂的逻辑和...

    google-codejam-2015:我为 Google Code Jam 2015 所做的一切

    在本文中,我们将深入探讨与"Google Code Jam 2015"相关的编程挑战和解决方案,特别是使用Java语言。Google Code Jam是谷歌主办的一项全球性的编程竞赛,旨在测试参赛者解决算法问题的能力和编程技巧。2015年的比赛...

    googlecodejam:我的Google Code Jam解决方案

    googlecodejam 我的Google Code Jam解决方案内容(比赛中的结果)-当前20 质量: Reversort(正确)-已解决月亮和雨伞(正确,正确,吗?)-已解决| 不是测试用例3 Reversort Engineering(正确,错误的答案)-特定...

    codejam:编码竞赛的随机解决方案,例如 Google codejam

    Google Codejam 是一项全球知名的编程竞赛,由 Google 主办,旨在挑战参赛者解决算法和编程问题的能力。这个压缩包文件 "codejam-master" 很可能包含了一组参赛者或爱好者为准备 Codejam 比赛而编写的解决方案集合。...

Global site tag (gtag.js) - Google Analytics