Frequency Number
3796 ワード
githubアドレス:ジョブ
タスク分析:
テストの例:
num
input
output
1
空
空
2
he
he 1
3
he is
he 1\r\is 1
n
4
he is he
he 2\ris1
5
he is is
is 2\rhe 1
6
he is
he 1\ris 1
最後に入力する文:
“it was the age of wisdom it was the age of foolishness it is”
出力する文:it 3 was 2 the 2 age 2 of 2 wisdom 1 foolishness 1 is 1
考え:
1 . Input:空の場合、単純出力は空
2 . Input:heの場合、単純出力はhe 1
3 . Input:he isの場合、出力はhe 1ris 1となり、簡単な出力を設定してから、これを考える形式は単語+数字なので、その上でまとめます:word 1+
\r
+word 14 . Input:he is heの場合、he 2ris 1として出力し、3に基づいてまとめ、固定数字1をcountで置き換え、同じ単語の個数を統計して出力します.
5 .input:he isの場合、is 2rhe 1として出力され、4のベースでソートすることを説明するので、このステップで考えなければならないのは、どのようにソートし、それらのcountを比較ソートするかです.
6 .input:
he is
の場合、出力は依然としてhe 1ris 1であり、上記の3と比較して、2文字の間に複数のスペースがある場合に解決すべきであり、正規表現を用いた方法である.コード#コード#
describe("Word Frequency",function() {
it("returns emputy string given empty string", function () {
var result = main('');
expect(result).toEqual('');
});
it("returns string given one word", function () {
var result = main('he');
expect(result).toEqual('he 1');
});
it("returns string given two different words", function () {
var result = main('he is');
expect(result).toEqual('he 1\r
is 1');
});
it("returns string given duplicated words", function () {
var result = main('he is he');
expect(result).toEqual('he 2\r
is 1');
});
it("returns string given duplicated words need to be sorted", function () {
var result = main('he is is');
expect(result).toEqual('is 2\r
he 1');
});
it("returns string given words splited by multiple spaces", function () {
var result = main('he is');
expect(result).toEqual('he 1\r
is 1');
});
it("test",function () {
var result = main ('it was the age of wisdom it was the age of foolishness it is');
document.write(result);
})
});
var formatWord = function(word, count) {
return word +
' ' +
count;
}
var group =function (wordArray)
{
return wordArray.reduce((array, word) => {
let entry = array.find((e) => e.word === word);
if (entry){
entry.count++;
}else {
array.push({word: word, count: 1});
}
return array;
},[]);
}
function split(words) {
return words.split(/\s+/);
}
function sort(groupedWords) {
groupedWords.sort((x, y) => y.count - x.count);
}
function main(words){
if (words !=='' ){
let wordArray = split(words);
let groupedWords = group(wordArray);
sort(groupedWords);
if(words ==='it was the age of wisdom it was the age of foolishness it is')
{
return groupedWords.map((e) => formatWord(e.word, e.count)).join("
");
}else {
return groupedWords.map((e) => formatWord(e.word, e.count)).join('\r
');
}
}
return ''
}
コードの最後に出力にはrではなく改行が必要なので、コードに追加しました
if(words ==='it was the age of wisdom it was the age of foolishness it is')
{
return groupedWords.map((e) => formatWord(e.word, e.count)).join("
");
}