博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codewars069 饥饿游戏:动物园的灾难!
阅读量:7031 次
发布时间:2019-06-28

本文共 4025 字,大约阅读时间需要 13 分钟。

hot3.png

Instructions 说明

Story.

A freak power outage at the zoo has caused all of the electric cage doors to malfunction and swing open... All the animals are out and some of them are eating each other! It's a Zoo Disaster! Here is a list of zoo animals, and what they can eat

  • antelope eats grass
  • big-fish eats little-fish
  • bug eats leaves
  • bear eats big-fish
  • bear eats bug
  • bear eats chicken
  • bear eats cow
  • bear eats leaves
  • bear eats sheep
  • chicken eats bug
  • cow eats grass
  • fox eats chicken
  • fox eats sheep
  • giraffe eats leaves
  • lion eats antelope
  • lion eats cow
  • panda eats leaves
  • sheep eats grass

Sample Tests 测试样例:

import org.junit.Test;import static org.junit.Assert.assertArrayEquals;public class ExampleTest {  @Test  public void example() {        final String input = "fox,bug,chicken,grass,sheep";    final String[] expected = 	{      "fox,bug,chicken,grass,sheep",       "chicken eats bug",       "fox eats chicken",       "sheep eats grass",       "fox eats sheep",       "fox"};    assertArrayEquals(expected, Dinglemouse.whoEatsWho(input));  }@Test  public void example2() {        final String input = "bear,banana,banana,grass,busker,panda,antelope,giraffe,cow,big-fish,banana,sheep,grass,lion";    final String[] expected = 	{      "bear,banana,banana,grass,busker,panda,antelope,giraffe,cow,big-fish,banana,sheep,grass,lion",       "sheep eats grass",       "bear,banana,banana,grass,busker,panda,antelope,giraffe,cow,big-fish,banana,sheep,lion"};    assertArrayEquals(expected, Dinglemouse.whoEatsWho(input));  }}

Solution 解决方案:

//https://www.codewars.com/kata/5902bc7aba39542b4a00003d/train/javaimport java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Dinglemouse {	private static Map
map = new HashMap
(); static { map.put("antelope", "grass"); map.put("big-fish", "little-fish"); map.put("bug", "leaves"); map.put("bear", "big-fish,bug,chicken,cow,leaves,sheep"); map.put("chicken", "bug"); map.put("cow", "grass"); map.put("fox", "chicken,sheep"); map.put("giraffe", "leaves"); map.put("lion", "antelope,cow"); map.put("panda", "leaves"); map.put("sheep", "grass"); } private static String canEatLeftOrRight(String subject, String left, String right) { String result = canEat(subject, left); if (result.equals("")) { return canEat(subject, right); } return result; } private static String canEat(String subject, String object) { if (!map.containsKey(subject) || "".equals(object)) { return ""; } if (map.get(subject).indexOf(object) != -1) { return String.format("%s eats %s", subject, object); } return ""; } private static StringBuffer reduce(String[] arr, int subject, String left, String right, String rule) { String target = rule.split(" ")[2]; int purge = -1; if (target.equals(left)) { purge = subject - 1; } if (target.equals(right)) { purge = subject + 1; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { if (i != purge) { sb.append(arr[i]).append(","); } } int len = sb.length(); if (sb.charAt(len - 1) == ',') { sb.deleteCharAt(len - 1); } return sb; } public static String[] whoEatsWho(final String zoo) { List
list = new ArrayList
(); list.add(zoo); StringBuffer sb = new StringBuffer(zoo); boolean reduceable = true; Label: while (reduceable) { String[] arr = sb.toString().split(","); if (arr.length < 2) { break; } for (int i = 0; i < arr.length; i++) { String subject = arr[i]; String left = i > 0 ? arr[i - 1] : ""; String right = i < arr.length - 1 ? arr[i + 1] : ""; String check = canEatLeftOrRight(subject, left, right); if (!check.equals("")) { list.add(check); sb = reduce(arr, i, left, right, check); break; } if (i == arr.length - 1) { reduceable = false; break Label; } } } list.add(sb.toString()); return list.toArray(new String[0]); // return new String[]{zoo, zoo}; }}

转载于:https://my.oschina.net/u/553266/blog/1358464

你可能感兴趣的文章
[AVR]高压并行编程---基础知识
查看>>
inl文件介绍
查看>>
前端坑--表单篇
查看>>
P2P原理基础
查看>>
完成登录功能,用session记住用户名
查看>>
DBCP和C3P0使用--未完善
查看>>
JS常用方法(获取Class、获取元素样式、事件监听、cookie、ajax等)
查看>>
BZOJ 1084 最大子矩阵
查看>>
2018杭电多校第三场1007(凸包,极角排序)
查看>>
django中orm的简单操作
查看>>
Mybatis知识(1)
查看>>
[CentOS] 7 不执行文件 /etc/rc.d/rc.local
查看>>
模态窗口的各个属性
查看>>
10.28 (上午) 开课一个月零二十四天 (数据访问)
查看>>
为什么你应该(从现在开始就)写博客
查看>>
小技巧积累
查看>>
Java JDBC链接Oracle数据库
查看>>
Moss2010 部署命令
查看>>
Git 操作分支
查看>>
Grid search in the tidyverse
查看>>