Practice problems ================= `Project Euler `_ and `99 Scala Problems `_ or `99 Python Problems `_ contain collections of small coding problems suitable for functional programming - many of them are also good exercises for **nuts-flow**. 99 Problems ----------- A few `99 Scala Problems `_ with solutions using **nuts-flow**: >>> from nutsflow import * >>> from nutsflow import _ **P01** : Find the last element of a list. >>> [1, 1, 2, 3, 5, 8] >> Tail(1) [8] **P02** : Find the last but one element of a list. >>> [1, 1, 2, 3, 5, 8] >> Tail(2) >> Head(1) [5] **P03** : Find the Kth element of a list. >>> [1, 1, 2, 3, 5, 8] >> Nth(2) 2 >>> [1, 1, 2, 3, 5, 8] >> Drop(2) >> Head(1) [2] **P04** : Find the number of elements of a list. >>> [1, 1, 2, 3, 5, 8] >> Count() 6 **P14** : Duplicate the elements of a list. >>> Range(5) >> Clone(2) >> Collect() [0, 0, 1, 1, 2, 2, 3, 3, 4, 4] **P15** : Duplicate the elements of a list a given number of times. >>> Range(5) >> Clone(n) >> Collect() [0, 0, 1, 1, 2, 2, 3, 3, 4, 4] **P16** : Drop every Nth element from a list. >>> n==3 >>> lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] >>> lst >> Chunk(n, list) >> Map(Take(n-1)) >> Flatten() >> Collect() ['a', 'b', 'd', 'e', 'g', 'h', 'j', 'k'] Euler ----- Some `Project Euler `_ with solutions using **nuts-flow**. **P1**: Multiples of 3 and 5 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. >>> IsMultiple = nut_filter(lambda x: x % 3 == 0 or x % 5 == 0) >>> Range(1, 1000) >> IsMultiple() >> Sum() 233168 **P2**: Even Fibonacci numbers Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms. >>> @nut_source ... def Fib(): ... a, b = 1, 1 ... while True: ... a, b = b, a + b ... yield a >>> IsEven = nut_filter(lambda x: x%2 == 0) >>> Fib() >> TakeWhile(_ < 4000000) >> IsEven() >> Sum() 4613732 **P4**: Largest palindrome product A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99. Find the largest palindrome made from the product of two 3-digit numbers. >>> n1, n2 = 100, 1000 >>> IsPalindrom = nut_filter(lambda p: p == p[::-1]) >>> BuildString = nut_function(lambda (a, b): str(a * b)) >>> product = Product(Range(n1, n2), repeat=2) >>> product >> BuildString() >> IsPalindrom() >> Max(int) '906609' **P6**: Sum square difference The sum of the squares of the first ten natural numbers is, 1^2 + 2^2 + ... + 10^2 = 385 The square of the sum of the first ten natural numbers is, (1 + 2 + ... + 10)^2 = 55^2 = 3025 Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640. Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum. >>> sum_sqr = Range(1, 11) >> Square() >> Sum() >>> sqr_sum = (Range(1, 11) >> Sum())**2 >>> sqr_sum - sum_sqr 2640