文字列から繰り返し文字のカウントする
繰り返し文字数が最大である単語を見つけてその単語を返す
いろいろ解釈できるので、期待値がちょっと理解できません。
例えば、「こういう文字列ならいくつ(なに)です」を、何パターンか挙げてもらうことできますか。
SearchingChallenge(str)で、渡されるstrパラメーターを受け取り、繰り返し文字の数が最も多い最初の単語を返せるようにアルゴリズムを作成したい
例えば 「今日は史上最高の日です!」は 2 つの e (および 2 つの t) を持ち、同じく 2 つの e を持つものより前に来るため、最大の値が返されるはずです。
文字が繰り返される単語がない場合は、-1を返します。単語はスペースで区切られます。
このように作成したいです
Have the function SearchingChallenge(str) take the str parameter being passed and return the first word with the greatest number of repeated letters. For example: "Today, is the greatest day ever!" should return greatest because it has 2 e's (and 2 t's) and it comes before ever which also has 2 e's. If there are no words with repeating letters return -1. Words will be separated by spaces.
エラーは出ていないです
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
function SearchingChallenge(str) {
let result = "";
//正規表現を利用する?文字列で処理する
let wordsList = str.split(" ");
//同じ文字が何度繰り返されるか数える処理を作るsplit関数?
for (let i = 0; i < wordsList.length; i++) {
const words = wordsList[i];
//if文で文字列の最大値を出すための処理が必要
//連想配列、文字列のkeyを指定して値を取得する
if (result[i] > words) {
console.log(result[wordsList.length - 1]);
}
}
// code goes here
//言葉なしの場合の処理を作る。文字列から数字に変換
return str;
}
// keep this function call here
console.log(SearchingChallenge(readline()));
文字列を処理するので正規表現を必要なのか?
同じ文字が何度も繰り返されるか数える
例えばToday, is the greatest day ever!
の単語から1つの単語greatest
を出力するためにsplit関数が必要?なのか調べています
ifで文字列の最大値を出すための処理を作成しているがわからなくなったのでアドバイスをお願いします
文字列から繰り返し文字のカウントする
繰り返し文字数が最大である単語を見つけてその単語を返す
いろいろ解釈できるので、期待値がちょっと理解できません。
例えば、「こういう文字列ならいくつ(なに)です」を、何パターンか挙げてもらうことできますか。
@sharp231
Questioner改善しました
例えば 「今日は史上最高の日です!」は 2 つの e (および 2 つの t) を持ち、同じく 2 つの e を持つものより前に来るため、最大の値が返されるはずです。
更に分からなくなりました。
@sharp231
Questionerありがとうございます
原文を追加しました
みていただけると幸いです
ネット上に答えがありました。
ちゃんと期待通りの答えがえられました。
追伸;
"This is a pen." だと、誤った答えとなったので、完璧なコードではないようです。
(正規表現の使い方に問題がありそう)
@sharp231
Questionerありがとうございます
処置はサーバー側で Node.js でやるのか、クライアント側でブラウザで動く JavaScript でやるのかどっちですか? 後者なら Node.js のタグは削除してください。前者なら開発環境(OS, IDE など)を書いてください。
文字列を処理するので正規表現を利用してします
質問者さんのコードでは正規表現は使ってません。用語は正確にお願いします。文章でやり取りするここのようなサイトでは話が通じなくなりますので。
繰り返し文字数が最大である単語を見つけて
対象とするのは何ですか? "Today, is the greatest day ever!" という文字列が例として挙げられてますが、それにあるように英文かつ ASCII 文字だけで良いのですか? そして、この例ではどのように「繰り返し文字数が最大」を判定するのですか? 例えば "... ever!!!" とかなっていたらどうするのですか?
日本語が母国語ではない、もしくは日本語の文章を書くのが苦手な人ですか? 話が通じてないです。
質問者さんの前のスレッドでも書きましたが、自分の質問を文書化することができないのでは、ここのような文章でやり取りする Q&A サイトでは日本語レベルで話が通じなくて問題解決は無理だと思います。
Face-to-face で講師・先生などと話ができて、何が分からないかまで会話の中から探ってもらえて、回答がもらえる学校のような環境を探すことをお勧めします。
@sharp231
Questioner文字数が最大である単語を見つけてその単語を返すこと
意味が分かった
多分こういう事?
const wordLengthMap = "Today, is the greatest day ever!".split(" ").map(x => x.toLocaleLowerCase()).reduce((memo, x) => {
memo.set(x, x.length)
return memo
}, new Map())
const maxLength = Array.from(wordLengthMap.values()).sort((a, b) => b - a)[0]
Array.from(wordLengthMap).find(([word, length]) => length == maxLength)[0] // => greatest
@sharp231
Questioner改善しました
例題を日本語に翻訳してはダメです!
ーーーーーーーーー
例えば 「今日は史上最高の日です!」
For example: "Today, is the greatest day ever!"
ーーーーーーーーー
2 つの e (および 2 つの t) を持ち
it has 2 e's (and 2 t's)
ーーーーーーーーー
単語はスペースで区切られます。
Words will be separated by spaces.
ーーーーーーーーー
文字が繰り返される単語がない場合は、-1を返します。
If there are no words with repeating letters return -1.
ーーーーーーーーー
SearchingChallenge(str)。。。アルゴリズムを作成したい
Have the function SearchingChallenge(str) 。。。
ーーーーーーーーー
英文の設問がダメダメです。
翻訳もダメダメです。repeatには重なるの意味があります。
■設問
各単語に同じ文字が重複している数の最大数を求め、最大数である単語の中で最初に登場する単語を表示するjavascriptコードでロジックをしなさい。尚、最大数が0の時は-1を表示すること。
t t
"Today, is the greatest day ever!"
e e e e
it has 2 e's (and 2 t's)
答え:greatest
"This is a pen."
答え:-1
■まとめ
表題にあるアルゴリズムで答える必要はなくjavascriptのロジックを知りたい点は理解できました。
■アルゴリズム
頭の体操として記述します。
max=0
word="-1"
ascii[128]
for文で文章全体を1桁から末尾までループ
空白なら ブレーク処理と初期化
空白以外なら 文字カウントとword形成
eofならブレーク処理を実施
■ブレーク処理
ascii[128] の最大値とmaxを比較してword=に hotwordを設定しmaxも最大値にする
■初期化
ascii[128] と hotwordを初期化
■文字カウント
ascii[128] にforで得られた1桁をカウント
■word形成
forで得られた1桁をhotwordに追記
@sharp231
Questionerありがとうございます
英文の設問は関しては私も全然最初からわけがわからない
内容だなって思っています
function getWordWithMostRepeatedLetters(str){
var ary=str.split(" ");
var maxWord="";
var maxWeight=0;
for(var i=0;i<ary.length;i++){
var weight=getWordWeight(ary[i]);
if (maxWeight<weight){
maxWeight=weight;
maxWord=ary[i];
}
}
if (maxWeight==0){
return -1;
}else{
return maxWord;
}
}
//重複ありの場合重複letter数を戻す。
function getWordWeight(word){
var ary=word.split("");
var max=0;
for(var i=0;i<ary.length;i++){
var cnt=0;
for(var j=0;j<ary.length;j++){
if (ary[i]==ary[j]){
cnt++;
}
}
if (max<cnt)max=cnt;
}
return max-1;
}
@sharp231
Questionerありがとうございます