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

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

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

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

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

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

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

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
18.12.2013, 20:47
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  [ТС]
Не совсем так, например
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
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
18.12.2013, 21: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
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  [ТС]
в кошке-мышки ответ должен быть [3,3]
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
19.12.2013, 01:49
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2013, 01:49
Помогаю со студенческими работами здесь

Сравнивая элементы двух списков вернуть пару первых не равных элементов
Привет! Сравнивая элементы двух списков вернуть пару первых не равных элементов f1 :: Ord a =&gt; -&gt; -&gt; (a,a) f1 _ = error...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru