Tôi yêu /usr/share/dict/words
; thật tiện dụng Tôi sử dụng nó cho tất cả các chương trình của tôi, bất cứ khi nào tôi có thể! Bạn sẽ tận dụng lợi thế của tệp này rất hữu ích để sử dụng, bằng cách kiểm tra tính cá nhân của một từ.
Đầu vào
- Một từ; được định nghĩa trong thử thách này là bất kỳ chuỗi ký tự nào
/usr/share/dict/words
trong một số định dạng; bạn có thể viết mã cứng, đọc từ đĩa, coi đó là đối số thứ hai, bất cứ điều gì có ý nghĩa nhất trong thử thách của bạn
Đầu ra
- Một từ riêng lẻ (xem bên dưới)
Tính cá nhân của một từ có nguồn gốc từ phương trình sau:
<the number of words for which it is a substring> / <length of the word>
Hãy xem một ví dụ :
hello
. Có 12 từ có chuỗi con hello
trong đó, chia cho 5
(độ dài của hello) và tính cá nhân của hello là 12/5
hoặc2.4
PS Đây là codegolf , vì vậy điểm cá nhân càng thấp, cá nhân càng nhiều
Vì tính cá nhân là một từ dài, chương trình của bạn phải càng ngắn càng tốt
Chúc may mắn!
Các trường hợp thử nghiệm
Bạn có thể sử dụng tập lệnh Node.js tiện lợi này, phù hợp với các yêu cầu thách thức để phù hợp với mã của bạn. Đó cũng là cách tôi tạo ra các trường hợp thử nghiệm:
var fs = require("fs");
var word = process.argv[2];
process.stdout.write("Reading file...")
fs.readFile("/usr/share/dict/words", function(err, contents) {
console.log("Done")
if (err) throw err;
words = contents.toString().split("\n");
var substrings = words.filter(w => w.indexOf(word) > -1).length;
var length = word.length;
console.log(`${word} => ${substrings} / ${length} = ${substrings / length}`)
})
Các trường hợp thử nghiệm:
hello => 12 / 5 = 2.4
individuality => 1 / 13 = 0.07692307692307693
redic => 52 / 5 = 10.4
ulous => 200 / 5 = 40
challen => 15 / 7 = 2.142857142857143
ges => 293 / 3 = 97.66666666666667
hidden => 9 / 6 = 1.5
words => 12 / 5 = 2.4
aside => 8 / 5 = 1.6