PasteRack.org
Paste # 42649
2019-12-17 10:11:01

Fork as a new paste.

Paste viewed 753 times.


Embed:

  1. #lang racket
  2.  
  3. ;; Задание 1
  4. (define (process-text text old-word new-word)
  5.   (map (lambda (sentence)
  6.          (map (lambda (word)
  7.                 (if (equal? word old-word)
  8.                     new-word
  9.                     word))
  10.               sentence))
  11.        text))
  12.  
  13. (define test-text
  14. '(
  15.   (one two three)
  16.   (five six one)
  17.   (seven one eight)
  18.   (nine ten eleven)))
  19.  
  20. test-text
  21. (process-text test-text 'one 'two)
  22.  
  23. ;; Задание 2
  24.  
  25. (define (vowel? char)
  26.   (if (regexp-match #rx"[ауоыиэяюёеАУОЫИЭЯЮЁЕ]"
  27.                     (string char))
  28.       #t
  29.       #f))
  30.  
  31. (define (consonant? char)
  32.   (if (regexp-match #rx"[бвгджзйклмнпрстфхцчшщБВГДЖЗЙКЛМНПРСТФХЦЧШЩ]"
  33.                     (string char))
  34.       #t
  35.       #f))
  36.  
  37. (define (delimiter? char)
  38.   (if (regexp-match #rx"[ьъЬЪ]"
  39.                     (string char))
  40.       #t
  41.       #f))
  42.  
  43. (define (sonorous? char)
  44.   (if (regexp-match #rx"[лмнрйЛМНРЙ]"
  45.                     (string char))
  46.       #t
  47.       #f))
  48.  
  49. (define (skip-syllables chars)
  50.   (let loop ([chars chars]
  51.              [syllable null])
  52.     (if (null? chars)
  53.         (cons chars syllable)
  54.         (if (not (consonant? (car chars)))
  55.             (cons chars syllable)
  56.             (loop (cdr chars)
  57.                   (cons (car chars) syllable))))))
  58.  
  59. (define (word->syllables word)
  60.   (reverse
  61.    (map
  62.     (compose list->string reverse)
  63.     (let loop ([chars (string->list word)]
  64.                [syllables null])
  65.       (let* ([chars-syl (skip-syllables chars)]
  66.              [chars (car chars-syl)]
  67.              [syllable (cdr chars-syl)])
  68.         (match chars
  69.                [`(,x ,y . ,z) #:when (and (delimiter? x)
  70.                                           (vowel? y)
  71.                                           (list? z))
  72.                 (loop (cdr chars)
  73.                       (cons (append (cons x syllable)
  74.                                     (car syllables))
  75.                             (cdr syllables)))]
  76.                [`(,x ,y ,z . ,w) #:when (and (vowel? x)
  77.                                              (sonorous? y)
  78.                                              (consonant? z)
  79.                                              (list? w))
  80.                 (loop (cddr chars)
  81.                       (cons `(,y ,x . ,syllable)
  82.                             syllables))]
  83.                [`(,x ,y ,z . ,w) #:when (and (vowel? x)
  84.                                              (consonant? y)
  85.                                              (delimiter? z)
  86.                                              (list? w))
  87.                 (loop (cdddr chars)
  88.                       (cons `(,z ,y ,x . ,syllable)
  89.                             syllables))]
  90.                [(cons x y) #:when (and (vowel? x)
  91.                                        (list? y))
  92.                 (loop (cdr chars)
  93.                       (cons (cons x syllable)
  94.                             syllables))]
  95.                [null
  96.                 (if (not (pair? syllables))
  97.                     null
  98.                     (cons (append syllable
  99.                                   (car syllables))
  100.                           (cdr syllables)))]
  101.                [_
  102.                 syllables]))))))
  103.  
  104. (define (sentence->syllables sentence)
  105.   (map
  106.     word->syllables
  107.     (string-split sentence)))
  108.  
  109. (sentence->syllables "Католическая философия в том смысле в котором я буду применять этот термин это философское направление господствовавшее в европейской мысли со времен Августина до эпохи возрождения")
  110.  
  111. ;; Задание 3
  112. (define (gossip keyword sentence)
  113.   (substring
  114.    (foldl (lambda (str1 str2)
  115.             (string-append str2 " " str1))
  116.           ""
  117.           (map glue-phrase
  118.                (let ([keyword (word->syllables keyword)]
  119.                      [words (filter pair? (sentence->syllables sentence))])
  120.                  (map (curry encode-word keyword)
  121.                       words))))
  122.    1))
  123.  
  124. (define (encode-word keyword word)
  125.       (cons (cons (car keyword) (cdr word))
  126.             (list (cons (car word) (cdr keyword)))))
  127.  
  128. (define (glue-phrase phrase)
  129.   (string-append
  130.    (apply string-append
  131.           (car phrase))
  132.    " "
  133.    (apply string-append
  134.           (cadr phrase))))
  135.  
  136. (gossip "груша" "Католическая философия в том смысле в котором я буду применять этот термин это философское направление господствовавшее в европейской мысли со времен Августина до эпохи возрождения")
  137.  
  138.  
  139. ;; Задание 4
  140.  
  141. (define (gypsy keyword sentence)
  142.   (let ([result
  143.          (foldl (lambda (str1 str2)
  144.                   (string-append str1 " " str2))
  145.                 ""
  146.                 (map glue-phrase
  147.                      (let ([words (filter pair? (sentence->syllables sentence))]
  148.                            [keyword (word->syllables keyword)])
  149.                        (let loop ([words words]
  150.                                   [processed null])
  151.                          (match words
  152.                                 [`(,x ,y . ,z)
  153.                                  (loop (cdr words)
  154.                                        (cons (encode-word y x) processed))]
  155.                                 [`(,x . ,z) #:when (null? z)
  156.                                  (cons (encode-word keyword x) processed)]
  157.                                 [_
  158.                                  processed])))))])
  159.     (substring result 0 (- (string-length result) 1))))
  160.  
  161.  (gypsy "груша" "Католическая философия в том смысле в котором я буду применять этот термин это философское направление господствовавшее в европейской мысли со времен Августина до эпохи возрождения")

=>

'((one two three) (five six one) (seven one eight) (nine ten eleven))

'((two two three) (five six two) (seven two eight) (nine ten eleven))

'(("Ка" "то" "ли" "че" "ска" "я")

  ("фи" "ло" "со" "фи" "я")

  ()

  ("том")

  ("смы" "сле")

  ()

  ("ко" "то" "ром")

  ("я")

  ("бу" "ду")

  ("при" "ме" "нять")

  ("э" "тот")

  ("тер" "мин")

  ("э" "то")

  ("фи" "ло" "со" "фско" "е")

  ("на" "пра" "вле" "ни" "е")

  ("го" "спо" "дство" "ва" "вше" "е")

  ()

  ("е" "вро" "пей" "ской")

  ("мы" "сли")

  ("со")

  ("вре" "мен")

  ("А" "вгу" "сти" "на")

  ("до")

  ("э" "по" "хи")

  ("во" "зро" "жде" "ни" "я"))

"грутолическая Каша грулософия фиша гру томша грусле смыша грутором коша гру яша груду буша груменять приша грутот эша грумин терша груто эша грулософское фиша груправление наша грусподствовавшее гоша грувропейской еша грусли мыша гру соша грумен вреша грувгустина Аша гру доша групохи эша грузрождения воша"

"фитолическая Калософия томлософия фи смы томсле косле смытором ятором ко бу яду приду буменять эменять притот тертот эмин эмин терто фито элософское налософское фиправление гоправление насподствовавшее есподствовавшее говропейской мывропейской если сосли мы вре сомен Амен вревгустина довгустина А э допохи вопохи эзрождения грузрождения воша"