191 Prize Strings.sf 652 B

12345678910111213141516171819202122232425262728293031323334
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 19 October 2017
  4. # https://github.com/trizen
  5. # Runtime: 0.143s
  6. # https://projecteuler.net/problem=191
  7. func p_191(Number days) {
  8. func (len=0, hasL=false, hasA1=false, hasA2=false) is cached {
  9. var count = ((len == days) ? 1 : 0)
  10. if (len < days) {
  11. if (!hasA1 || !hasA2) {
  12. count += __FUNC__(len + 1, hasL, hasA2, true)
  13. }
  14. count += __FUNC__(len + 1, hasL, hasA2, false)
  15. if (!hasL) {
  16. count += __FUNC__(len + 1, true, hasA2, false)
  17. }
  18. }
  19. return count
  20. }()
  21. }
  22. say p_191(30)