Advertisement
Guest User

Untitled

a guest
Oct 7th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 3.57 KB | None | 0 0
  1. #lang scheme/base
  2.  
  3. (define (funI lst)
  4.   (cond ((null? lst) '()))
  5.   ; хэлпер - текущее-значение текущий-индекс текущий-максимум остаток-списка список-индексов-максимальных-элементов
  6.   (define (helper value index cur-max rest max-indexes)
  7.     (cond ((null? value) (reverse max-indexes))
  8.           ((null? rest) (
  9.                         cond ((> value cur-max) (list index))
  10.                               ((= value cur-max) (reverse (cons index max-indexes)))
  11.                               (else (reverse max-indexes))))
  12.           ((> value cur-max) (helper (car rest) (+ 1 index) value (cdr rest) (list index)))
  13.           ((= value cur-max) (helper (car rest) (+ 1 index) cur-max (cdr rest) (cons index max-indexes)))
  14.           (else (helper (car rest) (+ 1 index) cur-max (cdr rest) max-indexes))))
  15.   (helper (car lst) 0 -inf.0 (cdr lst) '())
  16.  
  17. )
  18.  
  19. (define (funIIa n)
  20.   ;проверка на простоту
  21.   (define (simple x)
  22.     (cond ((or (= x 0) (= x 1) (= x 2) (= x 3)) #t)
  23.           (else
  24.     (andmap (lambda (y) (not (zero? (remainder x y)))) (build-list (- x 2) (lambda (x) (+ 2 x)))))))
  25.   ;проверка на то, является ли х делителем у
  26.   (define (divider x y) (zero? (remainder y x)))
  27.   (define (helper original-n n)
  28.     (cond ((= n 1) '())
  29.           ((and (simple n) (divider n original-n)) (cons n (helper original-n (- n 1))))
  30.           (else (helper original-n (- n 1))) ))
  31.  
  32.   (helper n n))
  33.  
  34. ; (funIIa 2)
  35.  
  36. (define (funIIb n)
  37.   ;проверка на простоту
  38.   (define (simple x)
  39.     (andmap (lambda (y) (not (zero? (remainder x y)))) (build-list (- x 2) (lambda (x) (+ 2 x)))))
  40.   ;проверка на то, является ли х делителем у
  41.   (define (divider x y) (zero? (remainder y x)))
  42.   (cond ((= n 1) '())
  43.         ((= n 2) (list 2)))
  44.   (reverse (filter (lambda (x) (and (simple x) (divider x n))) (build-list (- n 1) (lambda (x) (+ 2 x))))))
  45.  
  46. ; (funIIb 12)
  47.  
  48. (define (funIII k)
  49.   (define (fib-n n)
  50.     (define (helper result a1 a2 n)
  51.       (if (> (+ a1 a2) n) result (helper (cons (+ a1 a2) result) a2 (+ a1 a2) n)))
  52.     (cond ((= n 1) (list 1))
  53.           ((= n 2) (list 2 1))
  54.           (else (helper (list 2 1) 1 2 n))))
  55.  
  56.   (define (num-to-fib-bits result number fib-list)
  57.     (cond ((and (= number 0) (null? fib-list)) result)
  58.           ((>= number (car fib-list)) (num-to-fib-bits (cons 1 result) (- number (car fib-list)) (cdr fib-list)))
  59.           (else (num-to-fib-bits (cons 0 result) number (cdr fib-list)))))
  60.  
  61.   (define (bits-to-num result bits power)
  62.     (cond ((null? bits) result)
  63.           ((= 1 (car bits)) (bits-to-num (+ result power) (cdr bits) (* power 2)))
  64.           (else (bits-to-num result (cdr bits) (* power 2)))))
  65.  
  66.   (bits-to-num 0 (num-to-fib-bits '() k (fib-n k)) 1)
  67.   )
  68.  
  69. ; (funIII 9)
  70.  
  71. (define (funIV tree h1 h2)
  72.   ;удовлетворяет ли элемент условиям
  73.   ;значение высота-1 высота-2 текущая-высота
  74.   (define (pred val h1 h2 cur-h) (if (and (< val 0) (or (and (<= cur-h h1) (>= cur-h h2)) (and (>= cur-h h1) (<= cur-h h2)))) 1 0))
  75.   (define (helper tree h1 h2 cur-h)
  76.     (cond ((= (vector-length tree) 0) 0)
  77.           (else (+ (pred (vector-ref tree 0) h1 h2 cur-h) (foldl + 0 (map (lambda (x) (helper x h1 h2 (+ 1 cur-h))) (cdr (vector->list tree))))))))
  78.   (helper tree h1 h2 0)
  79. )
  80.  
  81. ;(funI (list -1 0 1 -1 0 1 -1))
  82. ;(funIV #(1 #(2 #(-3 #()) #(3)) #(-2 #(4) #(0) #(-4))) 1 0)
  83.  
  84. (define (funV-cps tree h1 h2 cc)
  85.   )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement