2016-04-27 7 views
2

アルゴリズムのスキルを向上させたいですか?スカラとアルゴリズムによるワークアウト

test("testMergeList") { 
    val a = List(1, 6, 7, 8, 40) 
    val b = List(1, 7, 8, 9, 11, 20, 100) 

    println(Workout.mergeList(a, b, List())) 
    println(Workout.mergeList(b, a, List())) 

    assert(Workout.mergeList(a, b, List()) equals List(1, 1, 6, 7, 7, 8, 8, 9, 11, 20, 40, 100)) 
    assert(Workout.mergeList(b, a, List()) equals List(1, 1, 6, 7, 7, 8, 8, 9, 11, 20, 40, 100)) 
    } 

でした:たとえば、ここでは、この

次のルールにより2つのリストをマージする必要が
* ListA = 1 2 4 6 100 
* ListB = 5 200 
* ListRes = 1 2 4 5 6 100 200 

のようなタスクは、チェックのための実装

@tailrec 
    def mergeList(a: List[Int], b: List[Int], res: List[Int]): List[Int] = { 
    if (a.isEmpty) return res ::: b 
    if (b.isEmpty) return res ::: a 
    if (a.head < b.head) mergeList(a.tail, b, res ::: List(a.head)) else 
    mergeList(a, b.tail, res ::: List(b.head)) 
    } 

ユニットテストは ですこのようなタスクでいくつかのリソースをお勧めしますか?

私の実装を投稿してディスカッションすることはできますか?

ありがとうございました。

+0

あなたのソリューションは実際には非常に悪いです。 'a ++ b sorted 'のようなものは最適ではありませんが、あなたのものよりはるかに優れています。 – Dima

+0

あなたがそれを投稿して議論することができるところに関しては、codereviewをチェックしてください:http://codereview.stackexchange.com/ – Dima

+0

これは適切なSOの質問のようには思われません。 –

答えて

1

Hacker Rankは、多くの(必ずしも機能的ではない)問題を解決するために使用できます。

また、赤い本(ScalaのFunctional Programming)にはgithubのソリューションに大きな問題があります。

最後に、SOの質問に答えることは、あなたが望むものを得るためのもう1つの素晴らしい方法です。

+0

あなたのコメントをありがとう! –

0

Euler Projectをお試しください。アルゴリズムのスキルに加えて、ご希望のプログラミング言語(Scalaなど)を理解することができます。

また、のためのScalaは、辛抱強いのために本は多数の練習を含んでいます。

関連する問題