Ruby 如何在数组中找到丢失的字母

Ruby 如何在数组中找到丢失的字母,ruby,Ruby,给定一个字母数组arr=[“a”、“b”、“c”、“d”、“f”],我想构造一个数组,包含arr中最小和最大字母之间的所有字母(按ASCII值),这些字母不包含在arr中。这里是[“e”]。我怎样才能做到这一点呢?假设数组中的字母在“a”到“z”之间,并且按字母顺序排列,则可以获取数组的and元素: a = %w[a b c d f] (a.min..a.max).to_a - a # => ["e"] 并调用和检索所有连续字母的数组: all_letters = first_lett

给定一个字母数组
arr=[“a”、“b”、“c”、“d”、“f”]
,我想构造一个数组,包含
arr
中最小和最大字母之间的所有字母(按ASCII值),这些字母不包含在
arr
中。这里是
[“e”]
。我怎样才能做到这一点呢?

假设数组中的字母在“a”到“z”之间,并且按字母顺序排列,则可以获取数组的and元素:

a = %w[a b c d f]

(a.min..a.max).to_a - a # => ["e"]
并调用和检索所有连续字母的数组:

all_letters = first_letter.upto(last_letter).to_a
#=> ["a", "b", "c", "d", "e", "f"]
可用于通过以下方式计算与原始阵列的差异:

如果已知只有一个字母
e
,其中
sm
e
不是
arr
的元素,我们可以编写以下代码

((sm+lg)*(lg-sm+1)/2 - ascii.sum).chr
  #=> (597 - 496).chr => 101.chr => "e"
这是因为
sm..lg
表示算术级数;因此,其元素之和等于

(sm+lg)*(lg-sm+1)/2
  #=> 597 

定义“丢失的字母”。似乎类似于这个问题:我投票重新开放,但没有意识到我的投票会做那件事。该问题与前一个问题在两个方面不同:前一个问题有一个附加要求(即“缺失”元素必须是非负的),这里缺失的元素数量称为一,而不是(如前一个问题)任何数量(包括零)。例如,我的回答不适合前面的问题。GabeA,我可能用编辑更改了您的问题。标题表明,已知有一个“缺失”值,但我的编辑允许有任何数字。如果我弄错了,请编辑以更正(并接受我的道歉)。也许可以使用
给定的字母。minmax
。遗憾的是
minmax
不适合这里:
Range.new(*a.minmax)
看起来非常混乱。有趣的解决方案,尽管您对问题的编辑暗示可能有多个字母:“arr中未包含的所有字母[…]
ascii = arr.uniq.map(&:ord)
  #=> [97, 98, 99, 100, 102]
sm, lg = ascii.minmax
   #=> [97, 102]
((sm+lg)*(lg-sm+1)/2 - ascii.sum).chr
  #=> (597 - 496).chr => 101.chr => "e"
(sm+lg)*(lg-sm+1)/2
  #=> 597