fork download
  1. trait CollatzPart1 { self: CollatzPart2 with CollatzPart3 =>
  2. def apply(x: Int): Unit = {
  3. print(s"$x, ")
  4. if (x == 1) {
  5. println("done")
  6. } else if (x % 2 == 1) {
  7. methodOdd(x)
  8. } else {
  9. methodEven(x)
  10. }
  11. }
  12. }
  13. trait CollatzPart2 { self: CollatzPart1 =>
  14. def methodOdd(x: Int): Unit =
  15. apply(x * 3 + 1)
  16. }
  17. trait CollatzPart3 { self: CollatzPart1 =>
  18. def methodEven(x: Int): Unit =
  19. apply(x / 2)
  20. }
  21. object Collatz extends CollatzPart1 with CollatzPart2 with CollatzPart3
  22.  
  23. object Main extends App {
  24. Collatz(5)
  25. Collatz(8)
  26. Collatz(345)
  27. }
Success #stdin #stdout 0.42s 2181632KB
stdin
Standard input is empty
stdout
5, 16, 8, 4, 2, 1, done
8, 4, 2, 1, done
345, 1036, 518, 259, 778, 389, 1168, 584, 292, 146, 73, 220, 110, 55, 166, 83, 250, 125, 376, 188, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1, done