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

Сравнение двух списков

18.12.2013, 20:01. Показов 3159. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно с помощью функций высшего порядка узнать какое кол-во элементов есть как в первом, так и во втором списке, и сколько из них на соотв. местах? Пример: 1 список - 1,2,3,4,5; 2 список - 1,3,7,9,8; Ответ - 1 на своем месте, 1- есть, но не на своем месте
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2013, 20:01
Ответы с готовыми решениями:

Перемножение двух списков
Помогите пожалуйста написать программу перемножения двух списков. Например: (1 + 2 + 3) * (4 + 5...

Написание функции сравнения двух списков
Здравствуйте. Работа заставила изучать Haskell. Столкнулся с необходимостью написания функции, на...

Написать функцию попарного сложения элементов двух списков
Написать функцию попарного сложения элементов двух СПИСКОВ. Учесть, что списки м.б. РАЗНОЙ ДЛИНЫ!!!...

Сравнивая элементы двух списков вернуть пару первых не равных элементов
Привет! Сравнивая элементы двух списков вернуть пару первых не равных элементов f1 :: Ord a => ...

5
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
18.12.2013, 20:47 2
Haskell
1
2
3
4
5
6
7
8
9
-- Пересечение двух списков
 
intersect :: (Eq a) => [a] -> [a] -> [a]
intersect x y = filter (\ xx -> (xx `elem` y)) x
 
-- длина пересечения
 
sizeint :: (Eq a) => [a] -> [a] -> Int
sizeint x y = length $ intersect x y
Добавлено через 20 минут
Продолжаем:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- количество одинаковых элементов, стоящих на одинаковых местах
 
insameplace :: (Eq a) => [a] -> [a] -> Int
insameplace x y = foldl (\ acc n -> if (x !! n)==(y !! n) then acc+1 else acc) 0 [0,1..mi]
                  where mi=((length x) `min` (length y))-1 
 
-- Окончательное решение:
 
task :: (Eq a) => [a] -> [a] -> [Int]
task x y = [(sizeint x y) , (insameplace x y)]
 
 
Main> task [1,2,3,4] [1,2,3,4,5,6,7]
 
[4,4]
 
Main> task [1,2,5,3,4,8,9] [1,2,3,4,5,6,7]
 
[5,2]             
 
Main> task "bottom" "button"
 
[5,4]      
 
Main> task "кошка" "мышка"
 
[4,3]
0
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 3
18.12.2013, 21:15  [ТС] 3
Не совсем так, например
1: 1,1,3,4
2: 1,2,3,4

совпадений - 3
(т.к. единичка из 2 списка уже использована в совпадениях, она не войдет в общие элементы)
общих элементов - 3 (1,2,3)

То есть например :
1,1,2,3
5,6,1,1

ответ 2 общих элемента
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
18.12.2013, 21:46 4
А так:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
insameplace :: (Eq a) => [a] -> [a] -> Int
insameplace x y = foldl (\ acc n -> if (x !! n)==(y !! n) then acc+1 else acc) 0 [0,1..mi]
                  where mi=((length x) `min` (length y))-1 
                  
iscommon :: (Eq a) => [a] -> [a] -> [a]
iscommon x y | (lx >= ly) = filter (\ xx -> (xx `elem` y)) x
             | otherwise = filter (\ yy -> (yy `elem` x)) y
               where lx=length x
                     ly=length y               
 
sizecomm :: (Eq a) => [a] -> [a] -> Int 
sizecomm x y = length $ iscommon x y                   
                     
task :: (Eq a) => [a] -> [a] -> [Int]
task x y = [(sizecomm x y) , (insameplace x y)]                  
 
Main> task [1,1,2,3] [5,6,1,1]
 
[2,0]
 
Main> task [1,1,2,3] [5,6,1,1]
 
[2,0]
 
Main> task "кошка" "мышка"
 
[4,3]
0
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 3
18.12.2013, 22:09  [ТС] 5
в кошке-мышки ответ должен быть [3,3]
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
19.12.2013, 01:49 6
Цитата Сообщение от darktemplar90 Посмотреть сообщение
ответ должен быть [3,3]
- почему?

Добавлено через 2 часа 46 минут
Ну, если очень надо:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
insameplace :: (Eq a) => [a] -> [a] -> Int
insameplace x y = foldl (\ acc n -> if (x !! n)==(y !! n) then acc+1 else acc) 0 [0,1..mi]
                  where mi=((length x) `min` (length y))-1 
 
iscommon :: (Eq a) => [a] -> [a] -> [a]
iscommon x y | (lxy <= lyx) = xy
             | otherwise = yx
              where xy = filter (\ xx -> (xx `elem` y)) x
                    yx = filter (\ yy -> (yy `elem` x)) y
                    lxy = length xy
                    lyx = length yx
                  
sizecomm :: (Eq a) => [a] -> [a] -> Int 
sizecomm x y = length $ iscommon x y                   
                     
task :: (Eq a) => [a] -> [a] -> [Int]
task x y = [(sizecomm x y) , (insameplace x y)] 
 
-- Проверка:
 
Main> task "êîøêà" "ìûøêà"
 
[3,3]
 
Main> task [1,1,2,3] [5,6,1,1]
 
[2,0]
 
Main> task [1,2,3,4] [1,2,3,4,5,6,7]
 
[4,4]
0
19.12.2013, 01:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2013, 01:49
Помогаю со студенческими работами здесь

Написать программу, которая получает список из списков из списков чисел
Всем привет, мне нужно написать программу, которая получает список из списков из списков чисел,...

Сравнение двух списков
Здравствуйте, подскажите пожалуйста, пол дня гуглю, не нашёл подходящей информации. Нужно удалить...

Сравнение двух списков
Доброго всем времени суток. Изначальное задание было вот таким - &quot;написать программу, содержащую...

Сравнение двух списков
Есть списки log0 и log3, в результат хочу выписать те пары элементов, которые в этих двух списках...


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

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