ひらめの日常

日常のメモをつらつらと

Scala

リスコフの置換原則とScalaでの共変反変

リスコフの置換原則と、それに関係の深いScalaにおける共変反変について理解が浅かったのでまとめてみました。まとめてみたものの、未だに分かりづらいので、またアップデートします。

Scalaで競技プログラミング: 標準入力周りで調べたこと

複数変数の初期化 複数行の読み込み Array.fill 複数変数の初期化 例えば、1 2 3のように空白区切りで3つの標準入力を受け取るために、次のようなコードをよく書きます。 val sc = new Scanner(System.in) val v, e, r = sc.nextInt() これは左辺の変数の個…

Scalaで競技プログラミング: ダイクストラ法

C++で書いたライブラリをScalaで書き直しています。ダイクストラ法全体として以下のようなコードになりました。 case class Edge(to: Int, w: Long) case class Graph(n: Int) { val g: Array[Array[Edge]] = Array.fill(n)(Array.empty) def push(from: Int…

Scala: Ordered[T] と Ordering[T] の違い

結論 Ordered[T] は自身に継承し、比較可能にする Ordering[T] は自身を変えることなく、外側から変換を提供する gist.github.com Ordered[T] 例えば、単純に比較するだけのクラスを作る。このクラスは Ordered[T] を継承していて、compareメソッドを実装す…

『Akka実践バイブル』を読んだ(後半)

Akka実践バイブルを読んでいるので、自分の印象に残ったところをメモ程度にまとめます。こちらは後編です。

『Akka実践バイブル』を読んだ(前半)

Akka実践バイブルを読んでいるので、自分の印象に残ったところをメモ程度にまとめます。

Scalaで競技プログラミング: 累積和

scanLeftはfoldLeftの途中経過の値を保持するような関数。 これを使えば、累積和の計算が簡単にできる。 初期値が一番最初に挿入されるので、元の配列より大きさが+1されていることに注意する。 val a = Array(1, 2, 3) val d = a.scanLeft(0L)(_ + _) print…

Scalaで競技プログラミング: ABC114-C 755

始めに 今までC++で競技プログラミングをしてきたのですが、業務でScalaを書いていることもあり、ScalaでAtCoderを解いてみようと思います。大半が解いたことある問題かつ、目的はScalaに慣れることなので、解説は省いています。 勉強途中であることもあり、…

Scalaで競技プログラミング: ATC001-A 深さ優先探索

始めに 今までC++で競技プログラミングをしてきたのですが、業務でScalaを書いていることもあり、ScalaでAtCoderを解いてみようと思います。大半が解いたことある問題かつ、目的はScalaに慣れることなので、解説は省いています。 勉強途中であることもあり、…

Scalaで競技プログラミング: ABC167-C Skill Up

始めに 今までC++で競技プログラミングをしてきたのですが、業務でScalaを書いていることもあり、ScalaでAtCoderを解いてみようと思います。大半が解いたことある問題かつ、目的はScalaに慣れることなので、解説は省いています。 勉強途中であることもあり、…

Scalaで競技プログラミング: ABC151-C Welcome to AtCoder

始めに 今までC++で競技プログラミングをしてきたのですが、業務でScalaを書いていることもあり、ScalaでAtCoderを解いてみようと思います。大半が解いたことある問題かつ、目的はScalaに慣れることなので、解説は省いています。 勉強途中であることもあり、…