wren
parent
32ae71cf32
commit
fa570c3b3e
|
@ -0,0 +1,84 @@
|
|||
class Prime {
|
||||
static subfactors(n, p) {
|
||||
var subfactors = []
|
||||
|
||||
var q = n / p
|
||||
var r = n % p
|
||||
|
||||
while (r == 0) {
|
||||
subfactors.add(p)
|
||||
n = q
|
||||
q = n / p
|
||||
r = n % p
|
||||
}
|
||||
|
||||
return [n, subfactors]
|
||||
}
|
||||
|
||||
static trial_factorization(n) {
|
||||
var factors = []
|
||||
|
||||
var subfactor_result = subfactors(n, 2)
|
||||
n = subfactor_result[0]
|
||||
Utility.extend_list(factors, subfactor_result[1])
|
||||
|
||||
subfactor_result = subfactors(n, 3)
|
||||
n = subfactor_result[0]
|
||||
Utility.extend_list(factors, subfactor_result[1])
|
||||
|
||||
var p = 5
|
||||
while (p * p <= n) {
|
||||
subfactor_result = subfactors(n, p)
|
||||
n = subfactor_result[0]
|
||||
Utility.extend_list(factors, subfactor_result[1])
|
||||
p = p + 2
|
||||
|
||||
subfactor_result = subfactors(n, p)
|
||||
n = subfactor_result[0]
|
||||
Utility.extend_list(factors, subfactor_result[1])
|
||||
p = p + 4
|
||||
}
|
||||
|
||||
if (n >= 1) { factors.add(n) }
|
||||
return factors
|
||||
}
|
||||
|
||||
static prime_factors(integer) {
|
||||
return trial_factorization(integer)
|
||||
}
|
||||
}
|
||||
|
||||
class Utility {
|
||||
static cons(x, xs) {
|
||||
return extend_list([x], xs)
|
||||
}
|
||||
|
||||
static extend_list(list_one, list_two) {
|
||||
for (element in list_two) {
|
||||
list_one.add(element)
|
||||
}
|
||||
return list_one
|
||||
}
|
||||
|
||||
static palindrome(n) {
|
||||
var result = true
|
||||
var num = n.toString
|
||||
for (i in (0..(num.count-1)/2)) {
|
||||
if (num.codePoints[i] != num.codePoints[num.count-1-i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
static max(sequence) {
|
||||
var max = sequence.take(1).toList[0]
|
||||
for (element in sequence) {
|
||||
if (element > max) {
|
||||
max = element
|
||||
}
|
||||
}
|
||||
|
||||
return max
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
class Euler001 {
|
||||
static multiples_of_three_and_five_below(n) {
|
||||
return (3..n-1).where { |i| (i % 3 == 0) || (i % 5 == 0) }
|
||||
}
|
||||
|
||||
static solution {
|
||||
return multiples_of_three_and_five_below(1000).reduce { |x,y| x + y }
|
||||
}
|
||||
}
|
||||
|
||||
System.print(Euler001.solution)
|
|
@ -0,0 +1,45 @@
|
|||
class FibonacciIterator is Sequence {
|
||||
construct new() {
|
||||
_a = 0
|
||||
_b = 1
|
||||
}
|
||||
|
||||
iterate(value) {
|
||||
if (value == null) {
|
||||
_a = 0
|
||||
_b = 1
|
||||
return 1
|
||||
} else {
|
||||
var temp = _b
|
||||
_b = _a + _b
|
||||
_a = temp
|
||||
return _b
|
||||
}
|
||||
}
|
||||
|
||||
iteratorValue(value) {
|
||||
return value
|
||||
}
|
||||
|
||||
until(value) {
|
||||
var list = []
|
||||
for (i in this) {
|
||||
if (i > value) {
|
||||
break
|
||||
} else {
|
||||
list.add(i)
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
}
|
||||
|
||||
class Euler002 {
|
||||
static solution {
|
||||
var myFib = FibonacciIterator.new()
|
||||
|
||||
return myFib.until(4000000).where { |n| n % 2 == 0 }.reduce { |x, y| x + y }
|
||||
}
|
||||
}
|
||||
|
||||
System.print(Euler002.solution)
|
|
@ -0,0 +1,9 @@
|
|||
import "./euler" for Prime
|
||||
|
||||
class Euler003 {
|
||||
static solution {
|
||||
return Prime.prime_factors(600851475143)[-1]
|
||||
}
|
||||
}
|
||||
|
||||
System.print(Euler003.solution)
|
|
@ -0,0 +1,30 @@
|
|||
import "./euler" for Utility
|
||||
|
||||
class Euler004 {
|
||||
static combination(list, k) {
|
||||
if (k == 0) {
|
||||
return [[]]
|
||||
}
|
||||
|
||||
if (list.isEmpty) {
|
||||
return []
|
||||
}
|
||||
|
||||
var x = list[0]
|
||||
var xs = list.skip(1).toList
|
||||
|
||||
return Utility.extend_list(combination(xs, k - 1).map{ |t|
|
||||
return Utility.extend_list([x], t)
|
||||
}.toList, combination(xs, k))
|
||||
}
|
||||
|
||||
static products_of_three_digits {
|
||||
return combination((100..999).toList, 2).map { |pair| pair.reduce { |x, y| x * y }}
|
||||
}
|
||||
|
||||
static solution {
|
||||
return Utility.max(products_of_three_digits.where { |x| Utility.palindrome(x) })
|
||||
}
|
||||
}
|
||||
|
||||
System.print(Euler004.solution)
|
Loading…
Reference in New Issue