我是紅寶石的新手。我如何撰寫一個接受小寫的 find 方法的函式,并且 find 應該回傳一個包含 dic.json 中所有單詞的陣列,可以通過重新排列這些字母來制作。所以如果我輸入,"ab"那么輸出應該["ab", "ba"]來自下面的 JSON 檔案。
dic.json
[
"ab",
"ba",
"abc",
"acb",
"bac",
"bca",
"cab",
"cba"
]
這是迄今為止
我使用 File read 來訪問 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) ```
uj5u.com熱心網友回復:
除了為各種輸入創建所有排列之外,您還可以通過對字母進行排序來將字典中的單詞分組一次:
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)]
uj5u.com熱心網友回復:
在 Ruby 中Array#permutation,您已經可以使用它來計算所有可能的單詞。
letters = "ab" # example
permutations = letters.split(//).permutation.map(&:join)
#=> ["ab", "ba"]
然后是'Array#&'只回傳一個陣列中存在于另一個陣列中的元素。
words = ["ab", "ba", "abc", "acb", "bac", "bca", "cab", "cba"]
words & permutations
#=> ["ab", "ba"]
您可以使用JSON.load(File.open('dictionary.json'))將 JSON 檔案加載到 Ruby 陣列中——正如 Schwern 已經在他的評論中所寫的那樣。
現在讓我們將所有這些方法組合成一個類
require 'json'
class LetterLocater
attr_reader :words
def initialize(dictionary)
@words = JSON.load(File.open('dictionary.json'))
end
def permutation(letters)
permutations = letters.split(//).permutation.map(&:join)
words & permutations
end
end
ll = LetterLocater.new('dictionary.json')
ll.permutation('ab')
#=> ["ab", "ba"]
ll.permutation('abc')
#=> ["abc", "acb", "bac", "bca", "cab", "cba"]
uj5u.com熱心網友回復:
def find_permutations_in_array(arr, str)
chars = str.chars.sort
arr.inject([]) do |res, word|
res << word if word.size == str.size && word.chars.sort == chars
res
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/348311.html
標籤:红宝石
