Skip to content

Instantly share code, notes, and snippets.

@zerosum
zerosum / Euler0014.scala
Created January 22, 2013 12:34
Project Euler: Problem 14
package euler.zerosum
object Euler0014 {
def main(args: Array[String]) {
println(
(1 until 1000000).map(x => solveCollatz(x, x, 0)).maxBy(_._2)._1
)
}
def solveCollatz(i: Long, tmp: Long, counter: Long): (Long, Long) = {
@zerosum
zerosum / Euler0015.scala
Created January 23, 2013 12:08
Project Euler: Problem 15
package euler.zerosum
object Euler0015 {
def main(args: Array[String]) {
val width = args(0).toInt
val height = args(1).toInt
val numer = width + 1 to width + height
val denom = 1 to height
@zerosum
zerosum / Euler0011.scala
Created January 28, 2013 15:37
Project Euler: Problem 11
package euler.zerosum
object Euler0011 {
def main(args: Array[String]) {
val horizontal = take4ElemsEvery(1, given, Nil)
val vertical = take4ElemsEvery(21, given, Nil)
val diagonal = take4ElemsEvery(20, given, Nil) ::: take4ElemsEvery(22, given, Nil)
val products = (horizontal ++ vertical ++ diagonal).map(_.product)
@zerosum
zerosum / Euler0012.scala
Created January 30, 2013 10:35
Project Euler: Problem 12
package euler.zerosum
object Euler0012 {
// 数xの因数iは、x = i^2 の場合を除き、対となる因数i'が存在する。
// √xを超えない自然数に含まれるxの因数の個数をnとするとき、
// xの全ての因数の個数は2nもしくは2n+1個である。
def main(args: Array[String]) {
println(getTriangle(1))
}
@zerosum
zerosum / Euler0024.scala
Created January 31, 2013 16:32
Project Euler: Problem 24
package euler.zerosum
object Euler0024 {
def main(args: Array[String]) {
println(getArrangement(999999, (0 to 9).toList, Nil).mkString)
}
private def getArrangement(order: Int, objects: List[Int], arrangement: List[Int]): List[Int] = {
val unit = fact(objects.length - 1, 1)
@zerosum
zerosum / Euler0023.scala
Last active December 12, 2015 02:09
Project Euler: Problem 23
package euler.zerosum
object Euler0023 {
def main(args: Array[String]) {
val limit = 28123
val numbers = from(1).take(limit)
val abundant = getAbundant(limit)
println(numbers.filterNot(x => isSumOfTwoElems(x, abundant.takeWhile(_ <= x))).sum)
@zerosum
zerosum / Euler0028.scala
Last active December 12, 2015 02:18
Project Euler: Problem 28
package euler.zerosum
object Euler0028 {
def main(args: Array[String]) {
println(getCorner(3, 1001, from(1).take(1)).sum)
}
private def getCorner(width: Int, maxWidth: Int, corners: Stream[Int]): Stream[Int] = {
val maxValue: Int = maxWidth * maxWidth
@zerosum
zerosum / Euler0021.scala
Created February 3, 2013 07:21
Project Euler: Problem 21
package euler.zerosum
import euler.zerosum.Divisors._
import euler.zerosum.Number._
object Euler0021 {
def main(args: Array[String]) {
println(from(1).take(9999).filter(hasAmicable(_)).sum)
@zerosum
zerosum / Euler0022.scala
Created February 8, 2013 12:07
Project Euler. Problem 22
package euler.zerosum
import io.Source
object Euler0022 {
def main(args: Array[String]) {
val f = Source.fromFile("names.txt") // via. http://projecteuler.net/project/names.txt
println(namesScore(f.mkString.split(',').toList.map(_.filterNot(_ == '"')).sortWith(_<_)))
f.close()
@zerosum
zerosum / Euler0032.scala
Last active December 12, 2015 07:49
Project Euler: Problem 32
package euler.zerosum
object Euler0032 {
/**
* [1..9]の順列によって得られる9桁の数を2箇所で区切って得られるx,y,zの3数が
* x*y=zをみたす桁数の組み合わせ(digit(x), digit(y), digit(z))は
* {(1, 4, 4), (2, 3, 4)}のいずれか
*
* (∵)
* 1桁*3桁、2桁*2桁の演算は高々4桁、また、