Skip to content

Instantly share code, notes, and snippets.

@ryoppy
ryoppy / min.scala
Created December 12, 2013 09:20
練習用にmin実装
// not tailrec... :(
def min(l: Seq[Int]): Int = l match {
case h :: t if t.isEmpty => h
case h :: t => min(t) match {
case r if h < r => h
case r => r
}
}
// tailrec! :)
@ryoppy
ryoppy / erlang-practice.md
Last active January 1, 2016 09:09
練習

判定

1 == 1
> true

1 == 1.0
> true

1 =:= 1.0
@ryoppy
ryoppy / heapsort.scala
Last active January 1, 2016 19:39
ヒープソート
def hsort(list: Seq[Int]): Seq[Int] = {
val l = new ArrayBuffer[Int]()
// 3 1 2 -1 4 10 0
// 3
// 1 3 2
// -1 3 2 1 4
// -1 3 0 1 4 10 2
def push(n: Int) {
@ryoppy
ryoppy / dfs_bfs.scala
Last active January 2, 2016 01:29
深さ優先探索と幅優先探索 (dfs=Depth First Search) (bfs=Breadth First Search)
import scala.collection.immutable.{Stack, Queue}
import scala.annotation.tailrec
case class Graph(es: Map[Vertex, Seq[Edge]])
case class Vertex(i: Int)
case class Edge(v: Vertex)
def sampleGraph: Graph = Graph(
Map(
Vertex(3) -> Seq(Edge(Vertex(1)), Edge(Vertex(2))),
@ryoppy
ryoppy / a-star.scala
Last active January 2, 2016 16:29
スタートノードからゴールノードまでのパスを計算する、このとき求めるパスが最短であることを保証しているアルゴリズム
import scala.annotation.tailrec
import scala.collection._
object Main {
def main(args: Array[String]) {
// 1マスずつ進みながら、上下左右のマスでゴールに近い順に探索していく
val map = """#S########
|# #### G
@ryoppy
ryoppy / dikstra.scala
Created January 9, 2014 08:13
ダイクストラ法はグラフ理論における最短経路問題を解くためのアルゴリズム
import scala.annotation.tailrec
/*
[C] >2 [A] >2 [E]
\ >1 [D]
\ >1
\ \
>1 [B] >6 [F]
C>A>F が最短
@ryoppy
ryoppy / bellmanFord.scala
Created January 13, 2014 04:35
ベルマンフォード法は、重みつき有向グラフにおける単一始点の最短経路問題を解くラベル修正アルゴリズム。負の閉路(負の値により最短距離が更新され続けてしまうループ)を見つけることもできる。
import scala.annotation.tailrec
object Main {
def main(args: Array[String]) {
bellmanFord(sampleGraph, Vertex("C"))
.toSeq.sortBy(_._2).map(println)
}
def bellmanFord(graph: Graph, start: Vertex): ShortestPath = {
@ryoppy
ryoppy / WarshallFloyd.scala
Created January 14, 2014 13:23
ワーシャルフロイド法は、重み付き有向グラフの全ペアの最短経路問題を求めるアルゴリズム
import scala.annotation.tailrec
object Main {
def main(args: Array[String]) {
val s = 3
val m = Vector.fill(s, s)(0)
val r = floid(makeData(m))
printMatrix(r)
}
@ryoppy
ryoppy / prim.scala
Last active January 3, 2016 07:39
プリム法は、重み付き連結グラフの最小全域木を求めるアルゴリズム
import scala.annotation.tailrec
object Main {
def main(args: Array[String]) {
prim(sampleGraph).foreach(println)
}
// 参考 : http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AA%E3%83%A0%E6%B3%95
// 例のグラフもwikipediaのものと同じに。
def prim(g :Graph): Seq[Edge] = {
@ryoppy
ryoppy / mt_safe.scala
Created January 15, 2014 09:56
Scalaでスレッドセーフのメモ
// 複数スレッドで++していくとスレッドセーフでないので値がおかしくなる
var a = 0
(0 until 10000).par.foreach { _ => a += 1 }
println(a) // 6772
// synchronizedを使っても可。
var b = 0
(0 until 10000).par.foreach { _ => synchronized { b += 1 } }
println(b) // 10000