2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
||||||
1 | ||||||
Написать программу, которая получает список из списков из списков чисел05.05.2017, 19:08. Показов 2326. Ответов 20
Метки нет (Все метки)
Всем привет,
мне нужно написать программу, которая получает список из списков из списков чисел, [[[1,2],[3,4]],[[5,6],[7,8]],[[10,11],[12,13]]] примерно так , и потом суммирует самые внутренние списки. Tо есть получим 10, 26, 46 , а потом выкидаем из списка списки, у которых сумма меньше или равна 20 и переворачиваем список. Итого получим [46,26]. Я начинающий программист, кто-то может помочь с написанием программы? Моя идея:
0
|
05.05.2017, 19:08 | |
Ответы с готовыми решениями:
20
Написать программу, которая создает список из n раз повторенных списков Список списков списков чисел написать функцию которая на основе двух списков формирует новый список в котором чередуются элементы исходных Clojure Реализовать функцию, которая из двух списков, состоящих из чисел, строит список из парных разностей |
шКодер самоучка
|
||||||
05.05.2017, 19:42 | 2 | |||||
Сообщение было отмечено Ellie Tetka как решение
Решение
3
|
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
|
05.05.2017, 19:47 [ТС] | 3 |
Ух ты это реально работает!!!
Вы не могли бы мне объяснить построчно, как это работает??? Это случайно не patter matching? что такое patter matching..? его нельзя использовать в этом задании...
0
|
431 / 302 / 89
Регистрация: 03.12.2015
Сообщений: 738
|
||||||
05.05.2017, 20:06 | 4 | |||||
Сообщение было отмечено Max Dark как решение
Решение
[ [[1,2],[3,4]], [[5,6],[7,8]], [[10,11],[12,13]] ] map (sum.concat) xs берет каждый элемент, объединяется все элементы в нем, и затем суммирует Затем отбираются числа > 20 с помощью filter (>20) Затем список переворачивается с помощью reverse Если непонятно: map (sum.concat) то же, что и map (\lst -> sum $ concat lst) filter (>20) то же, что и filter (\x -> x > 20)
4
|
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
|
05.05.2017, 20:08 [ТС] | 5 |
0
|
шКодер самоучка
|
|
05.05.2017, 20:31 | 6 |
map проходится по списку и вызывает для каждого элемента функцию sunIntern, объявленную в where, затем filter отбирает элементы > 20 и reverse переворачивает результат отбора
функция sunIntern суммирует списки используя map для сложения элементов подсписков. нет, это просто цепочка функций. совпадение по шаблону - выбор реализации функции в зависимости от значения параметров - например, в вашем коде он использовался. lst - имя параметраОзначает, что дальше пойдет lambda-функция
3
|
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
|
05.05.2017, 20:35 [ТС] | 7 |
Спасибо!
так, не правильно задала вопрос, название функции мне уже известно, что делает лямбда функция...?
0
|
шКодер самоучка
|
|
05.05.2017, 20:36 | 8 |
1
|
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
|
05.05.2017, 20:42 [ТС] | 9 |
0
|
Модератор
|
|||||||||||
05.05.2017, 21:15 | 10 | ||||||||||
Сообщение было отмечено Max Dark как решение
Решение
Можно его спрятать
Добавлено через 5 минут Собственно, вот как реализована сама map в базовом пакете (о есть, та, что использована в примерах выше):
2
|
шКодер самоучка
|
||||||
05.05.2017, 21:16 | 11 | |||||
Можно, но тогда потребуется pattern matching - map использует его внутри
примерная замена для map
2
|
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
|
05.05.2017, 21:26 [ТС] | 12 |
Спасибо Вам Огромное!!!
0
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
06.05.2017, 12:16 | 13 |
1
|
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
|
|
06.05.2017, 14:32 [ТС] | 14 |
0
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
06.05.2017, 14:37 | 15 |
Если не считать, что мой вариант считается за o(n), а твой за o(n^2), то никакой...
0
|
Модератор
|
||||||
06.05.2017, 17:09 | 16 | |||||
Небольшое обобщение (20 - число, ничем не выделяющееся):
0
|
06.05.2017, 18:44 | 17 |
А мне кажется, наоборот, надо бить по мозгам за такие категоричные непроверенные утверждения. Из серии "слышал звон". Конкатенация в хвост списку из одного элемента - это О(1) как по времени так и по памяти. И ничем не отличается от конса в голову. Я вообще не удивлюсь, если оба варианта дадут одинаковый коре или ассемблерный код.
0
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
06.05.2017, 19:13 | 18 |
Скажем так, какое-то время назад такая проблема реально была... сейчас такой код действительно собирается нормально (я посмотрел в какую сторону ассоциативность). Но всё-таки с конкатенацией нужно быть осторожным :-)
0
|
Curry
|
06.05.2017, 19:25
#19
|
0
|
06.05.2017, 23:44 | 20 |
Araneo, проблема может случиться (и то не всегда, надо смотреть контекст) при конкатенации в хвост длинного или возрастающего списка. Здесь же просто криво записанный конс - оборачиваем элемент в список длиной 1 и консим к нему в хвост. Даже если не будет оптимизаций компилятора, асимптотика будет той же, ну может потеряем пару тактов на заворачивание/разворачивание. Могу замерить различия на своем языке - у меня точно нет оптимизатора
Не по теме: KolodeznyDiver, ну если у вас "конс в голову" в сложившемся вокруг него контексте ассоциируется в "маваши-гери дзё дан", то я стесняюсь даже написать, с чем должно ассоциироваться "накопительная конкатенация в хвост" :-[
0
|
06.05.2017, 23:44 | |
06.05.2017, 23:44 | |
Помогаю со студенческими работами здесь
20
Объединение 2 и более списков в список списков по индексу без использования циклов Копирование данных двумерного массива состоящего из списков в список списков. Как из двух списков сделать один список кортежей/списков Список списков после добавления списков остается пустым Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |