Threebody1 发表于 2023-7-18 22:27:06

Codewars——Take a Ten Minutes Walk问题

https://www.codewars.com/kata/54da539698b8a2ad76000228/train/python

题目:

You live in the city of Cartesia where all roads are laid out in a perfect grid. You arrived ten minutes too early to an appointment, so you decided to take the opportunity to go for a short walk. The city provides its citizens with a Walk Generating App on their phones -- everytime you press the button it sends you an array of one-letter strings representing directions to walk (eg. ['n', 's', 'w', 'e']). You always walk only a single block for each letter (direction) and you know it takes you one minute to traverse one city block, so create a function that will return true if the walk the app gives you will take you exactly ten minutes (you don't want to be early or late!) and will, of course, return you to your starting point. Return false otherwise.

Note: you will always receive a valid array containing a random assortment of direction letters ('n', 's', 'e', or 'w' only). It will never give you an empty array (that's not a walk, that's standing still!).

翻译:

你住在笛卡尔市,那里的所有道路都以完美的网格布局。你比约定的时间早到了十分钟,所以你决定趁这个机会去散散步。该市在其手机上为市民提供了步行生成应用程序 - 每次您按下按钮时,它都会向您发送一系列代表步行方向的单字母字符串(例如 ['n', 's', 'w', 'e'])。您总是为每个字母(方向)仅步行一个街区,并且您知道穿过一个城市街区需要一分钟,因此创建一个函数,如果应用程序为您提供的步行将花费您整整十分钟(您不想早或晚!)并且当然会带您回到起点。否则返回 false。

注意:您将始终收到一个包含随机组合的方向字母(仅“n”、“s”、“e”或“w”)的有效数组。它永远不会给你一个空数组(这不是散步,而是静止不动!)。

My Code:

def is_valid_walk(walk):
    return len(walk) == 5


根据题意,

...exactly ten minutes (you don't want to be early or late!)...
...and will, of course, return you to your starting point...

一个街区 1 分钟,那么要 10 分钟并且来回就是 5 个街区,我用 len() 取长度没错啊

可却没通过一个点

isdkz 发表于 2023-7-18 22:27:07

本帖最后由 isdkz 于 2023-7-18 22:30 编辑

你的理解有一些误解。题目的意思是,你需要在10分钟内走完完整的一圈,然后返回到起点。换句话说,你需要在10分钟内走10个街区,而不是5个。你的方向必须要平衡,也就是说,向北走的次数要和向南走的次数相同,向西走的次数要和向东走的次数相同,这样你才能回到起点。

这是一个可能的解决方案:

def is_valid_walk(walk):
    if len(walk) != 10:
      return False
    return walk.count('n') == walk.count('s') and walk.count('e') == walk.count('w')


首先,我们检查walk的长度是否为10,如果不是,则直接返回False 。然后,我们检查向北走的次数和向南走的次数是否相等,向东走的次数和向西走的次数是否相等,只有当这两个条件都满足时,我们才能返回到起点,函数才返回True 。否则,返回False 。

这个解决方案的核心思路是,我们需要确保walk的长度恰好为10,这样我们才能在10分钟内完成行走。而且我们需要确保我们向每个方向走的次数相等,这样我们才能回到起点。

Threebody1 发表于 2023-7-18 22:30:38

isdkz 发表于 2023-7-18 22:27
你的理解有一些误解。题目的意思是,你需要在10分钟内走完完整的一圈,然后返回到起点。换句话说,你需要在 ...


def is_valid_walk(walk):
    c = walk.count
    return len(walk) == 10 and (c('n')==c('s')) and (c('w')==c('e'))

sfqxx 发表于 2023-7-18 23:06:31

真.抵制AI

歌者文明清理员 发表于 2023-7-18 23:20:56

sfqxx 发表于 2023-7-18 23:06
真.抵制AI

{:10_277:}
页: [1]
查看完整版本: Codewars——Take a Ten Minutes Walk问题