実現したいこと
経緯 今英単語が入力されたらその単語のスペルがあっているのかを判断するプログラムをRubyで作成しています。
質問です。 配列の中の英単語の綴りを比べて1文字間違っていたら1点、2文字以上間違っていたら0点で「合計点」を表示したいです。
例
answers = ["apple","peach","orange"] fruits = ["aplle","peech","olaege"]
それぞれの配列から順番に値を取り出し
appleとaplleを比較し綴りのスペルが1文字間違えていたら
1点で2つ以上スペルミスがあれば0点として配列内の値全てをチェックし合計点を出力したいです。
上の例で言うと合計点は2点です。
わからない点はどうやって1文字1文字チェックするのかが分かりません。
3〜4時間考えてもうまく作れないため、これ以上時間を使うのは非効率と考え質問させていただきます。
試したこと
①完成までの仮説を立てました。
⇨
1.配列を2つ用意する。(答えの英単語を含む単語と比較したい英単語の配列)
2.それぞれの配列から値を一つずつ取り出す。
3.取り出した値をそれぞれ比較する ⇦ここで躓いています。
4.1文字違い⇨1点、2文字以上違う⇨0点
5.合計点を出力する。
私のコード
answers = ["apple","peach","orange"] fruits = ["aplle","peech","olaege"] answers.each do |answer| students.each do |student| end end
②AとBを比較し一致するかどうかを調べるメソッドがないのかをネットで調べました。
⇨includeメソッドとcharsメソッドヒットしましたがうまく作れませんでした。
answers = ["apple","peach","orange"] fruits = ["aplle","peech","olaege"] answers.each do |answer| fruits.each do |fruit| if answer.include?(fruit) puts "yse" else puts "no" end end end
> 3.取り出した値をそれぞれ比較する ⇦ここで躓いています。
は、zipをつかいます。服のジッパー(ファスナー、チャック)と同じ意味。
(類似品に transpose = 行列の転置)
が、"apple" と "aple" を「1文字抜けただけで他はあってるので1点」と判断したいのなら難しいです。
"ap" と "apple" は0点だと思いますが、zipだと長さが異なる場合の扱いが面倒。
そもそも完全一致は何点?
ご丁寧に回答していただき誠にありがとうございます。
zipの言葉の意味までありがとうございます。
完全一致は2点です。
質問に不足があり誠に申し訳ございませんでした
長さが違うことはあり得ないという前提があるのでしょうか?
はい、長さが違う場合はあり得ないという前提です
長さが違うことがあり得ないなら、melianさんの回答に「完全一致は2点」という条件判断を追加すればいいかと。
長さが違うことがあり得ないということでそもそも長さをチェックしないか、念のため長さをチェックして異なれば異常終了するようにするか。普通は後者。
otnさん私のような初学者の方にも親身に回答していただきありがとうございました。
おっしゃるとうりで普通は念の為長さチェックをしてから異なれば〜と言う処理を書く方が良いと思いましたのでmelianさんのコードを参考に自分で改善してみようと思いました。

回答2件
あなたの回答
tips
プレビュー