fork download
  1. ** input loop
  2. ** memory layout: mdt_dt_d~dt_*
  3. * m: the highest digit marker
  4. * d: each digits
  5. * *: terminater
  6. m->d,+[
  7. >t+++++++[-<d------->t]
  8. >>d,+ (slide)]
  9. *-<+[-<+]m
  10. ** halving loop
  11. ** memory layout:
  12. ** M_mn__n__n~__n__*p
  13. ** ~Rh_rhn~__n__*p
  14. ** ~Rh_*P_p
  15. ** M: new highest marker
  16. ** hr: result of d divmod 2
  17. ** R: left r
  18. ** pP: popcount ( previous and new )
  19. m>n+[-
  20. ** set a new marker
  21. <<<M-
  22. ** n loop
  23. >>>n+[-
  24. ** borrow
  25. R<<<<[->>>>n++++++++++<<<<R]
  26. ** divmod by 2
  27. >>>>n[<r[-<h+>>>_]>n_?[n<h+>>>_]<<n-]
  28. >>>n+ (slide)]
  29. ** move p to P and add R ( the last R )
  30. >p[-<<P+>>p]<<<<<R[->>>P+<<<R]
  31. ** set a new terminater and return to the marker
  32. >>*-<+[-<+]M
  33. ** shrink if the highest digit is zero
  34. >[<<<]>>>h
  35. hn+ (slide)]
  36.  
  37. ** divmod loop **
  38. >p[
  39. ** divmod by 10
  40. >++++++++++
  41. <[->-[>+>>]>[+[-<+>]>+>>]<<<<<]
  42. >[-]>+
  43. >]
  44. ** output loop **
  45. <[-
  46. ** convert a number to a character code
  47. >++++++[-<++++++++>]
  48. <.
  49. <<<]
  50.  
Success #stdin #stdout 0s 1912KB
stdin
893
stdout
8