プログラミングお題に挑んでみた:リストの内容比較

お題:リストの内容比較 - No Programming, No Life への挑戦。色々考えていたら収集がつかなくなってきたので、シンプルに解くことにしました。ただ、何のアイデアもなくするのはつまらないので、かなり前に「Groovyなら1行でかけるサンプル集」みたいなのがあったのを思い出し、1行で書くことにしました。

1行といっても、リスト作成から出力を1行のみです(セミコロンで区切れば1行でかけなくもないけど、読みづらいので分けました)。なので、次のように並んでます。

  • リストAの要素
  • リストBの要素
  • リストAとBの共通(論理積)の要素
  • リストAとBの比較(余裕のある方用のお題)

1行表記のため、次の点は簡略化させてもらいました。

  • リストは予めListオブジェクトに変換する
  • リストAとBの比較の書式にはタブ文字を利用する(入力した文字によっては文字欄の幅がずれる)

そのほかの見苦しい記述は私の実力不足です・・・


今回やってておもしろかったのは、print文中に${}と記述することで内部に処理を埋め込めること。ちょっとしたことならこれがシンプルでいいですね。埋め込む値がたくさんあるときはprintfが便利ですが。
もう一点は、括弧の省略可否です。たとえば、

(lList+rList).toSet().sort().each { ... }

という記述をするとエラーになるので、上記コードのように書く必要があります。クロージャだからでしょうか。new List().sort()などといった括弧の省略記述が出来るので、とことん省略していこうと思っていたら、この件に遭遇してしまいました。注意が必要です。