アナグラムは次のように探します。例えば、CAREをアルファベット順に並べるとACERになります。RACEも同じです。こうして同じになったものがアナグラムです。まずそうやって全ての単語を調べます。groupByを使うと簡単ですね。ScalaのgroupByはソートしなくても使えます。その分効率が悪いとも言えます。
こうしてアナグラムごとにわけておきます。これを平方数についても行います。関数を共通化するために平方数を文字列化します。特にスピードが必要ではないのでよいでしょう。
あとはアナグラムをペアにして、平方数もペアにして、それぞれマッチするか調べます。