日別アーカイブ: 2022年10月6日

TIPS(Ruby:文字列Aと文字列Bはほぼ同じか?)

目標:なにがしたいか?

全要素がユニークな文字列Aと全要素がユニークな文字列Bはほぼ同じかどうか

問題

ある文字列”xyz”があります。これを用いてパスワードを作成することにしました。
条件を満たしたとき、”OK”を出力し、満たさないときは”NG”を出力します。

条件1:完全に一致した場合NGとする。(ほぼ同じではないので)例: “xyz”
条件2:文字列の長さが同じでない場合もNG   例: “xy”
条件3:文字列を入れ替えたとき同じならOK 例:”zyx”
条件4:文字列の要素はユニークである例:”abcd” ◎   例:”aabc”×

与えられる入力値1

xyz
xy

期待する出力

"NG"

与えられる入力値2

xyz
zyx

期待する出力2

"OK"

コードと解説

a = gets.chomp.chars
b = gets.chomp.chars
  if a == b || a.size != b.size
    puts "NG"
  elsif a - b == [] 
    puts "OK"
  else puts "NG"
end

https://paiza.io/ja/projects/new

↑こちらにコピペして「実行」で確認できます。

↓このような出力結果になっていればOKです。

※配列と配列の重複している部分は差集合-を使うことで
順番が違う場合でも適用される

差集合

※更に詳しく

実際に

["x", "y", "z"] - ["z", "y", "x"]

の時[]になるので、[]になったときに”OK”を出力している

ただし↓の場合

["a", "a", "a", "b", "c"] - ["a", "b", "b", "b", "c"]

結果が同じく[]になってしまうので配列の要素がユニークでない場合は使えないので注意です!