gpt4 book ai didi

ruby - 如何找到json中所有单词的数组,可以通过重新排列这些字母(Ruby)

转载 作者:行者123 更新时间:2023-12-01 23:11:34 29 4
gpt4 key购买 nike

我是 ruby 新手。我如何编写一个函数,该函数采用接受小写字母的 find 方法,并且 find 应该返回 dic.json 中所有单词的数组,可以通过重新排列这些字母来制作。因此,如果我输入 "ab",那么输出应该是来自下面 JSON 文件的 ["ab", "ba"]

dic.json

[
"ab",
"ba",
"abc",
"acb",
"bac",
"bca",
"cab",
"cba"
]

这是目前为止

我使用文件读取来访问 JSON 文件,我有一个可以找到排列的函数,但我不确定如何连接这两个函数。

class LetterLocater
def get_file_contents
return File.read('dictionary.json').split
end

def permutation(letters)
return [''] if letters.empty?

chrs = letters.chars
(0...letters.size).flat_map { |i|
chr, rest = letters[i], letters[0...i] + letters[i+1..-1]
permutation(rest).map { |sub|
chr + sub
}
}
end
end

a = LetterLocater.new
puts a.permutation(gets.chomp) ```

最佳答案

除了为各种输入创建所有排列外,您还可以通过对字典中的字母进行排序来对字典中的单词进行分组:

def sorted(str)
str.chars.sort.join
end

# assume this was read from the JSON file
dict = %w[ab ba abc acb bac bca cab cba]

lookup_hash = dict.group_by { |word| sorted(word) }
#=> {
# "ab" => ["ab", "ba"],
# "abc" => ["abc", "acb", "bac", "bca", "cab", "cba"]
# }

虽然这种计算对于较大的词典来说可能非常昂贵,但您只需一次。 (您甚至可以将散列存储到磁盘,并且仅在字典更改时更新)

创建哈希后,找到排列几乎是微不足道的。您只需获取已排序输入的值:

input = gets.chomp
puts lookup_hash[sorted(input)]

这比每次生成所有排列要快得多。

关于ruby - 如何找到json中所有单词的数组,可以通过重新排列这些字母(Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69834163/

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