Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 8
1

Clojure Подсчитать сколько раз встречается каждая буква

20.05.2015, 12:19. Показов 1503. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с задачкой. Заранее спасибо

Дана строка текста. Подсчитать, сколько раз встречается каждая буква в этой строке. Вывести результаты в форме «буква: количество» через пробел

Например: если дано "hello world", ответом будет "h:1 e:1 l:3 o:2 w:1 r:1 d:1".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2015, 12:19
Ответы с готовыми решениями:

Clojure Описать функцию, подсчитывающую, сколько раз lst2 встречается в lst1 и на каких позициях
Для списка литер lst1, представляющего собой некоторый текст и lst2, представляющего собой,...

Подсчитать, сколько раз в тексте встречается каждая буква
Уважаемые программисты помогите! Задача такая надо ввести текст, например: "INTERNET FORUM"...

Подсчитать сколько раз встречается каждая буква с учетом всех прописных и строчных букв
нужно чтобы программа определила в тексте какие из символов "а", "о", "у", "ю", "я",...

Пользователем задана строка. Подсчитать сколько раз встречается буква «а» и буква «с», если чаще встречается буква «а», значит вывести на экран выраж
Пользователем задана строка. Подсчитать сколько раз встречается буква «а» и буква «с», если чаще...

5
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
20.05.2015, 12:23 2
Lisp
1
2
3
4
5
6
7
8
9
10
(defun count-char (string)
            (let ((table (make-hash-table)))
              (loop
                 for el across string
                 do (incf (gethash el table 0))
                 finally 
                   (maphash #'(lambda (k v)
                                (format t "~A : ~A~%"
                                        (string k) v))
                            table))))
1
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
20.05.2015, 12:45 3
Clojure:
Lisp
1
2
3
4
5
6
7
8
9
10
11
(ns aeon.core)
 
(defn task [s]
  (doseq [[k v] (frequencies s)
          :when (Character/isLetter k)]
    (printf "%s:%s " k v)))
;; => #'aeon.core/task
 
(task "hello world")
;; h:1 e:1 l:3 o:2 w:1 r:1 d:1 
;; => nil
2
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
20.05.2015, 13:56 4
Задание несложное, но требования к формату вывода результата... Нет чтобы по-простому в свободной форме допустить... Чуть подпилил интерпретатор, но конечно с пробелами беда - у меня он в принципе их воспринимает как разделитель лексем, и пока не переписал его для устранения этого недостатка. Манипуляции с таблицей символов и попыткой подменить пробел волшебным символом с кодом 160 успеха тоже не принесли. Так что пока удовлетворимся подчеркиванием.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defn foo (l) (
    (defn collect (x l)
        (cond (null? l) (cons (cons x 1) nil)
              (eq? x (car (car l))) (cons (cons x (+ 1 (car (cdr (car l))))) (cdr l))
              (cons (car l) (collect x (cdr l)))))
    (foldl collect nil l)))
 
(defn show-pair (l) (str (car l) : (car (cdr l))))
(defn print-pair (l) (begin (print _) (print (car l)) (print :) (print (car (cdr l)))))
 
(def l (cons h (cons e (cons l (cons l (cons o (cons w (cons o (cons r (cons l d))))))))))
(printLn (str входящий список: l))
(def r (foo l))
(printLn (str результат: r))
(printLn (str или так: (map show-pair r)))
(printLn форматированный_результат:) (map print-pair r) (printLn _)
Код
(входящий список: (h e l l o w o r l d))
(результат: ((h 1) (e 1) (l 3) (o 2) (w 1) (r 1) (d 1)))
(или так: ((h : 1) (e : 1) (l : 3) (o : 2) (w : 1) (r : 1) (d : 1)))
форматированный_результат:
_h:1_e:1_l:3_o:2_w:1_r:1_d:1_
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
20.05.2015, 14:23 5
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun count-letters (pathname)
  (with-open-file (s pathname :direction :input)
    (loop for line = (read-line s nil nil)
          while line
          nconc (list-symb (drop-noise line)) into words
          finally (return (sort (list-pair words) #'> :key #'cdr)))))
 
(defun list-symb (s)
  (read-from-string (concatenate 'string "(" s ")")))
 
(defun drop-noise (s)
  (delete-if-not
   #'(lambda (x) (or (alpha-char-p x)
                     (equal x #\space)))
   s))
 
(defun list-pair (words &aux (hash (make-hash-table)) acc)
  (dolist (word words) (incf (gethash word hash 0)))
  (maphash #'(lambda (e n) (push `(,e . ,n) acc)) hash) acc)
 
> (count-letters "test.txt")
((A . 2) (E . 1) (V . 1) (S . 1))
Добавлено через 4 минуты
простой вариант:
Lisp
1
2
3
4
5
(defun count-letters (s &aux (z (remove-duplicates s)))
  (loop for a across z collect (List a (count a s))))
 
> (count-letters "aaabbc")
((#\a 3) (#\b 2) (#\c 1))
Добавлено через 1 минуту
Lisp
1
2
3
4
5
(defun count-letters (s &aux (z (remove-duplicates s)))
  (loop for a across z collect `(,a ,(count a s))))
 
> (count-letters "aaabbc")
((#\a 3) (#\b 2) (#\c 1))
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
20.05.2015, 15:59 6
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun freq (txt)
  (let ((arr (replicate 0 256))
        (res ""))
    (iter (for a in-string txt)
      (let ((p (strAsc a)))
        (setf (nth p arr) (+ 1 (nth p arr)))))
    (iter (for i in arr) (for j from 0 to 255)
          (if (> i 0) (setq res (strCat res (strChr j) ": " (fix2str i) " "))))
    res ))
 
 
==> freq
 
(freq "Проба пера")
 
==> " : 1 П: 1 а: 2 б: 1 е: 1 о: 1 п: 1 р: 2 "
Добавлено через 21 минуту
Для HomeLisp вот так будет быстрее:

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun freq (txt)
  (let ((arr (replicate 0 256))
        (res ""))
    (iter (for a in-string txt)
      (let* ((p (strAsc a))
             (pp (+ p 1)) 
             (z (+ 1 (getEl arr pp))))
            (putEl arr pp z))) 
    (iter (for i in arr) (for j from 0 to 255)
          (if (> i 0) (setq res (strCat res (strChr j) ": " (fix2str i) " "))))
    res ))
0
20.05.2015, 15:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 15:59
Помогаю со студенческими работами здесь

Сколько раз каждая буква встречается в тексте
Как сделать так, чтобы мне выводило сколько раз каждая буква встречалась в тексте? И еще, как можно...

Найти сколько раз в массиве встречается каждая буква
В массиве из N элементов, записаны латинские буквы (без алфавитного порядка). Отсортировать массив...

Сколько раз в файле встречается каждая буква алфавита
Задан символьный файл. Определите, сколько раз в заданном файле встречается каждая буква алфавита

Сколько раз каждая буква из алфавита встречается в последовательности
Задачу я получается решил,только теперь не знаю как вывести сколько раз используется каждая буква...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru