数字频率
#python #perl #theweeklychallenge

每周挑战194

abaoqian1,My solutions

任务1:数字时钟

任务

您的时间为Gormat hh:mm,一个丢失的数字。

编写一个脚本以找到使其有效时间的0-9之间的最高数字。

我的解决方案

这相对直接。以下规则适用。

  • 如果缺少第一个数字,则将是“ 2”,如果第二个数字为3或以下(为20至23),否则将是一个(14至19)。
  • 如果缺少第二个数字,则如果第一个数字为2,则将为“ 3”,否则将是一个。
  • 如果缺少第三个数字,答案将为五个(为50至59)。
  • 如果丢失了最后一个数字,答案将为九个(为09、19,...,59)。

例子

 ./ch-1.py ?5:00
1

$ ./ch-1.py ?3:00
2

$ ./ch-1.py 1?:00
9

$ ./ch-1.py 2?:00
3

$ ./ch-1.py 12:?5
5

$ ./ch-1.py 12:5?
9

任务2:频率均衡器

任务

您只为字母字符制成的字符串,a-z

编写一个脚本以确定仅删除一个字符是否可以使其余字符的频率相同。

我的解决方案

我担心我已经过度设计了这项任务。一个更容易的选择可能是一个一个一个数字,看看结果字符串是否符合条件。

  1. 第一步是计算每个字母的频率。这存储在letter_freq dict(perl中的哈希)中。关键是字母,值是该字母的发生数量。
  2. 下一步是计算频率的频率。这存储在freq dict中。关键是频率,值是发生频率的次数。
  3. 我们知道,只有一个可能的解决方案是freq dict中只有2个值。
  4. i然后找到(数值)最小和最大频率值,并分别将其存储为min_freqmax_freq。仅当以下一个是正确的时,才能找到解决方案:
    • 最小频率为1,一次发生一次。删除该信件意味着其余的字母都将发生相同的。
    • 最小值和最大值之间的差异为1,较高的值发生一次。删除额外的字母意味着所有字母都具有相同的频率。
  5. 然后,当我写博客文章时,我意识到还有另一种情况。如果所有字母仅出现一次,则删除任何字母意味着其余字符也只出现一次。正是在这一点上,我知道我可能找到了解决这一挑战的错误技术。

例子

$ ./ch-2.py abbc
1

$ ./ch-2.py xyzyyxz
1

$ ./ch-2.py xzxz
0