Trong ruby 1.9.3, tôi đang cố gắng viết một chương trình sẽ tìm tất cả các từ có số n được lấy từ một tập hợp tùy ý nhân vật. Ví dụ: nếu tôi được tặng các ký tự [b, a, h, s, v, i, e, y, k, s, a] và n = 5, tôi cần tìm tất cả các từ có 5 chữ cái có thể chỉ được thực hiện bằng cách sử dụng những ký tự đó. Sử dụng danh sách từ 2of4brif.txt từ http://wordlist.sourceforge.net/ (để bao gồm các từ Anh và cách đánh vần, quá), tôi đã cố gắng đoạn mã sau:Tìm và in các dòng trong một tệp chính xác khớp chuỗi hoặc regexp (Ruby)
a = %w[b a h s v i e y k s a]
a.permutation(5).map(&:join).each do |x|
File.open('2of4brif.txt').each_line do |line|
puts line if line.match(/^[#{x}]+$/)
end
end
này không có gì (không có thông báo lỗi, không có đầu ra, như thể đông lạnh). Tôi cũng đã cố gắng biến thể dựa trên các chủ đề sau:
What's the best way to search for a string in a file?
Ruby find string in file and print result
How to search for exact matching string in a text file using Ruby?
Finding lines in a text file matching a regular expression
Match a content with regexp in a file?
How to open a file and search for a word?
Mọi biến thể tôi đã thử đều dẫn đến:
1) Làm lạnh;
2) In tất cả các từ trong danh sách có chứa các hoán vị 5 ký tự (tôi cho rằng đó là những gì nó đang làm; tôi đã không đi qua và kiểm tra tất cả hàng nghìn từ đã in); hoặc
3) In tất cả các hoán vị 5 ký tự được tìm thấy trong các từ trong danh sách (một lần nữa, tôi cho rằng đó là những gì nó đang làm).
Một lần nữa, tôi không tìm kiếm các từ chứa hoán vị 5 ký tự, tôi đang tìm các hoán vị 5 ký tự là từ hoàn chỉnh và chính chúng, do đó, một dòng trong tệp văn bản được in nếu nó là một kết hợp hoàn hảo với một hoán vị.
Tôi đang làm gì sai? Cảm ơn trước!
Và đó là một câu hỏi cũng được xây dựng. – MurifoX
Tôi đoán nó bị đóng băng vì mỗi kết hợp 5 chữ cái bạn đang đọc từng dòng của một tệp lớn. Ít nhất tôi giả sử một danh sách từ của tiếng Anh là khá lớn. Tôi không rõ bạn đang sử dụng tệp nào. Dù sao, những gì bạn đang cố gắng làm chỉ mất rất nhiều tài nguyên (thời gian và bộ nhớ) và đó là lý do tại sao chương trình bị đóng băng. – Mischa
'a.permutation (5)' kết quả trong 55440 từ có thể có năm chữ cái. Tôi không có bao nhiêu từ trong từ điển của bạn, nhưng hãy nói 100000 (đó là một ước tính rất thấp). Điều này sẽ dẫn đến một lần lặp chạy hơn 5 tỷ lần (!). – Mischa