Skip to content

Commit fc1185d

Browse files
committed
Putting Eric's PalinSamdrome into for-comprehension #13
1 parent a761c48 commit fc1185d

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/test/scala/org/bescala/projecteuler/problems/Problem004.scala

+41
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,45 @@ class Problem004 extends EulerSuite {
106106
}
107107
find(start)
108108
}
109+
110+
/*
111+
euler(problem(4), "PalinSamdrome") {
112+
object PalinSamdrome {
113+
val N = 99999999
114+
val N2 = (N * N).toString
115+
val palindrome: (Long, Long, Long) =
116+
if (N2 == N2.reverse) (N * N, N, N)
117+
else {
118+
(Iterator.from(N, -1)
119+
.map { n => (n - 1, n)}
120+
.flatMap { case (n1, n2) =>
121+
(0L to 1) flatMap { deltaOne =>
122+
(0L to N - n2 + deltaOne) map { d2 => (n1 - d2, n2 - deltaOne + d2)}
123+
}
124+
})
125+
.map { case (n1, n2) => (n1 * n2, n1, n2)}
126+
.find { case (palindromeCandidate, _, _) => palindromeCandidate.toString == palindromeCandidate.toString.reverse}
127+
.get
128+
}
129+
}
130+
//println(PalinSamdrome.palindrome.toString)
131+
PalinSamdrome.palindrome._1
132+
}
133+
*/
134+
135+
euler(problem(4), "Sam's PalinSamdrome") {
136+
def find(start: Long) = {
137+
(for {
138+
n2 <- Iterator.from(start.toInt, -1)
139+
n1 = n2 - 1
140+
deltaOne <- 0L to 1
141+
d2 <- 0L to (start - n2 + deltaOne)
142+
i = n1 - d2
143+
j = n2 - deltaOne + d2
144+
} yield i * j)
145+
.find(p => p.toString == p.toString.reverse)
146+
.get
147+
}
148+
find(start)
149+
}
109150
}

0 commit comments

Comments
 (0)