gpt4 book ai didi

Ruby 与扫描字符串的长度不一致的结果

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:47 25 4
gpt4 key购买 nike

我在这里可能没有完整的图片,但我得到的计算结果不一致:我正在尝试解决游程编码问题,这样如果你得到一个像“AAABBAAACCCAA”这样的输入字符串,编码将是:“3A2B3A3C2A"所以函数是:

def encode(input)
res = ""
input.scan(/(.)\1*/i) do |match|
res << input[/(?<bes>#{match}+)/, "bes"].length.to_s << match[0].to_s
end
res
end

我得到的结果是:

irb(main):049:0> input = "AAABBBCCCDDD"
=> "AAABBBCCCDDD"
irb(main):050:0> encode(input)
(a) => "3A3B3C3D"
irb(main):051:0> input = "AAABBBCCCAAA"
=> "AAABBBCCCAAA"
irb(main):052:0> encode(input)
(b) => "3A3B3C3A"
irb(main):053:0> input = "AAABBBCCAAA"
=> "AAABBBCCAAA"
irb(main):054:0> encode(input)
(c) => "3A3B2C3A"
irb(main):055:0> input = "AAABBBCCAAAA"
=> "AAABBBCCAAAA"
irb(main):056:0> encode(input)
(d) => "3A3B2C3A"
irb(main):057:0> input = 'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB'
=> "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB"
irb(main):058:0> encode(input)
(e) => "12W1B12W1B12W1B"

如您所见,结果 (a) 到 (c) 是正确的,但结果 (d) 和 (e) 缺少一些重复项,并且生成的代码短了几个字母,您能否提示在哪里请检查? (我现在正在学习使用“ pry ”)

最佳答案

正则表达式很棒,但它们并不是解决所有问题的金锤。

str = "AAABBAAACCCAA"
str.chars.chunk_while { |i, j| i == j }.map { |a| "#{a.size}#{a.first}" }.join

分解它的作用:

str = "AAABBAAACCCAA"
str.chars # => ["A", "A", "A", "B", "B", "A", "A", "A", "C", "C", "C", "A", "A"]
.chunk_while { |i, j| i == j } # => #<Enumerator: #<Enumerator::Generator:0x007fc1998ac020>:each>
.to_a # => [["A", "A", "A"], ["B", "B"], ["A", "A", "A"], ["C", "C", "C"], ["A", "A"]]
.map { |a| "#{a.size}#{a.first}" } # => ["3A", "2B", "3A", "3C", "2A"]
.join # => "3A2B3A3C2A"

to_a 用于说明,但不是必需的:

str = "AAABBAAACCCAA"
str.chars
.chunk_while { |i, j| i == j }
.map { |a| "#{a.size}#{a.first}" }
.join # => "3A2B3A3C2A"

how do you get to know such methods as Array#chunk_while? I am using Ruby 2.3.1 but cannot find it in the API docs, I mean, where is the compendium list of all the methods available? certainly not here ruby-doc.org/core-2.3.1/Array.html

好吧,这与问题无关,但它是有用的信息:

请记住,Array 包括 Enumerable模块,其中包含 chunk_while .使用 http://ruby-doc.org 的搜索功能找到事物存在的地方。此外,熟悉在命令行中使用 ri,并尝试运行 gem server在命令行获取您已安装的所有 gem 的帮助。

如果您查看 Array文档页面,在左边你可以看到 Array 有一个 Object 的父类,所以它有 Object 的方法,它也继承自 Enumerable,所以它也会引入 Enumerable 中实现的任何东西。

关于Ruby 与扫描字符串的长度不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com