diff options
[FP/HW1] Finished second exercise, but it has bugs
1 files changed, 26 insertions, 4 deletions
| -rw-r--r-- | Year 2/Functional Programming/hw1.rkt | 30 |
diff --git a/Year 2/Functional Programming/hw1.rkt b/Year 2/Functional Programming/hw1.rkt index 056df23..3f78abd 100644 --- a/Year 2/Functional Programming/hw1.rkt +++ b/Year 2/Functional Programming/hw1.rkt @@ -19,17 +19,39 @@ ;;; Задача 2 (define (swap-last2-digits n) - (+ (* (quotient n 100) 100) (* (remainder n 10) 10) (quotient (remainder n 100) 10))) + (+ (* (quotient n 100) 100) + (* (remainder n 10) 10) + (quotient (remainder n 100) 10))) (define (rotate-left n) - (if (< n 9) + (if (<= n 9) n - (swap-last2-digits (+ (* (rotate-left (quotient n 10)) 10) (remainder n 10))))) + (swap-last2-digits (+ (* (rotate-left (quotient n 10)) 10) + (remainder n 10))))) (define (pow10 n) (if (= n 0) 1 (* 10 (pow10 (sub1 n))))) +(define (numlen n) + (if (= n 0) + 0 + (add1 (numlen (quotient n 10))))) + (define (rotate-left-preserved n d) - (rotate-left (remainder n (pow10 d)))) + (define pbl (pow10 (- (numlen n) d))) + (+ (* (quotient n pbl) pbl) + (if (< (remainder n pbl) pbl) + (* (rotate-left (remainder n pbl)) 10) + (rotate-left (remainder n pbl))))) + +(define (max-rot n) + (define nrlen (sub1 (numlen n))) + (define (helper i current biggest) + (if (>= i nrlen) + biggest + (helper (add1 i) + (rotate-left-preserved current (add1 i)) + (if (> current biggest) current biggest)))) + (helper 0 (rotate-left n) 0)) |
