Rubyで同値関係を求めるパズルやってみた。
Rubyで同値関係を求めるパズル - rubyco(るびこ)の日記
今回もid:sumimさんは既訳なわけですが気にせず。
#!ruby -Ku require 'set' text = "少女=リズ 少年=ペタ 楽天家=ゲルト 老人=モーリッツ ジム=ジムゾン アル=商人 村長=ヴァルター 木こり=トーマス 旅人=ニコラス ならず者=ディーター 少女=リーザ 行商人=アルビン ジムゾン=神父 女将=宿屋の女主人 ヴァルター=ヴァル 商人=行商人 少年=ペーター 翁=モーリッツ 羊飼い=カタリナ パン屋=オットー 青年=ヨアヒム 村娘=パメラ 農夫=ヤコブ 宿屋の女主人=レジーナ リー=少女 ならず者=ディー ペー太=ペタ" text = "a=b A=D b=c A=B B=C a=A " group = [] text.split(/\n/).each{|line| left, right = *line.split(/=/) group.delete(set_a = group.find{|set| set.include?(left)} || Set.new) group.delete(set_b = group.find{|set| set.include?(right)} || Set.new) group << ((set_a+set_b) << left << right) } p group.map{|set| set.sort}
標準入力じゃないとか出力形式とかは見逃してください。
それよりもgroup.delete(a = group.find{cond})の部分はそういうメソッドってないんでしたっけ。
配列から条件にあった要素を取り出すイメージなんですけど。