import lyng.time val WORK_SIZE = 200 val TASK_COUNT = 10 fn piSpigot(iThread: Int, n: Int) { var pi = [] val boxes = n * 10 / 3 var reminders = List.fill(boxes) { 2 } var heldDigits = 0 for (i in 0..n) { var carriedOver = 0 var sum = 0 for (k in 1..boxes) { val j = boxes - k val denom = j * 2 + 1 reminders[j] *= 10 sum = reminders[j] + carriedOver val quotient = sum / denom reminders[j] = sum % denom carriedOver = quotient * j } reminders[0] = sum % 10 var q = sum / 10 if (q == 9) { ++heldDigits } else if (q == 10) { q = 0 for (k in 1..heldDigits) { var replaced = pi[i - k] if (replaced == 9) { replaced = 0 } else { ++replaced } pi[i - k] = replaced } heldDigits = 1 } else { heldDigits = 1 } pi.add(q) } var s = "" for (i in (n - 8)..