2012-02-12 11 views
1

私はこのようなコードを持っている:数字を '。'から分けて分割する方法は?

def a = [".15", "7..", "402", "..3"] 
c = a.permutations() as List 
println c[0].join() 

7....3402.15を出力します。この場合、数字のみを取得する必要があります(例:7,3402,15)。さらに注目すべきことに、私は合計が必要である、すなわち、例では7,9,6を得るだろう。

これはgroovyでどのように行うことができますか?

+0

この宿題ですか? –

+0

@AshBurlaczenko:ハハ..正確には..その私の疑い。私はトップコーダーでパズルを解いています。そして、私はそれをどうすればできるのかを知ってもらいます。コード: –

+0

@AshBurlaczenko:私はそれを繰り返し、 '.'を見つけてそれを合計するまでリストに入れます。しかし、私はこの状況にいくつかの面白い解決策があるだろうと思う;) –

答えて

2

迅速な対応として、1つの解決策は、次のようになります。

def result = [".15", "7..", "402", "..3"].permutations()*. 
    join()*.         // Join each permutation together into a single string 
    split('\\.')*.       // Split each of these Strings on the '.' char 
    findAll()*.        // Remove empty elements (where we had '..' before splitting) 
    collect { it -> it*.toInteger().sum() } // Convert each String to List<Integer> and sum 
+0

これはクラスに見えます:) –

1

これは何か?

[".15", "7..", "402", "..3"].permutations()*.join()*.replaceAll('\\.\\.*',',')*.split(',')*.collect{it.getChars().inject(0){a,b->a+ (new Integer(b as String))}} 

編集...それはコードを見て非常に良いではないのですが、それは意図を伝える必要があります。それだけではなく、一つの要素のために、順列の配列全体のために働くようにコードを変更しました。型変換は厄介です、@ tim_yatesコードははるかにクリーンです。順列の各サブアレイのため

:次のように

コードが動作

  • 参加アレイ代替
  • ストリング一から一,
  • 分割離れた文字列を持つすべての連続.,
    • この文字列のすべての文字を整数とそれは私が元の問題を知らないので、何が必要であれば今、私は知らないinject方法

を使用してそれらを追加します。

+0

あなたのアイデアは良いです。しかし、あなたは何をやっているのか少し説明できますか? –

関連する問題