mirror of
https://gitlab.com/mfocko/CodeWars.git
synced 2024-12-26 14:21:31 +01:00
5kyu: add „Product of consecutive Fib numbers“
Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
parent
fd3b272a35
commit
1811ab3c70
2 changed files with 62 additions and 0 deletions
61
5kyu/product_of_consecutive_fib_numbers/solution.kt
Normal file
61
5kyu/product_of_consecutive_fib_numbers/solution.kt
Normal file
|
@ -0,0 +1,61 @@
|
|||
package prodfib
|
||||
|
||||
class FibonacciPairs : Iterable<Pair<Long, Long>> {
|
||||
private class FibonacciPairsIterator : Iterator<Pair<Long, Long>> {
|
||||
private var a: Long = 0
|
||||
private var b: Long = 1
|
||||
|
||||
/**
|
||||
* Returns `true` if the iteration has more elements.
|
||||
*/
|
||||
override fun hasNext(): Boolean = true
|
||||
|
||||
/**
|
||||
* Returns the next element in the iteration.
|
||||
*/
|
||||
override fun next(): Pair<Long, Long> {
|
||||
val current = a to b
|
||||
|
||||
a = current.second
|
||||
b = current.first + current.second
|
||||
|
||||
return current
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator over the elements of this object.
|
||||
*/
|
||||
override fun iterator(): Iterator<Pair<Long, Long>> = FibonacciPairsIterator()
|
||||
}
|
||||
|
||||
fun productFib(prod: Long): LongArray =
|
||||
FibonacciPairs()
|
||||
.asSequence()
|
||||
.dropWhile { (a, b) -> a * b < prod }
|
||||
.first()
|
||||
.let { (a, b) ->
|
||||
longArrayOf(
|
||||
a, b, if (a * b == prod) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun main() {
|
||||
(0 until 10).zip(FibonacciPairs()).forEach { (i, pair) ->
|
||||
println("$i → $pair")
|
||||
}
|
||||
|
||||
val tests = mapOf(
|
||||
4895L to longArrayOf(55, 89, 1),
|
||||
5895L to longArrayOf(89, 144, 0),
|
||||
714L to longArrayOf(21, 34, 1),
|
||||
800L to longArrayOf(34, 55, 0),
|
||||
)
|
||||
tests.forEach { (prod, expected) ->
|
||||
check(productFib(prod).contentEquals(expected))
|
||||
}
|
||||
}
|
|
@ -66,6 +66,7 @@
|
|||
- [Buddy Pairs](https://www.codewars.com/kata/59ccf051dcc4050f7800008f) - [solution](5kyu/buddy_pairs)
|
||||
- [Simple assembler interpreter](https://www.codewars.com/kata/58e24788e24ddee28e000053) - [solution](5kyu/simple_assembler_interpreter)
|
||||
- [Maximum subarray sum](https://www.codewars.com/kata/54521e9ec8e60bc4de000d6c) - [solution](5kyu/maximum_subarray_sum)
|
||||
- [Product of consecutive Fib numbers](https://www.codewars.com/kata/5541f58a944b85ce6d00006a) - [solution](5kyu/product_of_consecutive_fib_numbers)
|
||||
|
||||
### C#
|
||||
|
||||
|
|
Loading…
Reference in a new issue